processFilesForUninstall(intoDir, templateVariables) {
    let fileInfos = this._getFileInfos(this.files(this.options), intoDir, templateVariables);

    this._ignoreUpdateFiles();

    fileInfos = fileInfos.filter(isValidFile).reduce((acc, info) => {
      // if it's possible that this blueprint could have produced either typescript OR javascript, we have to do some
      // work to figure out which files to delete.
      if (this.shouldTransformTypeScript) {
        if (this.options.typescript === true) {
          // if the user explicitly passed `--typescript`, we only want to delete TS files, so we stick with the existing
          // info object since it will contain a .ts outputPath (since we know this blueprint is authored in TS because
          // of our check above)
          acc.push(info);
          return acc;
        }

        const jsInfo = new FileInfo({
          ...info,
          outputPath: replaceTypeScriptExtension(info.outputPath),
          displayPath: replaceTypeScriptExtension(info.displayPath),
        });

        if (this.options.typescript === false) {
          // if the user explicitly passed `--no-typescript`, we only want to delete JS file, so we return our newly
          // created jsInfo object since it contains the javascript version of the output path.
          acc.push(jsInfo);
          return acc;
        }

        if (this.options.typescript === undefined) {
          // if the user didn't specify one way or the other, then both the JS and TS paths are possibilities, so we add
          // both of them to the list. `finishProcessingForUninstall` will actually look to see which of them exists and
          // delete whatever it finds.
          acc.push(info, jsInfo);
          return acc;
        }
      }

      acc.push(info);
      return acc;
    }, []);

    return finishProcessingForUninstall(fileInfos);
  }
@method processFilesForUninstall
    @param {String} intoDir
    @param {Object} templateVariables