hunk.code_window:   private async findProjectVersion(name: string): Promise<string | null> {
       let installedPackage;
       try {
         installedPackage = resolve(
           name,
           { checkLocal: true, basedir: this.workspace.root, resolvePackageJson: true },
         );
       } catch { }
       if (installedPackage) {
  
hunk.labels: keep keep keep replace replace replace keep keep keep keep
hunk.after_edit:       installedPackage = require.resolve(
           join(name, 'package.json'),
           { paths: [this.workspace.root] },
  
hunk.file_path: packages/angular/cli/commands/add-impl.ts
hunk.type: replace
file: /**
   * @license
   * Copyright Google Inc. All Rights Reserved.
   *
   * Use of this source code is governed by an MIT-style license that can be
   * found in the LICENSE file at https://angular.io/license
   */
  import 'symbol-observable';
  // symbol polyfill must go first
  // tslint:disable-next-line:ordered-imports import-groups
  import { tags, terminal } from '@angular-devkit/core';
  import { resolve } from '@angular-devkit/core/node';
  import * as fs from 'fs';
  import * as path from 'path';
  import { SemVer } from 'semver';
  import { Duplex } from 'stream';
  import { isWarningEnabled } from '../utilities/config';
  
  const packageJson = require('../package.json');
  
  function _fromPackageJson(cwd?: string) {
    cwd = cwd || process.cwd();
  
    do {
      const packageJsonPath = path.join(cwd, 'node_modules/@angular/cli/package.json');
      if (fs.existsSync(packageJsonPath)) {
        const content = fs.readFileSync(packageJsonPath, 'utf-8');
        if (content) {
          const json = JSON.parse(content);
          if (json['version']) {
            return new SemVer(json['version']);
          }
        }
      }
  
      // Check the parent.
      cwd = path.dirname(cwd);
    } while (cwd != path.dirname(cwd));
  
    return null;
  }
  
  
  // Check if we need to profile this CLI run.
  if (process.env['NG_CLI_PROFILING']) {
    let profiler: {
      startProfiling: (name?: string, recsamples?: boolean) => void;
      stopProfiling: (name?: string) => any; // tslint:disable-line:no-any
    };
    try {
      profiler = require('v8-profiler-node8'); // tslint:disable-line:no-implicit-dependencies
    } catch (err) {
      throw new Error(`Could not require 'v8-profiler-node8'. You must install it separetely with ` +
        `'npm install v8-profiler-node8 --no-save'.\n\nOriginal error:\n\n${err}`);
    }
  
    profiler.startProfiling();
  
    const exitHandler = (options: { cleanup?: boolean, exit?: boolean }) => {
      if (options.cleanup) {
        const cpuProfile = profiler.stopProfiling();
        fs.writeFileSync(
          path.resolve(process.cwd(), process.env.NG_CLI_PROFILING || '') + '.cpuprofile',
          JSON.stringify(cpuProfile),
        );
      }
  
      if (options.exit) {
        process.exit();
      }
    };
  
    process.on('exit', () => exitHandler({ cleanup: true }));
    process.on('SIGINT', () => exitHandler({ exit: true }));
    process.on('uncaughtException', () => exitHandler({ exit: true }));
  }
  
  let cli;
  try {
    const projectLocalCli = resolve(
      '@angular/cli',
      {
        checkGlobal: false,
        basedir: process.cwd(),
        preserveSymlinks: true,
      },
    );
  
    // This was run from a global, check local version.
    const globalVersion = new SemVer(packageJson['version']);
    let localVersion;
    let shouldWarn = false;
  
    try {
      localVersion = _fromPackageJson();
      shouldWarn = localVersion != null && globalVersion.compare(localVersion) > 0;
    } catch (e) {
      // eslint-disable-next-line no-console
      console.error(e);
      shouldWarn = true;
    }
  
    if (shouldWarn && isWarningEnabled('versionMismatch')) {
      const warning = terminal.yellow(tags.stripIndents`
      Your global Angular CLI version (${globalVersion}) is greater than your local
      version (${localVersion}). The local Angular CLI version is used.
  
      To disable this warning use "ng config -g cli.warnings.versionMismatch false".
      `);
      // Don't show warning colorised on `ng completion`
      if (process.argv[2] !== 'completion') {
          // eslint-disable-next-line no-console
        console.error(warning);
      } else {
          // eslint-disable-next-line no-console
        console.error(warning);
        process.exit(1);
      }
    }
  
    // No error implies a projectLocalCli, which will load whatever
    // version of ng-cli you have installed in a local package.json
    cli = require(projectLocalCli);
  } catch {
    // If there is an error, resolve could not find the ng-cli
    // library from a package.json. Instead, include it from a relative
    // path to this script file (which is likely a globally installed
    // npm package). Most common cause for hitting this is `ng new`
    cli = require('./cli');
  }
  
  if ('default' in cli) {
    cli = cli['default'];
  }
  
  // This is required to support 1.x local versions with a 6+ global
  let standardInput;
  try {
    standardInput = process.stdin;
  } catch (e) {
    delete process.stdin;
    process.stdin = new Duplex();
    standardInput = process.stdin;
  }
  
  cli({
    cliArgs: process.argv.slice(2),
    inputStream: standardInput,
    outputStream: process.stdout,
  })
    .then((exitCode: number) => {
      process.exit(exitCode);
    })
    .catch((err: Error) => {
      console.error('Unknown error: ' + err.toString());
      process.exit(127);
    });
  