Comparing version 1.0.10 to 1.0.11
@@ -23,3 +23,2 @@ "use strict"; | ||
exports.nearestPowerOf2 = nearestPowerOf2; | ||
exports.generatorsDriver = generatorsDriver; | ||
//************************************************************************************** | ||
@@ -649,92 +648,2 @@ /** | ||
//************************************************************************************** | ||
//region GeneratorDriver's related functions | ||
//************************************************************************************** | ||
var isGenerator = function isGenerator(generator) { | ||
if (typeof generator === "undefined") return false; | ||
return typeof generator.next === "function" && typeof generator.throw === "function"; | ||
}; | ||
//************************************************************************************** | ||
var isGeneratorFunction = function isGeneratorFunction(generator) { | ||
if (typeof generator === "undefined") return false; | ||
var constructor = generator.constructor; | ||
if (!constructor) return false; | ||
if (constructor.name === "GeneratorFunction" || constructor.displayName === "GeneratorFunction") return true; | ||
return isGenerator(generator); | ||
}; | ||
//************************************************************************************** | ||
/** | ||
* Simple "generator's driver" inspired by "https://github.com/tj/co". | ||
* @param {Generator|GeneratorFunction} generatorInstance | ||
* @returns {Promise} | ||
*/ | ||
function generatorsDriver(generatorInstance) { | ||
//region Check that we do have instance of "Generator" as input | ||
if (!isGenerator(generatorInstance)) { | ||
if (isGeneratorFunction(generatorInstance)) generatorInstance = generatorInstance();else throw new Error("Only generator instance of generator function is a valid input"); | ||
} | ||
//endregion | ||
return new Promise(function (resolve, reject) { | ||
/** | ||
* Driver function called on "reject" status in Promises | ||
* @param {*} error | ||
* @returns {*} | ||
*/ | ||
var onReject = function onReject(error) { | ||
var result = void 0; | ||
try { | ||
result = generatorInstance.throw(error); | ||
} catch (ex) { | ||
return reject(ex); | ||
} | ||
return callback(result); | ||
}; | ||
/** | ||
* Main driver function | ||
* @param {*} [result] | ||
* @returns {*} | ||
*/ | ||
var callback = function callback(result) { | ||
/** | ||
* @type Object | ||
* @property {boolean} done | ||
* @property {*} value | ||
*/ | ||
var generatorResult = void 0; | ||
try { | ||
generatorResult = generatorInstance.next(result); | ||
} catch (ex) { | ||
return reject(ex); | ||
} | ||
switch (true) { | ||
case generatorResult.value instanceof Promise: | ||
return generatorResult.done ? resolve(generatorResult.value) : generatorResult.value.then(callback, onReject); | ||
case isGeneratorFunction(generatorResult.value): | ||
case isGenerator(generatorResult.value): | ||
return generatorResult.done ? generatorsDriver(generatorResult.value).then(function (driverResult) { | ||
resolve(driverResult); | ||
}, onReject) : generatorsDriver(generatorResult.value).then(callback, onReject); | ||
case typeof generatorResult.value === "function": | ||
generatorResult.value = generatorResult.value(); | ||
default: | ||
return generatorResult.done ? resolve(generatorResult.value) : callback(generatorResult.value); | ||
} | ||
}; | ||
callback(); | ||
}); | ||
} | ||
//************************************************************************************** | ||
//endregion | ||
//************************************************************************************** | ||
//# sourceMappingURL=utils.js.map |
@@ -29,4 +29,4 @@ { | ||
"name": "pvutils", | ||
"version": "1.0.10", | ||
"version": "1.0.11", | ||
"license": "MIT" | ||
} |
112
src/utils.js
@@ -557,113 +557,1 @@ //************************************************************************************** | ||
//************************************************************************************** | ||
//region GeneratorDriver's related functions | ||
//************************************************************************************** | ||
const isGenerator = generator => | ||
{ | ||
if(typeof generator === "undefined") | ||
return false; | ||
return ((typeof generator.next === "function") && (typeof generator.throw === "function")); | ||
}; | ||
//************************************************************************************** | ||
const isGeneratorFunction = generator => | ||
{ | ||
if(typeof generator === "undefined") | ||
return false; | ||
const constructor = generator.constructor; | ||
if(!constructor) | ||
return false; | ||
if((constructor.name === "GeneratorFunction") || (constructor.displayName === "GeneratorFunction")) | ||
return true; | ||
return isGenerator(generator); | ||
}; | ||
//************************************************************************************** | ||
/** | ||
* Simple "generator's driver" inspired by "https://github.com/tj/co". | ||
* @param {Generator|GeneratorFunction} generatorInstance | ||
* @returns {Promise} | ||
*/ | ||
export function generatorsDriver(generatorInstance) | ||
{ | ||
//region Check that we do have instance of "Generator" as input | ||
if(!isGenerator(generatorInstance)) | ||
{ | ||
if(isGeneratorFunction(generatorInstance)) | ||
generatorInstance = generatorInstance(); | ||
else | ||
throw new Error("Only generator instance of generator function is a valid input"); | ||
} | ||
//endregion | ||
return new Promise((resolve, reject) => | ||
{ | ||
/** | ||
* Driver function called on "reject" status in Promises | ||
* @param {*} error | ||
* @returns {*} | ||
*/ | ||
const onReject = error => | ||
{ | ||
let result; | ||
try | ||
{ | ||
result = generatorInstance.throw(error); | ||
} | ||
catch(ex) | ||
{ | ||
return reject(ex); | ||
} | ||
return callback(result); | ||
}; | ||
/** | ||
* Main driver function | ||
* @param {*} [result] | ||
* @returns {*} | ||
*/ | ||
const callback = result => | ||
{ | ||
/** | ||
* @type Object | ||
* @property {boolean} done | ||
* @property {*} value | ||
*/ | ||
let generatorResult; | ||
try | ||
{ | ||
generatorResult = generatorInstance.next(result); | ||
} | ||
catch(ex) | ||
{ | ||
return reject(ex); | ||
} | ||
switch(true) | ||
{ | ||
case (generatorResult.value instanceof Promise): | ||
return ((generatorResult.done) ? resolve(generatorResult.value) : generatorResult.value.then(callback, onReject)); | ||
case isGeneratorFunction(generatorResult.value): | ||
case isGenerator(generatorResult.value): | ||
return ((generatorResult.done) ? generatorsDriver(generatorResult.value).then(driverResult => | ||
{ | ||
resolve(driverResult); | ||
}, onReject) : generatorsDriver(generatorResult.value).then(callback, onReject)); | ||
case (typeof generatorResult.value === "function"): | ||
generatorResult.value = generatorResult.value(); | ||
default: | ||
return (generatorResult.done) ? resolve(generatorResult.value) : callback(generatorResult.value); | ||
} | ||
}; | ||
callback(); | ||
}); | ||
} | ||
//************************************************************************************** | ||
//endregion | ||
//************************************************************************************** |
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
65064
1007