From 1dbe95a95ebcba53924aac9c2c6d93e5c9aa3387 Mon Sep 17 00:00:00 2001 From: Emerson Jair Date: Sun, 17 Mar 2019 22:16:04 -0300 Subject: [PATCH] feat(generators): add addCliDependency to app.nativescript (#104) This will control whether the schematics will add {N} CLI as a devDependency or not close #101 --- src/app.nativescript/index.ts | 32 +++++++++++++++++++++++++++++++- src/app.nativescript/schema.d.ts | 4 ++++ src/app.nativescript/schema.json | 5 +++++ src/utils/general.ts | 2 +- 4 files changed, 41 insertions(+), 2 deletions(-) diff --git a/src/app.nativescript/index.ts b/src/app.nativescript/index.ts index a9c41f3a..8356a506 100644 --- a/src/app.nativescript/index.ts +++ b/src/app.nativescript/index.ts @@ -13,7 +13,7 @@ import { schematic, noop, } from '@angular-devkit/schematics'; -import { stringUtils, prerun, getNpmScope, getPrefix, addRootDeps, updatePackageScripts, updateAngularProjects, updateNxProjects, applyAppNamingConvention, getGroupByName, getAppName, missingArgument } from '../utils'; +import { stringUtils, prerun, getNpmScope, getPrefix, addRootDeps, updatePackageScripts, updateAngularProjects, updateNxProjects, applyAppNamingConvention, getGroupByName, getAppName, missingArgument, getJsonFromFile, setDependency, updateJsonFile } from '../utils'; import { Schema as ApplicationOptions } from './schema'; export default function (options: ApplicationOptions) { @@ -43,6 +43,7 @@ export default function (options: ApplicationOptions) { })(tree, context), // add root package dependencies (tree: Tree) => addRootDeps(tree, {nativescript: true}), + addNsCli(options.addCliDependency), // add start/clean scripts (tree: Tree) => { const scripts = {}; @@ -99,3 +100,32 @@ function addAppFiles(options: ApplicationOptions, appPath: string, extra: string ])) ); } + +/** + * Add {N} CLI to devDependencies + */ +function addNsCli(add: boolean): Rule { + if (!add) { + return noop(); + } + + return (tree: Tree) => { + const packagePath = "package.json"; + const packageJson: { devDependencies: { [packageName: string]: string } } = getJsonFromFile(tree, packagePath); + + if (!packageJson) { + return tree; + } + + packageJson.devDependencies = setDependency( + packageJson.devDependencies, + { + name: 'nativescript', + version: "^5.0.0", + type: "devDependency" + } + ); + + return updateJsonFile(tree, packagePath, packageJson); + } +} diff --git a/src/app.nativescript/schema.d.ts b/src/app.nativescript/schema.d.ts index f4adacdf..d37ad318 100644 --- a/src/app.nativescript/schema.d.ts +++ b/src/app.nativescript/schema.d.ts @@ -31,4 +31,8 @@ export interface Schema { * Skip installing dependencies */ skipInstall?: boolean; + /** + * Add {N} CLI to devDependencies + */ + addCliDependency?: boolean; } diff --git a/src/app.nativescript/schema.json b/src/app.nativescript/schema.json index ff0fd84a..2b541270 100644 --- a/src/app.nativescript/schema.json +++ b/src/app.nativescript/schema.json @@ -47,6 +47,11 @@ "type": "boolean", "description": "Skip installing dependencies.", "default": false + }, + "addCliDependency": { + "type": "boolean", + "description": "Add {N} CLI to devDependencies", + "default": false } }, "required": [] diff --git a/src/utils/general.ts b/src/utils/general.ts index 57d52836..56aef446 100644 --- a/src/utils/general.ts +++ b/src/utils/general.ts @@ -201,7 +201,7 @@ export const copy = (tree: Tree, from: string, to: string) => { tree.create(to, file.content); }; -const setDependency = ( +export const setDependency = ( dependenciesMap: { [key: string]: string }, { name, version }: NodeDependency ) => Object.assign(dependenciesMap, { [name]: version });