UNPKG

3.12 kBSource Map (JSON)View Raw
1{"version":3,"file":"queue.js","names":["Queue","_queue_","constructor","size","length","clear","push","handler","priority","queue","index","i","splice","pop","entry","shift","run","exports"],"sources":["../src/queue.ts"],"sourcesContent":["/**\n * A simple queue with optional priority.\n */\nexport class Queue {\n\t/**\n\t * Queue data.\n\t */\n\tprivate _queue_: {\n\t\tpriority: number;\n\t\thandler: () => Promise<unknown>;\n\t}[] = [];\n\n\t/**\n\t * Queue constructor.\n\t */\n\tconstructor() {}\n\n\t/**\n\t * Get size of queue.\n\t *\n\t * @returns Total callbacks in queue.\n\t */\n\tpublic get size() {\n\t\treturn this._queue_.length;\n\t}\n\n\t/**\n\t * Clear queue.\n\t */\n\tpublic clear() {\n\t\tthis._queue_ = [];\n\t}\n\n\t/**\n\t * Enqueue callback.\n\t *\n\t * @param handler Callback function.\n\t * @param priority Callback priority.\n\t */\n\tpublic push(handler: () => Promise<unknown>, priority = 0) {\n\t\tconst queue = this._queue_;\n\t\tlet index = 0;\n\t\tfor (let i = queue.length; i--; ) {\n\t\t\tif (queue[i].priority < priority) {\n\t\t\t\tindex = i + 1;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tqueue.splice(index, 0, {\n\t\t\tpriority,\n\t\t\thandler\n\t\t});\n\t}\n\n\t/**\n\t * Pop callback off queue.\n\t *\n\t * @returns Callback function or null if empty.\n\t */\n\tpublic pop() {\n\t\tconst entry = this._queue_.pop();\n\t\treturn entry ? entry.handler : null;\n\t}\n\n\t/**\n\t * Shift callback off queue.\n\t *\n\t * @returns Callback function or null if empty.\n\t */\n\tpublic shift() {\n\t\tconst entry = this._queue_.shift();\n\t\treturn entry ? entry.handler : null;\n\t}\n\n\t/**\n\t * Run queue.\n\t */\n\tpublic async run() {\n\t\tfor (;;) {\n\t\t\tconst entry = this.pop();\n\t\t\tif (!entry) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// eslint-disable-next-line no-await-in-loop\n\t\t\tawait entry();\n\t\t}\n\t}\n}\n"],"mappings":";;;;;;AAAA;AACA;AACA;AACO,MAAMA,KAAK,CAAC;EAClB;AACD;AACA;EACSC,OAAO,GAGT,EAAE;;EAER;AACD;AACA;EACCC,WAAWA,CAAA,EAAG,CAAC;;EAEf;AACD;AACA;AACA;AACA;EACC,IAAWC,IAAIA,CAAA,EAAG;IACjB,OAAO,IAAI,CAACF,OAAO,CAACG,MAAM;EAC3B;;EAEA;AACD;AACA;EACQC,KAAKA,CAAA,EAAG;IACd,IAAI,CAACJ,OAAO,GAAG,EAAE;EAClB;;EAEA;AACD;AACA;AACA;AACA;AACA;EACQK,IAAIA,CAACC,OAA+B,EAAEC,QAAQ,GAAG,CAAC,EAAE;IAC1D,MAAMC,KAAK,GAAG,IAAI,CAACR,OAAO;IAC1B,IAAIS,KAAK,GAAG,CAAC;IACb,KAAK,IAAIC,CAAC,GAAGF,KAAK,CAACL,MAAM,EAAEO,CAAC,EAAE,GAAI;MACjC,IAAIF,KAAK,CAACE,CAAC,CAAC,CAACH,QAAQ,GAAGA,QAAQ,EAAE;QACjCE,KAAK,GAAGC,CAAC,GAAG,CAAC;QACb;MACD;IACD;IACAF,KAAK,CAACG,MAAM,CAACF,KAAK,EAAE,CAAC,EAAE;MACtBF,QAAQ;MACRD;IACD,CAAC,CAAC;EACH;;EAEA;AACD;AACA;AACA;AACA;EACQM,GAAGA,CAAA,EAAG;IACZ,MAAMC,KAAK,GAAG,IAAI,CAACb,OAAO,CAACY,GAAG,CAAC,CAAC;IAChC,OAAOC,KAAK,GAAGA,KAAK,CAACP,OAAO,GAAG,IAAI;EACpC;;EAEA;AACD;AACA;AACA;AACA;EACQQ,KAAKA,CAAA,EAAG;IACd,MAAMD,KAAK,GAAG,IAAI,CAACb,OAAO,CAACc,KAAK,CAAC,CAAC;IAClC,OAAOD,KAAK,GAAGA,KAAK,CAACP,OAAO,GAAG,IAAI;EACpC;;EAEA;AACD;AACA;EACC,MAAaS,GAAGA,CAAA,EAAG;IAClB,SAAS;MACR,MAAMF,KAAK,GAAG,IAAI,CAACD,GAAG,CAAC,CAAC;MACxB,IAAI,CAACC,KAAK,EAAE;QACX;MACD;;MAEA;MACA,MAAMA,KAAK,CAAC,CAAC;IACd;EACD;AACD;AAACG,OAAA,CAAAjB,KAAA,GAAAA,KAAA"}
\No newline at end of file