'use strict'

module.exports = (fn, cb) => {

    const queue = {
        n: 1,
        Q: cb ? [cb] : [],
        add: num => queue.n += num || 1,
        push: fn => queue.a ? fn(queue.a[0], queue.a[1]) : queue.Q.push(fn),
        done: (err, data) => {
            if (!(--queue.n < 0 ? 0 : queue.n)) {
                fn(err, data, (err, data) => {
                    queue.a = [err, data];
                    queue.Q.forEach(cb => cb(err, data));
                    queue.Q = [];
                });
            }
        }
    };

    return Object.create(queue);
};

@@ -71,23 +71,9 @@
     
-n: 1,%0A        Q
+q
 : cb
@@ -98,53 +98,13 @@
     
-add: num =%3E queue.n += num %7C%7C 1,%0A        push
+ready
 : fn
@@ -152,17 +152,17 @@
 : queue.
-Q
+q
 .push(fn
@@ -211,50 +211,32 @@
     
-if (!(--queue.n %3C 0 ? 0 : queue.n)) %7B%0A    
+queue.done = undefined;%0A
     
@@ -286,28 +286,24 @@
             
-    
 queue.a = %5Be
@@ -329,27 +329,23 @@
         
-    
 queue.
-Q
+q
 .forEach
@@ -387,19 +387,15 @@
     
-    
 queue.
-Q
+q
  = %5B
@@ -413,29 +413,11 @@
     
- 
-   %7D);%0A            %7D
+%7D);
 %0A   

update queue functionality