function targzGlobStream()

in lib/targz-glob-stream.js [9:55]


function targzGlobStream(globString, options) {
  const stream = tarstream.pack();

  const addFileToStream = (filePath, size) => {
    return new Promise((resolve, reject) => {
      const entry = stream.entry({
        name: path.relative(options.base || '', filePath),
        size: size
      }, (err) => {
        if(err) reject(err);
        resolve();
      });

      fs.createReadStream(filePath)
        .pipe(entry);
    });
  };

  const getFileMap = glob(globString, Object.assign({ nodir: true }, options))
    .then((files) => {
      const fileMap = {};
      const stattingFilePromises = files.map((file) => {
        return stat(file)
          .then((fileStats) => {
            fileMap[file] = fileStats;
          });
      });

      return Promise.all(stattingFilePromises)
        .then(() => fileMap);
    });


  getFileMap.then((fileMap) => {
      // We can only add one file at a time
      return Object.keys(fileMap).reduce((promiseChain, file) => {
        return promiseChain.then(() => {
          return addFileToStream(file, fileMap[file].size);
        });
      }, Promise.resolve());
    })
    .then(() => {
      stream.finalize();
    });

  return stream.pipe(zlib.createGzip());
}