pvutils
Advanced tools
Comparing version 1.0.6 to 1.0.7
@@ -29,4 +29,4 @@ { | ||
"name": "pvutils", | ||
"version": "1.0.6", | ||
"version": "1.0.7", | ||
"license": "MIT" | ||
} |
131
src/utils.js
@@ -341,5 +341,6 @@ //************************************************************************************** | ||
* @param {boolean} skipPadding Skip BASE-64 padding or not | ||
* @param {boolean} skipLeadingZeros Skip leading zeros in input data or not | ||
* @returns {string} | ||
*/ | ||
export function toBase64(input, useUrlTemplate = false, skipPadding = false) | ||
export function toBase64(input, useUrlTemplate = false, skipPadding = false, skipLeadingZeros = false) | ||
{ | ||
@@ -355,2 +356,18 @@ let i = 0; | ||
if(skipLeadingZeros) | ||
{ | ||
let nonZeroPosition = 0; | ||
for(let i = 0; i < input.length; i++) | ||
{ | ||
if(input.charCodeAt(i) !== 0) | ||
{ | ||
nonZeroPosition = i; | ||
break; | ||
} | ||
} | ||
input = input.slice(nonZeroPosition); | ||
} | ||
while(i < input.length) | ||
@@ -513,1 +530,113 @@ { | ||
//************************************************************************************** | ||
//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 | ||
//************************************************************************************** |
No README
QualityPackage does not have a README. This may indicate a failed publish or a low quality package.
Found 1 instance in 1 package
18805
6
541
0
12