UNPKG

keygen-advance

Version:

Generate highly customisable unique string/hex/url-friendly keys (Suggest any related features thanks)

510 lines (480 loc) 9.14 kB
const upperCase = 'QWERTYUIOPASDFGHJKLZXCVBNM'.split(''); const lowerCase = 'qwertyuiopasdfghjklzxcvbnm'.split(''); const numbers = '1234567890'.split(''); const symbols = '@#£&*()\'"%-+=/;:,.€$¥_^[]{}§|~…\\<>!?'.split(''); const sha = '1234567890abcdef'.split(''); var short = 11; var medium = 22; var long = 33; var def = 11; var excluded = []; var fullList = []; var extra = []; var filter = []; var disFilter = true; var aUpperCase = true; var aLowerCase = true; var aSymbols = true; var aNumbers = true; var logError = true; genList(); function genList() { try { fullList = []; if (aUpperCase) { fullList = fullList.concat(upperCase); } if (aLowerCase) { fullList = fullList.concat(lowerCase); } if (aSymbols) { fullList = fullList.concat(symbols); } if (aNumbers) { fullList = fullList.concat(numbers); } extra.forEach(item => { if (!fullList.includes(item)) { fullList.push(item); } }); excluded.forEach(item => { const index = fullList.indexOf(item); if (index != -1) { fullList.splice(index, 1); } }); } catch (err) { if (logError) { console.log(err); } } } function fixDefault() { try { if (typeof def != 'number') { def = 11; throw new Error('setDefault(...) number expected, found ' + typeof def); } } catch (err) { if (logError) { console.log(err); } } } function setDefault(value) { try { if (typeof value === 'number') { def = value; } else if (logError) { throw new Error('setDefault(...) number expected, found ' + typeof value); } } catch (err) { if (logError) { console.log(err); } } } function getList() { try { return fullList; } catch (err) { if (logError) { console.log(err); } } } function setList(list) { try { if (Array.isArray(list)) { fullList = list; } else if (logError) { throw new Error('setList(...) array expected, found ' + typeof list); } } catch (err) { if (logError) { console.log(err); } } } function getExcluded() { try { return excluded; } catch (err) { if (logError) { console.log(err); } } } function setExcluded(list) { try { if (Array.isArray(list)) { excluded = list; } else if (logError) { throw new Error('setExcluded(...) array expected, found ' + typeof list); } } catch (err) { if (logError) { console.log(err); } } } function getExtra() { try { return extra; } catch (err) { if (logError) { console.log(err); } } } function setExtra(list) { try { if (Array.isArray(list)) { extra = list; } else if (logError) { throw new Error('setExtra(...) array expected, found ' + typeof list); } } catch (err) { if (logError) { console.log(err); } } } function exclude(chars) { try { if (typeof chars === 'string') { chars = [chars]; } chars.forEach(item => { if (!excluded.includes(item)) { excluded.push(item); } }); genList(); } catch (err) { if (logError) { console.log(err); } } } function allow(chars) { try { if (typeof chars === 'string') { chars = [chars]; } chars.forEach(item => { const index = excluded.indexOf(item); if (index != -1) { excluded.splice(index, 1); } }); genList(); } catch (err) { console.log(err); } } function add(char) { try { if (typeof char === 'string') { char = [char]; } char.forEach(item => { if (!extra.includes(item)) { extra.push(item); } }); genList(); } catch (err) { if (logError) { console.log(err); } } } function remove(char) { try { if (typeof char === 'string') { char = [char]; } char.forEach(item => { var index = extra.indexOf(item); if (index != -1) { extra.splice(index, 1); } }); } catch (err) { if (logError) { console.log(err); } } } function reset() { try { excluded = []; fullList = []; extra = []; aUpperCase = true; aLowerCase = true; aSymbols = true; aNumbers = true; logError = true; def = 11; genList(); } catch (err) { if (logError) { console.log(err); } } } function allowUpperCase(bool) { try { if (typeof bool == 'boolean') { aUpperCase = bool; } else if (logError) { throw new Error( 'allowUpperCase(...) boolean expected, found ' + typeof bool ); } genList(); } catch (err) { if (logError) { console.log(err); } } } function allowLowerCase(bool) { try { if (typeof bool == 'boolean') { aLowerCase = bool; } else if (logError) { throw new Error( 'allowLowerCase(...) boolean expected, found ' + typeof bool ); } genList(); } catch (err) { if (logError) { console.log(err); } } } function allowSymbols(bool) { try { if (typeof bool == 'boolean') { aSymbols = bool; } else if (logError) { throw new Error( 'allowSymbols(...) boolean expected, found ' + typeof bool ); } genList(); } catch (err) { if (logError) { console.log(err); } } } function allowNumbers(bool) { try { if (typeof bool == 'boolean') { aNumbers = bool; } else if (logError) { throw new Error( 'allowNumbers(...) boolean expected, found ' + typeof bool ); } genList(); } catch (err) { if (logError) { console.log(err); } } } function logErrors(bool) { try { if (typeof bool == 'boolean') { logError = bool; } else if (logError) { throw new Error('lowErrors(...) boolean expected, found ' + typeof bool); } genList(); } catch (err) { if (logError) { console.log(err); } } } function disableFilter(bool) { try { if (typeof bool == 'boolean') { disFilter = bool; } else if (logError) { throw new Error( 'disableFilter(...) boolean expected, found ' + typeof bool ); } } catch (err) { if (logError) { console.log(err); } } } function setFilter(list){ try{ if(Array.isArray(list)){ filter = list; } else{ throw new Error( 'setFilter(...) array expected, found ' + typeof list ); } }catch(err){ if(logError){ console.log(err); } } } function gen(length, chars) { try { var out = ''; if (length) { if (chars) { if (Array.isArray(chars)) { for (var i = 0; i < length; i++) { out += chars[Math.floor(Math.random() * chars.length)]; } } else { throw new Error( 'gen(length,...) array expected, found ' + typeof chars ); } } else { for (var i = 0; i < length; i++) { out += fullList[Math.floor(Math.random() * fullList.length)]; } } } else { out = gen(def); } filter.forEach(item => { if (out.includes(item)) { out = gen(length, char); } }); return out; } catch (err) { if (logError) { console.log(err); } } } function url(length) { try { var out = ''; if (!length) { fixDefault(); length = def; } var original = aSymbols; if (aSymbols) { allowSymbols(false); } for (var i = 0; i < length; i++) { out += fullList[Math.floor(Math.random() * fullList.length)]; } if (!disFilter) { filter.forEach(item => { if (out.includes(item)) { out = url(length); } }); } if (aSymbols != original) { allowSymbols(original); } filter.forEach(item => { if (out.includes(item)) { out = url(length); } }); return out; } catch (err) { if (logError) { console.log(err); } } } function SHA256() { try { var out = ''; for (var i = 0; i < 64; i++) { out += sha[Math.floor(Math.random() * sha.length)]; } return out; } catch (err) { if (logError) { console.log(err); } } } function SHA512() { try { var out = ''; for (var i = 0; i < 128; i++) { out += sha[Math.floor(Math.random() * sha.length)]; } return out; } catch (err) { if (logError) { console.log(err); } } } function hex(length){ try { if(length==undefined){ length = def; } var out = ''; for (var i = 0; i < length; i++) { out += sha[Math.floor(Math.random() * sha.length)]; } return out; } catch (err) { if (logError) { console.log(err); } } } function key(length) { return hex(length); } module.exports.getList = getList; module.exports.setList = setList; module.exports.getExcluded = getExcluded; module.exports.setExcluded = setExcluded; module.exports.getExtra = getExtra; module.exports.setExtra = setExtra; module.exports.exclude = exclude; module.exports.allow = allow; module.exports.add = add; module.exports.remove = remove; module.exports.reset = reset; module.exports.allowUpperCase = allowUpperCase; module.exports.allowLowerCase = allowLowerCase; module.exports.allowSymbols = allowSymbols; module.exports.allowNumbers = allowNumbers; module.exports.logErrors = logErrors; module.exports.disableFilter = disableFilter; module.exports.gen = gen; module.exports.url = url; module.exports.setDefault = setDefault; module.exports.default = def; module.exports.short = short; module.exports.medium = medium; module.exports.long = long; module.exports.SHA256 = SHA256; module.exports.SHA512 = SHA512; module.exports.key = key; module.exports.hex = hex; module.exports.setFilter = setFilter;