hunk.code_window:     const config = new XI18nWebpackConfig({
         genDir,
         buildDir,
         i18nFormat: runTaskOptions.i18nFormat,
         locale: runTaskOptions.locale,
         outFile: runTaskOptions.outFile,
  
hunk.labels: keep replace replace keep keep keep
hunk.after_edit:       genDir: runTaskOptions.outputPath || appConfig.root,
         buildDir: '.tmp',
  
hunk.file_path: packages/@angular/cli/tasks/extract-i18n.ts
hunk.type: replace
file: import * as path from 'path';
  import { existsSync } from 'fs';
  
  export function findUp(names: string | string[], from: string, stopOnNodeModules = false) {
    if (!Array.isArray(names)) {
      names = [names];
    }
    const root = path.parse(from).root;
  
    let currentDir = from;
    while (currentDir && currentDir !== root) {
      for (const name of names) {
        const p = path.join(currentDir, name);
        if (existsSync(p)) {
          return p;
        }
      }
  
      if (stopOnNodeModules) {
        const nodeModuleP = path.join(currentDir, 'node_modules');
        if (existsSync(nodeModuleP)) {
          return null;
        }
      }
  
      currentDir = path.dirname(currentDir);
    }
  
    return null;
  }
  