const through = require('./through');
const sortBy = require('lodash/sortBy');

function sleep (ms) {
  return new Promise((resolve) => setTimeout(resolve, ms));
}

module.exports = exports = function (iteratees) {
  var files = [];

  return through(
    async (stream, file) => {
      if (file.isNull()) return;

      files.push(file);
    },
    async (stream) => {
      const queue = sortBy(files, iteratees);
      files = null;

      for (const file of queue) {
        stream.push(file);
        await sleep(100);
      }
    }
  );
};