JezK
Edit File: blocking-queue.js.map
{"version":3,"file":"blocking-queue.js","names":["debug","require","BlockingQueue","alias","maxConcurrency","Infinity","concurrencyQueue","runningCount","warnedStuck","first","running","map","queue","stuckTick","bind","stuckTimer","clearTimeout","setTimeout","unref","JSON","stringify","Object","keys","key","factory","stillActive","Promise","resolve","reject","push","shift","length","next","shiftConcurrencyQueue","run","then","val","err","maybePushConcurrencyQueue","fn"],"sourceRoot":"../../src","sources":["util/blocking-queue.js"],"sourcesContent":["/* @flow */\n\nimport map from './map.js';\n\nconst debug = require('debug')('yarn');\n\nexport default class BlockingQueue {\n constructor(alias: string, maxConcurrency?: number = Infinity) {\n this.concurrencyQueue = [];\n this.maxConcurrency = maxConcurrency;\n this.runningCount = 0;\n this.warnedStuck = false;\n this.alias = alias;\n this.first = true;\n\n this.running = map();\n this.queue = map();\n\n (this: any).stuckTick = this.stuckTick.bind(this);\n }\n\n concurrencyQueue: Array<() => void>;\n warnedStuck: boolean;\n maxConcurrency: number;\n runningCount: number;\n stuckTimer: ?TimeoutID;\n alias: string;\n first: boolean;\n\n queue: {\n [key: string]: Array<{\n factory: () => Promise<any>,\n resolve: (val: any) => void,\n reject: Function,\n }>,\n };\n\n running: {\n [key: string]: boolean,\n };\n\n stillActive() {\n if (this.stuckTimer) {\n clearTimeout(this.stuckTimer);\n }\n\n this.stuckTimer = setTimeout(this.stuckTick, 5000);\n\n // We need to check the existence of unref because of https://github.com/facebook/jest/issues/4559\n // $FlowFixMe: Node's setInterval returns a Timeout, not a Number\n this.stuckTimer.unref && this.stuckTimer.unref();\n }\n\n stuckTick() {\n if (this.runningCount === 1) {\n this.warnedStuck = true;\n debug(\n `The ${JSON.stringify(this.alias)} blocking queue may be stuck. 5 seconds ` +\n `without any activity with 1 worker: ${Object.keys(this.running)[0]}`,\n );\n }\n }\n\n push<T>(key: string, factory: () => Promise<T>): Promise<T> {\n if (this.first) {\n this.first = false;\n } else {\n this.stillActive();\n }\n\n return new Promise((resolve, reject) => {\n // we're already running so push ourselves to the queue\n const queue = (this.queue[key] = this.queue[key] || []);\n queue.push({factory, resolve, reject});\n\n if (!this.running[key]) {\n this.shift(key);\n }\n });\n }\n\n shift(key: string) {\n if (this.running[key]) {\n delete this.running[key];\n this.runningCount--;\n\n if (this.stuckTimer) {\n clearTimeout(this.stuckTimer);\n this.stuckTimer = null;\n }\n\n if (this.warnedStuck) {\n this.warnedStuck = false;\n debug(`${JSON.stringify(this.alias)} blocking queue finally resolved. Nothing to worry about.`);\n }\n }\n\n const queue = this.queue[key];\n if (!queue) {\n return;\n }\n\n const {resolve, reject, factory} = queue.shift();\n if (!queue.length) {\n delete this.queue[key];\n }\n\n const next = () => {\n this.shift(key);\n this.shiftConcurrencyQueue();\n };\n\n const run = () => {\n this.running[key] = true;\n this.runningCount++;\n\n factory()\n .then(function(val): null {\n resolve(val);\n next();\n return null;\n })\n .catch(function(err) {\n reject(err);\n next();\n });\n };\n\n this.maybePushConcurrencyQueue(run);\n }\n\n maybePushConcurrencyQueue(run: () => void) {\n if (this.runningCount < this.maxConcurrency) {\n run();\n } else {\n this.concurrencyQueue.push(run);\n }\n }\n\n shiftConcurrencyQueue() {\n if (this.runningCount < this.maxConcurrency) {\n const fn = this.concurrencyQueue.shift();\n if (fn) {\n fn();\n }\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AAEA,IAAMA,KAAK,GAAGC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;AAAC,IAElBC,aAAa;EAChC,uBAAYC,KAAa,EAAsC;IAAA,IAApCC,cAAuB,uEAAGC,QAAQ;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAC3D,IAAI,CAACC,gBAAgB,GAAG,EAAE;IAC1B,IAAI,CAACF,cAAc,GAAGA,cAAc;IACpC,IAAI,CAACG,YAAY,GAAG,CAAC;IACrB,IAAI,CAACC,WAAW,GAAG,KAAK;IACxB,IAAI,CAACL,KAAK,GAAGA,KAAK;IAClB,IAAI,CAACM,KAAK,GAAG,IAAI;IAEjB,IAAI,CAACC,OAAO,GAAG,IAAAC,iBAAG,GAAE;IACpB,IAAI,CAACC,KAAK,GAAG,IAAAD,iBAAG,GAAE;IAEjB,IAAI,CAAOE,SAAS,GAAG,IAAI,CAACA,SAAS,CAACC,IAAI,CAAC,IAAI,CAAC;EACnD;EAAC;IAAA;IAAA,OAsBD,uBAAc;MACZ,IAAI,IAAI,CAACC,UAAU,EAAE;QACnBC,YAAY,CAAC,IAAI,CAACD,UAAU,CAAC;MAC/B;MAEA,IAAI,CAACA,UAAU,GAAGE,UAAU,CAAC,IAAI,CAACJ,SAAS,EAAE,IAAI,CAAC;;MAElD;MACA;MACA,IAAI,CAACE,UAAU,CAACG,KAAK,IAAI,IAAI,CAACH,UAAU,CAACG,KAAK,EAAE;IAClD;EAAC;IAAA;IAAA,OAED,qBAAY;MACV,IAAI,IAAI,CAACX,YAAY,KAAK,CAAC,EAAE;QAC3B,IAAI,CAACC,WAAW,GAAG,IAAI;QACvBR,KAAK,CACH,cAAOmB,IAAI,CAACC,SAAS,CAAC,IAAI,CAACjB,KAAK,CAAC,8FACQkB,MAAM,CAACC,IAAI,CAAC,IAAI,CAACZ,OAAO,CAAC,CAAC,CAAC,CAAC,CAAE,CACxE;MACH;IACF;EAAC;IAAA;IAAA,OAED,cAAQa,GAAW,EAAEC,OAAyB,EAAc;MAAA;MAC1D,IAAI,IAAI,CAACf,KAAK,EAAE;QACd,IAAI,CAACA,KAAK,GAAG,KAAK;MACpB,CAAC,MAAM;QACL,IAAI,CAACgB,WAAW,EAAE;MACpB;MAEA,OAAO,IAAIC,OAAO,CAAC,UAACC,OAAO,EAAEC,MAAM,EAAK;QACtC;QACA,IAAMhB,KAAK,GAAI,KAAI,CAACA,KAAK,CAACW,GAAG,CAAC,GAAG,KAAI,CAACX,KAAK,CAACW,GAAG,CAAC,IAAI,EAAG;QACvDX,KAAK,CAACiB,IAAI,CAAC;UAACL,OAAO,EAAPA,OAAO;UAAEG,OAAO,EAAPA,OAAO;UAAEC,MAAM,EAANA;QAAM,CAAC,CAAC;QAEtC,IAAI,CAAC,KAAI,CAAClB,OAAO,CAACa,GAAG,CAAC,EAAE;UACtB,KAAI,CAACO,KAAK,CAACP,GAAG,CAAC;QACjB;MACF,CAAC,CAAC;IACJ;EAAC;IAAA;IAAA,OAED,eAAMA,GAAW,EAAE;MAAA;MACjB,IAAI,IAAI,CAACb,OAAO,CAACa,GAAG,CAAC,EAAE;QACrB,OAAO,IAAI,CAACb,OAAO,CAACa,GAAG,CAAC;QACxB,IAAI,CAAChB,YAAY,EAAE;QAEnB,IAAI,IAAI,CAACQ,UAAU,EAAE;UACnBC,YAAY,CAAC,IAAI,CAACD,UAAU,CAAC;UAC7B,IAAI,CAACA,UAAU,GAAG,IAAI;QACxB;QAEA,IAAI,IAAI,CAACP,WAAW,EAAE;UACpB,IAAI,CAACA,WAAW,GAAG,KAAK;UACxBR,KAAK,WAAImB,IAAI,CAACC,SAAS,CAAC,IAAI,CAACjB,KAAK,CAAC,+DAA4D;QACjG;MACF;MAEA,IAAMS,KAAK,GAAG,IAAI,CAACA,KAAK,CAACW,GAAG,CAAC;MAC7B,IAAI,CAACX,KAAK,EAAE;QACV;MACF;MAEA,mBAAmCA,KAAK,CAACkB,KAAK,EAAE;QAAzCH,OAAO,gBAAPA,OAAO;QAAEC,MAAM,gBAANA,MAAM;QAAEJ,OAAO,gBAAPA,OAAO;MAC/B,IAAI,CAACZ,KAAK,CAACmB,MAAM,EAAE;QACjB,OAAO,IAAI,CAACnB,KAAK,CAACW,GAAG,CAAC;MACxB;MAEA,IAAMS,IAAI,GAAG,SAAPA,IAAI,GAAS;QACjB,MAAI,CAACF,KAAK,CAACP,GAAG,CAAC;QACf,MAAI,CAACU,qBAAqB,EAAE;MAC9B,CAAC;MAED,IAAMC,GAAG,GAAG,SAANA,GAAG,GAAS;QAChB,MAAI,CAACxB,OAAO,CAACa,GAAG,CAAC,GAAG,IAAI;QACxB,MAAI,CAAChB,YAAY,EAAE;QAEnBiB,OAAO,EAAE,CACNW,IAAI,CAAC,UAASC,GAAG,EAAQ;UACxBT,OAAO,CAACS,GAAG,CAAC;UACZJ,IAAI,EAAE;UACN,OAAO,IAAI;QACb,CAAC,CAAC,SACI,CAAC,UAASK,GAAG,EAAE;UACnBT,MAAM,CAACS,GAAG,CAAC;UACXL,IAAI,EAAE;QACR,CAAC,CAAC;MACN,CAAC;MAED,IAAI,CAACM,yBAAyB,CAACJ,GAAG,CAAC;IACrC;EAAC;IAAA;IAAA,OAED,mCAA0BA,GAAe,EAAE;MACzC,IAAI,IAAI,CAAC3B,YAAY,GAAG,IAAI,CAACH,cAAc,EAAE;QAC3C8B,GAAG,EAAE;MACP,CAAC,MAAM;QACL,IAAI,CAAC5B,gBAAgB,CAACuB,IAAI,CAACK,GAAG,CAAC;MACjC;IACF;EAAC;IAAA;IAAA,OAED,iCAAwB;MACtB,IAAI,IAAI,CAAC3B,YAAY,GAAG,IAAI,CAACH,cAAc,EAAE;QAC3C,IAAMmC,EAAE,GAAG,IAAI,CAACjC,gBAAgB,CAACwB,KAAK,EAAE;QACxC,IAAIS,EAAE,EAAE;UACNA,EAAE,EAAE;QACN;MACF;IACF;EAAC;EAAA;AAAA;AAAA"}