UNPKG

3.08 kBSource Map (JSON)View Raw
1{"version":3,"sources":["queue.ts"],"names":["Queue","Object","constructor","size","_queue_","length","clear","push","handler","priority","queue","index","i","splice","pop","entry","shift","run"],"mappings":";;;;;;;;;;;AAAA;AACA;AACA;AACO,MAAMA,KAAN,SAAoBC,MAApB,CAA2B;AACjC;AACD;AACA;AAMCC,EAAAA,WAAW,GAAG;AACb;AADa,mDAFR,EAEQ;AAEb;AAED;AACD;AACA;AACA;AACA;;;AACgB,MAAJC,IAAI,GAAG;AACjB,WAAO,KAAKC,OAAL,CAAaC,MAApB;AACA;AAED;AACD;AACA;;;AACQC,EAAAA,KAAK,GAAG;AACd,SAAKF,OAAL,GAAe,EAAf;AACA;AAED;AACD;AACA;AACA;AACA;AACA;;;AACQG,EAAAA,IAAI,CAACC,OAAD,EAA8BC,QAAQ,GAAG,CAAzC,EAA4C;AACtD,UAAMC,KAAK,GAAG,KAAKN,OAAnB;AACA,QAAIO,KAAK,GAAG,CAAZ;;AACA,SAAK,IAAIC,CAAC,GAAGF,KAAK,CAACL,MAAnB,EAA2BO,CAAC,EAA5B,GAAiC;AAChC,UAAIF,KAAK,CAACE,CAAD,CAAL,CAASH,QAAT,GAAoBA,QAAxB,EAAkC;AACjCE,QAAAA,KAAK,GAAGC,CAAC,GAAG,CAAZ;AACA;AACA;AACD;;AACDF,IAAAA,KAAK,CAACG,MAAN,CAAaF,KAAb,EAAoB,CAApB,EAAuB;AACtBF,MAAAA,QADsB;AAEtBD,MAAAA;AAFsB,KAAvB;AAIA;AAED;AACD;AACA;AACA;AACA;;;AACQM,EAAAA,GAAG,GAAG;AACZ,UAAMC,KAAK,GAAG,KAAKX,OAAL,CAAaU,GAAb,EAAd;;AACA,WAAOC,KAAK,GAAGA,KAAK,CAACP,OAAT,GAAmB,IAA/B;AACA;AAED;AACD;AACA;AACA;AACA;;;AACQQ,EAAAA,KAAK,GAAG;AACd,UAAMD,KAAK,GAAG,KAAKX,OAAL,CAAaY,KAAb,EAAd;;AACA,WAAOD,KAAK,GAAGA,KAAK,CAACP,OAAT,GAAmB,IAA/B;AACA;AAED;AACD;AACA;;;AACiB,QAAHS,GAAG,GAAG;AAClB,aAAS;AACR,YAAMF,KAAK,GAAG,KAAKD,GAAL,EAAd;;AACA,UAAI,CAACC,KAAL,EAAY;AACX;AACA,OAJO,CAMR;;;AACA,YAAMA,KAAK,EAAX;AACA;AACD;;AAnFgC","sourcesContent":["/**\n * A simple queue with optional priority.\n */\nexport class Queue extends Object {\n\t/**\n\t * Queue data.\n\t */\n\tprivate _queue_: {\n\t\tpriority: number;\n\t\thandler: () => Promise<any>;\n\t}[] = [];\n\n\tconstructor() {\n\t\tsuper();\n\t}\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<any>, 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"],"file":"queue.js","sourceRoot":"../src"}
\No newline at end of file