{"version":3,"sources":["../src/queue.ts"],"sourcesContent":["import { defer, Deferred } from './defer.js';\n\nexport const createQueue = <T, E = Error>() => {\n  const pendingQueue: Deferred<T, E>[] = [];\n  const resolvedQueue: Deferred<T, E>[] = [];\n  const requestQueue: Deferred<T, E>[] = [];\n\n  const push = (value: T): Deferred<T, E> => {\n    const task = defer<T, E>();\n    pendingQueue.push(task);\n\n    Promise.resolve(value)\n      .then(task.resolve)\n      .catch(task.reject)\n      .finally(() => {\n        pendingQueue.splice(pendingQueue.indexOf(task), 1);\n        if (requestQueue.length > 0) {\n          const request = requestQueue.shift();\n          request.resolve(task.promise);\n        } else {\n          resolvedQueue.push(task);\n        }\n      });\n\n    return task;\n  };\n\n  const pull = (): Deferred<T, E> => {\n    if (resolvedQueue.length > 0) {\n      return resolvedQueue.shift();\n    }\n    const task = defer<T, E>();\n    requestQueue.push(task);\n\n    return task;\n  };\n\n  return {\n    push,\n    pull,\n    done(value: T) {\n      push(value);\n      return Promise.all(\n        [...pendingQueue, ...resolvedQueue, ...requestQueue].map(\n          (d) => d.promise,\n        ),\n      );\n    },\n    get size() {\n      return pendingQueue.length + resolvedQueue.length + requestQueue.length;\n    },\n  };\n};\n"],"names":["createQueue","pendingQueue","resolvedQueue","requestQueue","push","value","task","defer","Promise","resolve","then","catch","reject","finally","splice","indexOf","length","request","shift","promise","pull","done","all","map","d","size"],"mappings":";;;;+BAEaA;;;eAAAA;;;0BAFmB;AAEzB,MAAMA,cAAc;IACzB,MAAMC,eAAiC,EAAE;IACzC,MAAMC,gBAAkC,EAAE;IAC1C,MAAMC,eAAiC,EAAE;IAEzC,MAAMC,OAAO,CAACC;QACZ,MAAMC,OAAOC,IAAAA,eAAK;QAClBN,aAAaG,IAAI,CAACE;QAElBE,QAAQC,OAAO,CAACJ,OACbK,IAAI,CAACJ,KAAKG,OAAO,EACjBE,KAAK,CAACL,KAAKM,MAAM,EACjBC,OAAO,CAAC;YACPZ,aAAaa,MAAM,CAACb,aAAac,OAAO,CAACT,OAAO;YAChD,IAAIH,aAAaa,MAAM,GAAG,GAAG;gBAC3B,MAAMC,UAAUd,aAAae,KAAK;gBAClCD,QAAQR,OAAO,CAACH,KAAKa,OAAO;YAC9B,OAAO;gBACLjB,cAAcE,IAAI,CAACE;YACrB;QACF;QAEF,OAAOA;IACT;IAEA,MAAMc,OAAO;QACX,IAAIlB,cAAcc,MAAM,GAAG,GAAG;YAC5B,OAAOd,cAAcgB,KAAK;QAC5B;QACA,MAAMZ,OAAOC,IAAAA,eAAK;QAClBJ,aAAaC,IAAI,CAACE;QAElB,OAAOA;IACT;IAEA,OAAO;QACLF;QACAgB;QACAC,MAAKhB,KAAQ;YACXD,KAAKC;YACL,OAAOG,QAAQc,GAAG,CAChB;mBAAIrB;mBAAiBC;mBAAkBC;aAAa,CAACoB,GAAG,CACtD,CAACC,IAAMA,EAAEL,OAAO;QAGtB;QACA,IAAIM,QAAO;YACT,OAAOxB,aAAae,MAAM,GAAGd,cAAcc,MAAM,GAAGb,aAAaa,MAAM;QACzE;IACF;AACF"}