From f5160285266374761b72c5cc553e7e92c659f34e Mon Sep 17 00:00:00 2001 From: Vahan Minasian Date: Tue, 9 Apr 2019 13:28:53 +0200 Subject: [PATCH] feat(recommended-bump): added recommended-bump schematics --- src/recommended-bump/index.ts | 38 +++++++++++++++++++++++++++++++---- 1 file changed, 34 insertions(+), 4 deletions(-) diff --git a/src/recommended-bump/index.ts b/src/recommended-bump/index.ts index 9669035..1fa905c 100644 --- a/src/recommended-bump/index.ts +++ b/src/recommended-bump/index.ts @@ -1,10 +1,40 @@ -import { Rule, SchematicContext, Tree } from '@angular-devkit/schematics'; +import { Rule, SchematicContext, SchematicsException, Tree } from '@angular-devkit/schematics'; +import { NodePackageInstallTask } from '@angular-devkit/schematics/tasks'; - -// You don't have to export the function as default. You can also have more than one rule factory -// per file. export function recommendedBump(_options: any): Rule { return (tree: Tree, _context: SchematicContext) => { + + const packageJsonBuffer = tree.read("package.json"); + if (!packageJsonBuffer) { + throw new SchematicsException("Not an npm project. Couldn't find package.json"); + } + + const packageJson = JSON.parse(packageJsonBuffer.toString()); + + const scripts = "scripts"; + const recommendedVersionBumpScript = "recommended:bump"; + const recommendedVersionBumpScriptCmd = "conventional-recommended-bump --preset=angular"; + if (!packageJson[scripts]) { + packageJson[scripts] = {}; + } + packageJson[scripts][recommendedVersionBumpScript] = recommendedVersionBumpScriptCmd; + + const devDeps = "devDependencies"; + const recommendedVersionBump = "conventional-recommended-bump"; + const version = "latest"; + if (!packageJson[devDeps]) { + packageJson[devDeps] = {}; + } + + if (!packageJson[devDeps][recommendedVersionBump]) { + packageJson[devDeps][recommendedVersionBump] = version; + } + + tree.overwrite('package.json', JSON.stringify(packageJson, null, 2)); + _context.logger.log('info', `Added "${recommendedVersionBumpScript}" to "${scripts}" in package.json`); + _context.logger.log('info', `Added "${recommendedVersionBump}@${version}" to ${devDeps}`); + _context.addTask(new NodePackageInstallTask()); + return tree; }; }