docs: function build(
      projectOptions, buildOptions, outDirsAsync, cssRenamingFileAsync) {
    var inputFilesAsync = resolveInputsAsync(projectOptions);
  
    return outDirsAsync.then(function(outDirs) {
      var transitiveClosureDepsAsync =
          closureDepCalculator.calcDeps(projectOptions, buildOptions, outDirs);
      return kew.all([inputFilesAsync, transitiveClosureDepsAsync])
          .then(function(results) {
            var inputFiles = results[0];
            var transitiveClosureDeps = results[1];
  
            var resolvedProjectOptions =
                resolveProjectOptions(projectOptions, inputFiles);
            var jsModules = jsModuleManager.calcInputFiles(
                resolvedProjectOptions, transitiveClosureDeps);
            return compileAndOutputJs(resolvedProjectOptions, buildOptions,
                outDirs, cssRenamingFileAsync, jsModules);
          });
    });
  }