index.js 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. 'use strict';
  2. var groupCount;
  3. groupCount = 0;
  4. module.exports = function(gulp) {
  5. var async, sync;
  6. async = function(tasks, prefix) {
  7. var result, syncCount, task, _i, _len;
  8. if (prefix == null) {
  9. prefix = 'sync group';
  10. }
  11. if (prefix === 'sync group') {
  12. prefix += groupCount++;
  13. }
  14. result = [];
  15. syncCount = 0;
  16. for (_i = 0, _len = tasks.length; _i < _len; _i++) {
  17. task = tasks[_i];
  18. if (Array.isArray(task)) {
  19. task = sync(task, prefix + ':' + syncCount)[0];
  20. syncCount++;
  21. }
  22. result.push(task);
  23. }
  24. return result;
  25. };
  26. sync = function(tasks, prefix) {
  27. var deps, index, task, taskName, _fn, _i, _len;
  28. if (prefix == null) {
  29. prefix = 'sync group';
  30. }
  31. if (prefix === 'sync group') {
  32. prefix += groupCount++;
  33. }
  34. deps = [];
  35. _fn = function(taskName, deps, task) {
  36. return gulp.task(taskName, deps, function(cb) {
  37. var check, onStop;
  38. check = task.concat();
  39. gulp.addListener('task_stop', onStop = function(e) {
  40. var i;
  41. if (-1 !== (i = check.indexOf(e.task))) {
  42. check.splice(i, 1);
  43. if (check.length === 0) {
  44. gulp.removeListener('task_stop', onStop);
  45. return cb();
  46. }
  47. }
  48. });
  49. return gulp.start.apply(gulp, task);
  50. });
  51. };
  52. for (index = _i = 0, _len = tasks.length; _i < _len; index = ++_i) {
  53. task = tasks[index];
  54. taskName = prefix + ':' + index;
  55. if (Array.isArray(task)) {
  56. task = async(task, taskName);
  57. } else {
  58. task = [task];
  59. }
  60. _fn(taskName, deps, task);
  61. deps = [taskName];
  62. }
  63. return deps;
  64. };
  65. return {
  66. async: async,
  67. sync: sync
  68. };
  69. };