passfather 4.0.1 → 4.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,10 +1,15 @@
1
1
  # passfather
2
2
  [![version](https://img.shields.io/npm/v/passfather.svg?style=flat-square)](https://www.npmjs.com/package/passfather)
3
- [![npm downloads](https://img.shields.io/npm/dw/passfather.svg?style=flat-square)](https://www.npmjs.com/package/passfather)
3
+ [![npm downloads](https://img.shields.io/npm/d18m/passfather)](https://www.npmjs.com/package/passfather)
4
+ [![CI](https://github.com/vyushin/passfather/actions/workflows/nodejs.yml/badge.svg)](https://github.com/vyushin/passfather/actions/workflows/.github/workflows/nodejs.yml)
5
+ [![npm bundle size](https://img.shields.io/bundlephobia/min/passfather)](https://github.com/vyushin/passfather/tree/main/dist)
6
+ [![types](https://img.shields.io/npm/types/passfather.svg)](https://github.com/vyushin/passfather/blob/main/dist/passfather.d.ts)
4
7
  [![license](https://img.shields.io/github/license/vyushin/passfather.svg?style=flat-square)](https://github.com/vyushin/passfather/blob/master/LICENSE)
5
8
 
6
9
  **passfather** is a very fast and powerful utility with zero dependencies, designed to generate strong passwords or random strings.
7
10
 
11
+ ![passfather is a lightweight and powerful password generator for JavaScript and TypeScript projects — zero dependencies, high entropy, full browser and Node.js support](https://github.com/user-attachments/assets/7ad3a013-a80d-41ec-8a73-2a4d1b201432)
12
+
8
13
  > **passfather is free** and will always remain free <br/>
9
14
  > A simple and quick way to support the project is to **buy me a coffee**. <br/>It will take no more than 5 minutes and will allow the project to keep going
10
15
 
@@ -22,7 +27,7 @@
22
27
 
23
28
  ## Features
24
29
 
25
- * Supports both browsers and Node.js.;
30
+ * Supports both browsers and Node.js;
26
31
  * Offers multiple random number algorithms such as Alea, KISS07, Kybos, LFib, LFIB4, MRG32k3a, Xorshift03.
27
32
  By default, it uses [getRandomValues](https://developer.mozilla.org/ru/docs/Web/API/RandomSource/getRandomValues) for browsers and [getRandomBytes](https://nodejs.org/api/crypto.html#crypto_crypto_randombytes_size_callback) for Node.js;
28
33
  * Supports seeding with entropy;
@@ -78,7 +83,7 @@ const password = passfather({
78
83
  console.log(password); // Output "40rAe2hqiM0UzTmN"
79
84
  ```
80
85
 
81
- **NOTE:** an options object is passed, it merges with the default options object.
86
+ **Note:** when an options object is passed, it merges with the default configuration.
82
87
 
83
88
  ## Options
84
89
 
@@ -88,9 +93,9 @@ console.log(password); // Output "40rAe2hqiM0UzTmN"
88
93
  |uppercase|boolean|`true`|Enable/disable uppercase
89
94
  |lowercase|boolean|`true`|Enable/disable lowercase
90
95
  |symbols|boolean|`true`|Enable/disable symbols
91
- |length|integer|`12`|Final string length
96
+ |length|integer|`12`|Length of the generated string
92
97
  |prng|string|`default`| The algorithm for generating random strings uses random numbers generated by a [pseudorandom number generator]((https://en.wikipedia.org/wiki/Pseudorandom_number_generator)) (PRNG). Options include default, Alea, KISS07, Kybos, LFib, LFIB4, MRG32k3a, and Xorshift03. By default, it uses [getRandomValues](https://developer.mozilla.org/ru/docs/Web/API/RandomSource/getRandomValues) for browsers and [getRandomBytes](https://nodejs.org/api/crypto.html#crypto_crypto_randombytes_size_callback) for Node.js;
93
- |seed|array|[seed.js](https://github.com/vyushin/passfather/blob/master/src/seed.js)|Seed for the PRNG. See [random seed](https://en.wikipedia.org/wiki/Random_seed) for details. NOTE: The default value may not have sufficient entropy. It is recommended to use your own values for better security.
98
+ |seed|array|[seed.js](https://github.com/vyushin/passfather/blob/master/src/seed.js)|Seed for the PRNG. See [random seed](https://en.wikipedia.org/wiki/Random_seed) for details. Note: the default value may not have sufficient entropy. It is recommended to use your own values for better security.
94
99
  |ranges|array|`null`|UTF-8 character ranges that will be used to generate the random string. See below for details.
95
100
 
96
101
  ### Options: `ranges` (custom characters)
@@ -1,5 +1,5 @@
1
1
  /*
2
- @version 4.0.1
2
+ @version 4.0.3
3
3
  @description Passfather is very fast and powerful utility with zero dependencies to generate strong password
4
4
  @copyright Copyright (c) 2019-present, Evgeny Vyushin <e@vyushin.ru> (https://github.com/vyushin)
5
5
  @license
@@ -34,4 +34,4 @@ var r=4294967087,t=4294944443,o=12345,s=12345,u=123,i=12345,a=12345,c=123;0===e.
34
34
  /*! From http://baagoe.com/en/RandomMusings/javascript/ */(),E=function(){if(m)return g;m=1;const n=w();return g=function(){return function(e){
35
35
  /*! George Marsaglia, 13 May 2003 */
36
36
  /*! http://groups.google.com/group/comp.lang.c/msg/e3c4ea1169e463ae */
37
- var r=123456789,t=362436069,o=521288629,s=88675123,u=886756453;0==e.length&&(e=[+new Date]);for(var i=n(),a=0;a<e.length;a++)r^=4294967296*i(e[a]),t^=4294967296*i(e[a]),o^=4294967296*i(e[a]),u^=4294967296*i(e[a]),s^=4294967296*i(e[a]);i=null;var c=function(){var n=(r^r>>>7)>>>0;return r=t,t=o,o=s,s=u,(t+t+1)*(u=u^u<<6^(n^n<<13)>>>0)>>>0},l=function(){return 2.3283064365386963e-10*c()};return l.uint32=c,l.fract53=function(){return l()+11102230246251565e-32*(2097151&c())},l.version="Xorshift03 0.9",l.args=e,l}(Array.prototype.slice.call(arguments))},g}();return y={Alea:n,KISS07:e,Kybos:v,LFib:b,LFIB4:O,MRG32k3a:S,Xorshift03:E}}function S(){if(b)return v;b=1;const n=O(),e=new Set(Object.keys(n));function r(){return"undefined"!=typeof window&&void 0!==window.document}const t=(()=>{let n=null;return function(){if(n)return n;if(r())n=window.crypto;else try{n=require("crypto")}catch(n){throw new Error("Crypto API is not available in this environment")}return n}})(),o=(()=>{let n=null;return function(){if(n)return n;if(r())n={};else try{n=require("os")}catch(n){throw new Error("OS API is not available in this environment")}return n}})();function s(o,s){const u=e.has(o);if(o&&"default"!==o&&!u&&console.warn(`PRNG ${o} is not supported`),o&&"default"!==o&&e.has(o)){return(s?new n[o](s):new n[o]).uint32()}const i=t();return r()?i.getRandomValues(new Uint32Array(1))[0]:parseInt(i.randomBytes(4).toString("hex"),16)}function u(n,e,r){const t=s(e,r),o=n[1]-n[0]+1;return t>=Math.floor(4294967295/o)*o?u(n):n[0]+t%o}function i(n,e){return Array(n).fill().map(e)}function a(n,e,r){return t=i(e-n,((e,r)=>n+r)),r?t.push(e)&&t:t;var t}return v={isBrowser:r,getRandomUint32:s,random:u,randomItem:function(n,e,r){return n[u([0,n.length-1],e,r)]},without:function(n,e){return n.filter((n=>!1===e.includes(n)))},includes:function(n,e){return n.some((n=>e.includes(n)))},includesAll:function(n,e){return!1===e.some((e=>!1===n.includes(e)))},excludes:function(n,e){return!1===n.some((n=>e.includes(n)))},lastIndex:function(n){return n.length-1},compact:function(n){return n.filter(Boolean)},keys:function(n){return Object.keys(n)},isInteger:function(n){return Number.isInteger(n)},isNumber:function(n){return"number"==typeof n&&!1===isNaN(n)},isString:function(n){return"string"==typeof n},isBoolean:function(n){return!0===n||!1===n},isArray:function(n){return n instanceof Array},isPlainObject:function(n){try{return!0===/^\{.*\}$/.test(JSON.stringify(n))&&n instanceof Map==!1}catch(n){return!1}},assign:function(){return Object.assign.apply(Object,arguments)},timesMap:i,numSequence:a,shuffle:function(n,e,r){return n.length<=1||i(n.length,((t,o)=>{const s=u([0,n.length-1],e,r);[n[o],n[s]]=[n[s],n[o]]})),n},getCharsByDiapason:function(n){return String.fromCodePoint.apply(String,a(n[0],n[1],!0))},isCharCode:function(n){return String.fromCharCode(n)!==String.fromCharCode(!1)},escapeRegExp:function(n){return n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")},getOS:o},v}var E,A,D,R,I,_,P={name:"passfather",version:"4.0.1",description:"Passfather is very fast and powerful utility with zero dependencies to generate strong password",author:"Evgeny Vyushin <e@vyushin.ru> (https://github.com/vyushin)",contributors:["Evgeny Vyushin <e@vyushin.ru> (https://github.com/vyushin)"],maintainers:["Evgeny Vyushin <e@vyushin.ru> (https://github.com/vyushin)"],repository:{type:"git",url:"https://github.com/vyushin/passfather"},scripts:{"install-all":"cd ./build && npm install && cd ../test && npm install",build:"cd ./build && npm run build",pretest:"npm run build",test:"cd ./test && npm test",prepublish:"npm test && npm pack --dry-run"},bugs:{url:"https://github.com/vyushin/passfather/issues"},homepage:"https://github.com/vyushin/passfather",main:"./dist/umd/passfather.min.js",types:"./dist/passfather.d.ts",module:"./dist/esm/passfather.min.js",exports:{".":{import:"./dist/esm/passfather.min.js",require:"./dist/umd/passfather.min.js",types:"./dist/passfather.d.ts"}},license:"MIT",keywords:["password","generator","passgen"],directories:{doc:"./README.md"},files:["dist","README.md","LICENSE"],devDependencies:{},funding:[{type:"buy_me_a_coffee",url:"https://buymeacoffee.com/vyushin"},{type:"Patreon",url:"https://www.patreon.com/vyushin"}]};function $(){if(A)return E;A=1;const{keys:n,isInteger:e,includesAll:r,isBoolean:t,isArray:o,isPlainObject:s,assign:u,without:i,isCharCode:a,isString:c,isNumber:l}=S(),f=O(),{name:p}=P,h=p,g={numbers:!0,uppercase:!0,lowercase:!0,symbols:!0,length:12,ranges:null,prng:"default",seed:null},m={numbers:n=>t(n),uppercase:n=>t(n),lowercase:n=>t(n),symbols:n=>t(n),length:n=>e(n)&&n>0,ranges:n=>o(n)&&n.length>0&&n.every((n=>{return o(e=n)&&e.length>0&&e.every((n=>o(n)&&a(n[0])&&a(n[1])));var e})),prng:e=>["default"].concat(n(f)).includes(e),seed:n=>o(n)&&n.length>0&&!1===n.some((n=>!c(n)&&!l(n))),completely(e){return[()=>!1===(void 0===e||s(e)&&0===n(e).length),()=>s(e),()=>r(n(g),n(e)),()=>!1===e.hasOwnProperty("ranges")||this.ranges(e.ranges),()=>!1===e.hasOwnProperty("numbers")||this.numbers(e.numbers),()=>!1===e.hasOwnProperty("uppercase")||this.uppercase(e.uppercase),()=>!1===e.hasOwnProperty("lowercase")||this.lowercase(e.lowercase),()=>!1===e.hasOwnProperty("symbols")||this.symbols(e.symbols),()=>!1===e.hasOwnProperty("length")||this.length(e.length),()=>!1===e.hasOwnProperty("prng")||this.prng(e.prng),()=>!1===e.hasOwnProperty("seed")||this.seed(e.seed),()=>{const r=u({},g,e);return i(n(r),["length"]).some((n=>"ranges"===n?o(r[n]):!0===r[n]))},()=>{const n=u({},g,e);return!1===(e.hasOwnProperty("seed")&&"default"===n.prng)}].findIndex((n=>!1===n()))}},y=[];return y[0]="No errors",y[1]=`[${h}]: Option must be an object`,y[2]=`[${h}]: Options must contains only one (or several) of [${n(g).join(", ")}]`,y[3]=`[${h}]: Option "ranges" must be array with array of UTF-8 char code range. For example: [ [[48, 57 ]], [[33, 46], [58, 64], [94, 96], [123, 126]] ] `,y[4]=`[${h}]: Option "numbers" must be boolean`,y[5]=`[${h}]: Option "uppercase" must be boolean`,y[6]=`[${h}]: Option "lowercase" must be boolean`,y[7]=`[${h}]: Option "symbols" must be boolean`,y[8]=`[${h}]: Option "length" must be integer greater than 0`,y[9]=`[${h}]: Option "prng" must be one of [${["default"].concat(n(f)).join(", ")}]`,y[10]=`[${h}]: Option "seed" must be array of strings or numbers`,y[11]=`[${h}]: At less one of options [${i(n(g),["length","prng","seed"]).join(", ")}] mustn't be false`,y[12]=`[${h}]: Option "seed" cannot be used when "prng" option is default. Set "prng" option to one of [${n(f).join(", ")}]`,E={OPTION_VALIDATORS:m,ERROR_MESSAGES:y,MODULE_NAME:h,DEFAULT_OPTIONS:g}}var C=function(){if(_)return I;_=1;const{compact:n,assign:e,timesMap:r,isBrowser:t,...o}=S(),{OPTION_VALIDATORS:s,ERROR_MESSAGES:u,DEFAULT_OPTIONS:i}=$(),{DEFAULT_BROWSER_SEED:a,DEFAULT_NODE_SEED:c}=function(){if(R)return D;R=1;const{compact:n,isBrowser:e,getOS:r}=S(),t=r(),o=e()?null:n([].concat(Date.now(),process.memoryUsage?[process.memoryUsage().heapTotal,process.memoryUsage().heapUsed]:null,process.env?[process.arch,process.platform,t.cpus().length,t.totalmem()]:null)),s=e()?n([].concat(Date.now(),performance&&performance.memory?[performance.memory.totalJSHeapSize,performance.memory.usedJSHeapSize]:null,navigator?[navigator.userAgent,navigator.appVersion,navigator.hardwareConcurrency,navigator.deviceMemory]:null)):null;return D={DEFAULT_NODE_SEED:o,DEFAULT_BROWSER_SEED:s}}(),l=o.random,f=o.randomItem,p=o.shuffle,h=[[[48,57]],[[65,90]],[[97,122]],[[33,46],[58,64],[94,96],[123,126]]];function g({seed:n}){const e=Boolean(n);return t()?e?n:a:e?n:c}function m(t){const o=s.completely(t);if(o>0)throw u[o];const a=e({},i,t,m.prototype._dev.options),c=n=>{const e=p(g(a));return p(n,a.prng,e)},y=n=>{const e=p(g(a));return l(n,a.prng,p(e))},d=n=>{const e=p(g(a));return f(n,a.prng,p(e))},v=function(e){return n([].concat(e.numbers&&[h[0]],e.uppercase&&[h[1]],e.lowercase&&[h[2]],e.symbols&&[h[3]],e.ranges&&e.ranges))}(a),b=r(v.length,((n,e)=>String.fromCharCode(y(d(v[e])))));return b.length>=a.length?c(b).slice(0,a.length).join(""):c(r(a.length-b.length,(()=>String.fromCharCode(y(d(d(v)))))).concat(b)).join("")}return m.prototype._dev={options:{}},I={passfather:m,DEFAULT_OPTIONS:i,CHAR_RANGES:h,ERROR_MESSAGES:u}}(),N=C.passfather;export{N as default};
37
+ var r=123456789,t=362436069,o=521288629,s=88675123,u=886756453;0==e.length&&(e=[+new Date]);for(var i=n(),a=0;a<e.length;a++)r^=4294967296*i(e[a]),t^=4294967296*i(e[a]),o^=4294967296*i(e[a]),u^=4294967296*i(e[a]),s^=4294967296*i(e[a]);i=null;var c=function(){var n=(r^r>>>7)>>>0;return r=t,t=o,o=s,s=u,(t+t+1)*(u=u^u<<6^(n^n<<13)>>>0)>>>0},l=function(){return 2.3283064365386963e-10*c()};return l.uint32=c,l.fract53=function(){return l()+11102230246251565e-32*(2097151&c())},l.version="Xorshift03 0.9",l.args=e,l}(Array.prototype.slice.call(arguments))},g}();return y={Alea:n,KISS07:e,Kybos:v,LFib:b,LFIB4:O,MRG32k3a:S,Xorshift03:E}}function S(){if(b)return v;b=1;const n=O(),e=new Set(Object.keys(n));function r(){return"undefined"!=typeof window&&void 0!==window.document}const t=(()=>{let n=null;return function(){if(n)return n;if(r())n=window.crypto;else try{n=require("crypto")}catch(n){throw new Error("Crypto API is not available in this environment")}return n}})(),o=(()=>{let n=null;return function(){if(n)return n;if(r())n={};else try{n=require("os")}catch(n){throw new Error("OS API is not available in this environment")}return n}})();function s(o,s){const u=e.has(o);if(o&&"default"!==o&&!u&&console.warn(`PRNG ${o} is not supported`),o&&"default"!==o&&e.has(o)){return(s?new n[o](s):new n[o]).uint32()}const i=t();return r()?i.getRandomValues(new Uint32Array(1))[0]:parseInt(i.randomBytes(4).toString("hex"),16)}function u(n,e,r){const t=s(e,r),o=n[1]-n[0]+1;return t>=Math.floor(4294967295/o)*o?u(n):n[0]+t%o}function i(n,e){return Array(n).fill().map(e)}function a(n,e,r){return t=i(e-n,((e,r)=>n+r)),r?t.push(e)&&t:t;var t}return v={isBrowser:r,getRandomUint32:s,random:u,randomItem:function(n,e,r){return n[u([0,n.length-1],e,r)]},without:function(n,e){return n.filter((n=>!1===e.includes(n)))},includes:function(n,e){return n.some((n=>e.includes(n)))},includesAll:function(n,e){return!1===e.some((e=>!1===n.includes(e)))},excludes:function(n,e){return!1===n.some((n=>e.includes(n)))},lastIndex:function(n){return n.length-1},compact:function(n){return n.filter(Boolean)},keys:function(n){return Object.keys(n)},isInteger:function(n){return Number.isInteger(n)},isNumber:function(n){return"number"==typeof n&&!1===isNaN(n)},isString:function(n){return"string"==typeof n},isBoolean:function(n){return!0===n||!1===n},isArray:function(n){return n instanceof Array},isPlainObject:function(n){try{return!0===/^\{.*\}$/.test(JSON.stringify(n))&&n instanceof Map==!1}catch(n){return!1}},assign:function(){return Object.assign.apply(Object,arguments)},timesMap:i,numSequence:a,shuffle:function(n,e,r){return n.length<=1||i(n.length,((t,o)=>{const s=u([0,n.length-1],e,r);[n[o],n[s]]=[n[s],n[o]]})),n},getCharsByDiapason:function(n){return String.fromCodePoint.apply(String,a(n[0],n[1],!0))},isCharCode:function(n){return String.fromCharCode(n)!==String.fromCharCode(!1)},escapeRegExp:function(n){return n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")},getOS:o},v}var E,A,D,R,I,_,P={name:"passfather",version:"4.0.3",description:"Passfather is very fast and powerful utility with zero dependencies to generate strong password",author:"Evgeny Vyushin <e@vyushin.ru> (https://github.com/vyushin)",contributors:["Evgeny Vyushin <e@vyushin.ru> (https://github.com/vyushin)"],maintainers:["Evgeny Vyushin <e@vyushin.ru> (https://github.com/vyushin)"],repository:{type:"git",url:"https://github.com/vyushin/passfather"},scripts:{"install-all":"cd ./build && npm install && cd ../test && npm install",build:"cd ./build && npm run build",pretest:"npm run build",test:"cd ./test && npm test",prepublish:"npm test && npm pack --dry-run"},bugs:{url:"https://github.com/vyushin/passfather/issues"},homepage:"https://github.com/vyushin/passfather",main:"./dist/umd/passfather.min.js",types:"./dist/passfather.d.ts",module:"./dist/esm/passfather.min.js",exports:{".":{import:"./dist/esm/passfather.min.js",require:"./dist/umd/passfather.min.js",types:"./dist/passfather.d.ts"}},license:"MIT",keywords:["password","generator","passgen"],directories:{doc:"./README.md"},files:["dist","README.md","LICENSE"],devDependencies:{},funding:[{type:"buy_me_a_coffee",url:"https://buymeacoffee.com/vyushin"},{type:"Patreon",url:"https://www.patreon.com/vyushin"}]};function $(){if(A)return E;A=1;const{keys:n,isInteger:e,includesAll:r,isBoolean:t,isArray:o,isPlainObject:s,assign:u,without:i,isCharCode:a,isString:c,isNumber:l}=S(),f=O(),{name:p}=P,h=p,g={numbers:!0,uppercase:!0,lowercase:!0,symbols:!0,length:12,ranges:null,prng:"default",seed:null},m={numbers:n=>t(n),uppercase:n=>t(n),lowercase:n=>t(n),symbols:n=>t(n),length:n=>e(n)&&n>0,ranges:n=>o(n)&&n.length>0&&n.every((n=>{return o(e=n)&&e.length>0&&e.every((n=>o(n)&&a(n[0])&&a(n[1])));var e})),prng:e=>["default"].concat(n(f)).includes(e),seed:n=>o(n)&&n.length>0&&!1===n.some((n=>!c(n)&&!l(n))),completely(e){return[()=>!1===(void 0===e||s(e)&&0===n(e).length),()=>s(e),()=>r(n(g),n(e)),()=>!1===e.hasOwnProperty("ranges")||this.ranges(e.ranges),()=>!1===e.hasOwnProperty("numbers")||this.numbers(e.numbers),()=>!1===e.hasOwnProperty("uppercase")||this.uppercase(e.uppercase),()=>!1===e.hasOwnProperty("lowercase")||this.lowercase(e.lowercase),()=>!1===e.hasOwnProperty("symbols")||this.symbols(e.symbols),()=>!1===e.hasOwnProperty("length")||this.length(e.length),()=>!1===e.hasOwnProperty("prng")||this.prng(e.prng),()=>!1===e.hasOwnProperty("seed")||this.seed(e.seed),()=>{const r=u({},g,e);return i(n(r),["length"]).some((n=>"ranges"===n?o(r[n]):!0===r[n]))},()=>{const n=u({},g,e);return!1===(e.hasOwnProperty("seed")&&"default"===n.prng)}].findIndex((n=>!1===n()))}},y=[];return y[0]="No errors",y[1]=`[${h}]: Option must be an object`,y[2]=`[${h}]: Options must contains only one (or several) of [${n(g).join(", ")}]`,y[3]=`[${h}]: Option "ranges" must be array with array of UTF-8 char code range. For example: [ [[48, 57 ]], [[33, 46], [58, 64], [94, 96], [123, 126]] ] `,y[4]=`[${h}]: Option "numbers" must be boolean`,y[5]=`[${h}]: Option "uppercase" must be boolean`,y[6]=`[${h}]: Option "lowercase" must be boolean`,y[7]=`[${h}]: Option "symbols" must be boolean`,y[8]=`[${h}]: Option "length" must be integer greater than 0`,y[9]=`[${h}]: Option "prng" must be one of [${["default"].concat(n(f)).join(", ")}]`,y[10]=`[${h}]: Option "seed" must be array of strings or numbers`,y[11]=`[${h}]: At less one of options [${i(n(g),["length","prng","seed"]).join(", ")}] mustn't be false`,y[12]=`[${h}]: Option "seed" cannot be used when "prng" option is default. Set "prng" option to one of [${n(f).join(", ")}]`,E={OPTION_VALIDATORS:m,ERROR_MESSAGES:y,MODULE_NAME:h,DEFAULT_OPTIONS:g}}var C=function(){if(_)return I;_=1;const{compact:n,assign:e,timesMap:r,isBrowser:t,...o}=S(),{OPTION_VALIDATORS:s,ERROR_MESSAGES:u,DEFAULT_OPTIONS:i}=$(),{DEFAULT_BROWSER_SEED:a,DEFAULT_NODE_SEED:c}=function(){if(R)return D;R=1;const{compact:n,isBrowser:e,getOS:r}=S(),t=r(),o=e()?null:n([].concat(Date.now(),process.memoryUsage?[process.memoryUsage().heapTotal,process.memoryUsage().heapUsed]:null,process.env?[process.arch,process.platform,t.cpus().length,t.totalmem()]:null)),s=e()?n([].concat(Date.now(),performance&&performance.memory?[performance.memory.totalJSHeapSize,performance.memory.usedJSHeapSize]:null,navigator?[navigator.userAgent,navigator.appVersion,navigator.hardwareConcurrency,navigator.deviceMemory]:null)):null;return D={DEFAULT_NODE_SEED:o,DEFAULT_BROWSER_SEED:s}}(),l=o.random,f=o.randomItem,p=o.shuffle,h=[[[48,57]],[[65,90]],[[97,122]],[[33,46],[58,64],[94,96],[123,126]]];function g({seed:n}){const e=Boolean(n);return t()?e?n:a:e?n:c}function m(t){const o=s.completely(t);if(o>0)throw u[o];const a=e({},i,t,m.prototype._dev.options),c=n=>{const e=p(g(a));return p(n,a.prng,e)},y=n=>{const e=p(g(a));return l(n,a.prng,p(e))},d=n=>{const e=p(g(a));return f(n,a.prng,p(e))},v=function(e){return n([].concat(e.numbers&&[h[0]],e.uppercase&&[h[1]],e.lowercase&&[h[2]],e.symbols&&[h[3]],e.ranges&&e.ranges))}(a),b=r(v.length,((n,e)=>String.fromCharCode(y(d(v[e])))));return b.length>=a.length?c(b).slice(0,a.length).join(""):c(r(a.length-b.length,(()=>String.fromCharCode(y(d(d(v)))))).concat(b)).join("")}return m.prototype._dev={options:{}},I={passfather:m,DEFAULT_OPTIONS:i,CHAR_RANGES:h,ERROR_MESSAGES:u}}(),N=C.passfather;export{N as default};
@@ -1,5 +1,5 @@
1
1
  /*
2
- @version 4.0.1
2
+ @version 4.0.3
3
3
  @description Passfather is very fast and powerful utility with zero dependencies to generate strong password
4
4
  @copyright Copyright (c) 2019-present, Evgeny Vyushin <e@vyushin.ru> (https://github.com/vyushin)
5
5
  @license
@@ -34,4 +34,4 @@ var r=4294967087,t=4294944443,o=12345,s=12345,u=123,i=12345,a=12345,c=123;0===e.
34
34
  /*! From http://baagoe.com/en/RandomMusings/javascript/ */(),E=function(){if(d)return m;d=1;const n=O();return m=function(){return function(e){
35
35
  /*! George Marsaglia, 13 May 2003 */
36
36
  /*! http://groups.google.com/group/comp.lang.c/msg/e3c4ea1169e463ae */
37
- var r=123456789,t=362436069,o=521288629,s=88675123,u=886756453;0==e.length&&(e=[+new Date]);for(var i=n(),a=0;a<e.length;a++)r^=4294967296*i(e[a]),t^=4294967296*i(e[a]),o^=4294967296*i(e[a]),u^=4294967296*i(e[a]),s^=4294967296*i(e[a]);i=null;var c=function(){var n=(r^r>>>7)>>>0;return r=t,t=o,o=s,s=u,(t+t+1)*(u=u^u<<6^(n^n<<13)>>>0)>>>0},l=function(){return 2.3283064365386963e-10*c()};return l.uint32=c,l.fract53=function(){return l()+11102230246251565e-32*(2097151&c())},l.version="Xorshift03 0.9",l.args=e,l}(Array.prototype.slice.call(arguments))},m}();return y={Alea:n,KISS07:e,Kybos:r,LFib:b,LFIB4:w,MRG32k3a:S,Xorshift03:E}}function E(){if(w)return b;w=1;const n=S(),e=new Set(Object.keys(n));function r(){return"undefined"!=typeof window&&void 0!==window.document}const t=(()=>{let n=null;return function(){if(n)return n;if(r())n=window.crypto;else try{n=require("crypto")}catch(n){throw new Error("Crypto API is not available in this environment")}return n}})(),o=(()=>{let n=null;return function(){if(n)return n;if(r())n={};else try{n=require("os")}catch(n){throw new Error("OS API is not available in this environment")}return n}})();function s(o,s){const u=e.has(o);if(o&&"default"!==o&&!u&&console.warn(`PRNG ${o} is not supported`),o&&"default"!==o&&e.has(o)){return(s?new n[o](s):new n[o]).uint32()}const i=t();return r()?i.getRandomValues(new Uint32Array(1))[0]:parseInt(i.randomBytes(4).toString("hex"),16)}function u(n,e,r){const t=s(e,r),o=n[1]-n[0]+1;return t>=Math.floor(4294967295/o)*o?u(n):n[0]+t%o}function i(n,e){return Array(n).fill().map(e)}function a(n,e,r){return t=i(e-n,((e,r)=>n+r)),r?t.push(e)&&t:t;var t}return b={isBrowser:r,getRandomUint32:s,random:u,randomItem:function(n,e,r){return n[u([0,n.length-1],e,r)]},without:function(n,e){return n.filter((n=>!1===e.includes(n)))},includes:function(n,e){return n.some((n=>e.includes(n)))},includesAll:function(n,e){return!1===e.some((e=>!1===n.includes(e)))},excludes:function(n,e){return!1===n.some((n=>e.includes(n)))},lastIndex:function(n){return n.length-1},compact:function(n){return n.filter(Boolean)},keys:function(n){return Object.keys(n)},isInteger:function(n){return Number.isInteger(n)},isNumber:function(n){return"number"==typeof n&&!1===isNaN(n)},isString:function(n){return"string"==typeof n},isBoolean:function(n){return!0===n||!1===n},isArray:function(n){return n instanceof Array},isPlainObject:function(n){try{return!0===/^\{.*\}$/.test(JSON.stringify(n))&&n instanceof Map==!1}catch(n){return!1}},assign:function(){return Object.assign.apply(Object,arguments)},timesMap:i,numSequence:a,shuffle:function(n,e,r){return n.length<=1||i(n.length,((t,o)=>{const s=u([0,n.length-1],e,r);[n[o],n[s]]=[n[s],n[o]]})),n},getCharsByDiapason:function(n){return String.fromCodePoint.apply(String,a(n[0],n[1],!0))},isCharCode:function(n){return String.fromCharCode(n)!==String.fromCharCode(!1)},escapeRegExp:function(n){return n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")},getOS:o},b}var A,D,R,_,I,P,$,j,C={name:"passfather",version:"4.0.1",description:"Passfather is very fast and powerful utility with zero dependencies to generate strong password",author:"Evgeny Vyushin <e@vyushin.ru> (https://github.com/vyushin)",contributors:["Evgeny Vyushin <e@vyushin.ru> (https://github.com/vyushin)"],maintainers:["Evgeny Vyushin <e@vyushin.ru> (https://github.com/vyushin)"],repository:{type:"git",url:"https://github.com/vyushin/passfather"},scripts:{"install-all":"cd ./build && npm install && cd ../test && npm install",build:"cd ./build && npm run build",pretest:"npm run build",test:"cd ./test && npm test",prepublish:"npm test && npm pack --dry-run"},bugs:{url:"https://github.com/vyushin/passfather/issues"},homepage:"https://github.com/vyushin/passfather",main:"./dist/umd/passfather.min.js",types:"./dist/passfather.d.ts",module:"./dist/esm/passfather.min.js",exports:{".":{import:"./dist/esm/passfather.min.js",require:"./dist/umd/passfather.min.js",types:"./dist/passfather.d.ts"}},license:"MIT",keywords:["password","generator","passgen"],directories:{doc:"./README.md"},files:["dist","README.md","LICENSE"],devDependencies:{},funding:[{type:"buy_me_a_coffee",url:"https://buymeacoffee.com/vyushin"},{type:"Patreon",url:"https://www.patreon.com/vyushin"}]};function N(){if(D)return A;D=1;const{keys:n,isInteger:e,includesAll:r,isBoolean:t,isArray:o,isPlainObject:s,assign:u,without:i,isCharCode:a,isString:c,isNumber:l}=E(),f=S(),{name:p}=C,h=p,g={numbers:!0,uppercase:!0,lowercase:!0,symbols:!0,length:12,ranges:null,prng:"default",seed:null},m={numbers:n=>t(n),uppercase:n=>t(n),lowercase:n=>t(n),symbols:n=>t(n),length:n=>e(n)&&n>0,ranges:n=>o(n)&&n.length>0&&n.every((n=>{return o(e=n)&&e.length>0&&e.every((n=>o(n)&&a(n[0])&&a(n[1])));var e})),prng:e=>["default"].concat(n(f)).includes(e),seed:n=>o(n)&&n.length>0&&!1===n.some((n=>!c(n)&&!l(n))),completely(e){return[()=>!1===(void 0===e||s(e)&&0===n(e).length),()=>s(e),()=>r(n(g),n(e)),()=>!1===e.hasOwnProperty("ranges")||this.ranges(e.ranges),()=>!1===e.hasOwnProperty("numbers")||this.numbers(e.numbers),()=>!1===e.hasOwnProperty("uppercase")||this.uppercase(e.uppercase),()=>!1===e.hasOwnProperty("lowercase")||this.lowercase(e.lowercase),()=>!1===e.hasOwnProperty("symbols")||this.symbols(e.symbols),()=>!1===e.hasOwnProperty("length")||this.length(e.length),()=>!1===e.hasOwnProperty("prng")||this.prng(e.prng),()=>!1===e.hasOwnProperty("seed")||this.seed(e.seed),()=>{const r=u({},g,e);return i(n(r),["length"]).some((n=>"ranges"===n?o(r[n]):!0===r[n]))},()=>{const n=u({},g,e);return!1===(e.hasOwnProperty("seed")&&"default"===n.prng)}].findIndex((n=>!1===n()))}},d=[];return d[0]="No errors",d[1]=`[${h}]: Option must be an object`,d[2]=`[${h}]: Options must contains only one (or several) of [${n(g).join(", ")}]`,d[3]=`[${h}]: Option "ranges" must be array with array of UTF-8 char code range. For example: [ [[48, 57 ]], [[33, 46], [58, 64], [94, 96], [123, 126]] ] `,d[4]=`[${h}]: Option "numbers" must be boolean`,d[5]=`[${h}]: Option "uppercase" must be boolean`,d[6]=`[${h}]: Option "lowercase" must be boolean`,d[7]=`[${h}]: Option "symbols" must be boolean`,d[8]=`[${h}]: Option "length" must be integer greater than 0`,d[9]=`[${h}]: Option "prng" must be one of [${["default"].concat(n(f)).join(", ")}]`,d[10]=`[${h}]: Option "seed" must be array of strings or numbers`,d[11]=`[${h}]: At less one of options [${i(n(g),["length","prng","seed"]).join(", ")}] mustn't be false`,d[12]=`[${h}]: Option "seed" cannot be used when "prng" option is default. Set "prng" option to one of [${n(f).join(", ")}]`,A={OPTION_VALIDATORS:m,ERROR_MESSAGES:d,MODULE_NAME:h,DEFAULT_OPTIONS:g}}function T(){if(P)return I;P=1;const{compact:n,assign:e,timesMap:r,isBrowser:t,...o}=E(),{OPTION_VALIDATORS:s,ERROR_MESSAGES:u,DEFAULT_OPTIONS:i}=N(),{DEFAULT_BROWSER_SEED:a,DEFAULT_NODE_SEED:c}=function(){if(_)return R;_=1;const{compact:n,isBrowser:e,getOS:r}=E(),t=r(),o=e()?null:n([].concat(Date.now(),process.memoryUsage?[process.memoryUsage().heapTotal,process.memoryUsage().heapUsed]:null,process.env?[process.arch,process.platform,t.cpus().length,t.totalmem()]:null)),s=e()?n([].concat(Date.now(),performance&&performance.memory?[performance.memory.totalJSHeapSize,performance.memory.usedJSHeapSize]:null,navigator?[navigator.userAgent,navigator.appVersion,navigator.hardwareConcurrency,navigator.deviceMemory]:null)):null;return R={DEFAULT_NODE_SEED:o,DEFAULT_BROWSER_SEED:s}}(),l=o.random,f=o.randomItem,p=o.shuffle,h=[[[48,57]],[[65,90]],[[97,122]],[[33,46],[58,64],[94,96],[123,126]]];function g({seed:n}){const e=Boolean(n);return t()?e?n:a:e?n:c}function m(t){const o=s.completely(t);if(o>0)throw u[o];const a=e({},i,t,m.prototype._dev.options),c=n=>{const e=p(g(a));return p(n,a.prng,e)},d=n=>{const e=p(g(a));return l(n,a.prng,p(e))},y=n=>{const e=p(g(a));return f(n,a.prng,p(e))},v=function(e){return n([].concat(e.numbers&&[h[0]],e.uppercase&&[h[1]],e.lowercase&&[h[2]],e.symbols&&[h[3]],e.ranges&&e.ranges))}(a),b=r(v.length,((n,e)=>String.fromCharCode(d(y(v[e])))));return b.length>=a.length?c(b).slice(0,a.length).join(""):c(r(a.length-b.length,(()=>String.fromCharCode(d(y(y(v)))))).concat(b)).join("")}return m.prototype._dev={options:{}},I={passfather:m,DEFAULT_OPTIONS:i,CHAR_RANGES:h,ERROR_MESSAGES:u}}return n(function(){if(j)return $;j=1;const{passfather:n}=T();return $=n}())}));
37
+ var r=123456789,t=362436069,o=521288629,s=88675123,u=886756453;0==e.length&&(e=[+new Date]);for(var i=n(),a=0;a<e.length;a++)r^=4294967296*i(e[a]),t^=4294967296*i(e[a]),o^=4294967296*i(e[a]),u^=4294967296*i(e[a]),s^=4294967296*i(e[a]);i=null;var c=function(){var n=(r^r>>>7)>>>0;return r=t,t=o,o=s,s=u,(t+t+1)*(u=u^u<<6^(n^n<<13)>>>0)>>>0},l=function(){return 2.3283064365386963e-10*c()};return l.uint32=c,l.fract53=function(){return l()+11102230246251565e-32*(2097151&c())},l.version="Xorshift03 0.9",l.args=e,l}(Array.prototype.slice.call(arguments))},m}();return y={Alea:n,KISS07:e,Kybos:r,LFib:b,LFIB4:w,MRG32k3a:S,Xorshift03:E}}function E(){if(w)return b;w=1;const n=S(),e=new Set(Object.keys(n));function r(){return"undefined"!=typeof window&&void 0!==window.document}const t=(()=>{let n=null;return function(){if(n)return n;if(r())n=window.crypto;else try{n=require("crypto")}catch(n){throw new Error("Crypto API is not available in this environment")}return n}})(),o=(()=>{let n=null;return function(){if(n)return n;if(r())n={};else try{n=require("os")}catch(n){throw new Error("OS API is not available in this environment")}return n}})();function s(o,s){const u=e.has(o);if(o&&"default"!==o&&!u&&console.warn(`PRNG ${o} is not supported`),o&&"default"!==o&&e.has(o)){return(s?new n[o](s):new n[o]).uint32()}const i=t();return r()?i.getRandomValues(new Uint32Array(1))[0]:parseInt(i.randomBytes(4).toString("hex"),16)}function u(n,e,r){const t=s(e,r),o=n[1]-n[0]+1;return t>=Math.floor(4294967295/o)*o?u(n):n[0]+t%o}function i(n,e){return Array(n).fill().map(e)}function a(n,e,r){return t=i(e-n,((e,r)=>n+r)),r?t.push(e)&&t:t;var t}return b={isBrowser:r,getRandomUint32:s,random:u,randomItem:function(n,e,r){return n[u([0,n.length-1],e,r)]},without:function(n,e){return n.filter((n=>!1===e.includes(n)))},includes:function(n,e){return n.some((n=>e.includes(n)))},includesAll:function(n,e){return!1===e.some((e=>!1===n.includes(e)))},excludes:function(n,e){return!1===n.some((n=>e.includes(n)))},lastIndex:function(n){return n.length-1},compact:function(n){return n.filter(Boolean)},keys:function(n){return Object.keys(n)},isInteger:function(n){return Number.isInteger(n)},isNumber:function(n){return"number"==typeof n&&!1===isNaN(n)},isString:function(n){return"string"==typeof n},isBoolean:function(n){return!0===n||!1===n},isArray:function(n){return n instanceof Array},isPlainObject:function(n){try{return!0===/^\{.*\}$/.test(JSON.stringify(n))&&n instanceof Map==!1}catch(n){return!1}},assign:function(){return Object.assign.apply(Object,arguments)},timesMap:i,numSequence:a,shuffle:function(n,e,r){return n.length<=1||i(n.length,((t,o)=>{const s=u([0,n.length-1],e,r);[n[o],n[s]]=[n[s],n[o]]})),n},getCharsByDiapason:function(n){return String.fromCodePoint.apply(String,a(n[0],n[1],!0))},isCharCode:function(n){return String.fromCharCode(n)!==String.fromCharCode(!1)},escapeRegExp:function(n){return n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")},getOS:o},b}var A,D,R,_,I,P,$,j,C={name:"passfather",version:"4.0.3",description:"Passfather is very fast and powerful utility with zero dependencies to generate strong password",author:"Evgeny Vyushin <e@vyushin.ru> (https://github.com/vyushin)",contributors:["Evgeny Vyushin <e@vyushin.ru> (https://github.com/vyushin)"],maintainers:["Evgeny Vyushin <e@vyushin.ru> (https://github.com/vyushin)"],repository:{type:"git",url:"https://github.com/vyushin/passfather"},scripts:{"install-all":"cd ./build && npm install && cd ../test && npm install",build:"cd ./build && npm run build",pretest:"npm run build",test:"cd ./test && npm test",prepublish:"npm test && npm pack --dry-run"},bugs:{url:"https://github.com/vyushin/passfather/issues"},homepage:"https://github.com/vyushin/passfather",main:"./dist/umd/passfather.min.js",types:"./dist/passfather.d.ts",module:"./dist/esm/passfather.min.js",exports:{".":{import:"./dist/esm/passfather.min.js",require:"./dist/umd/passfather.min.js",types:"./dist/passfather.d.ts"}},license:"MIT",keywords:["password","generator","passgen"],directories:{doc:"./README.md"},files:["dist","README.md","LICENSE"],devDependencies:{},funding:[{type:"buy_me_a_coffee",url:"https://buymeacoffee.com/vyushin"},{type:"Patreon",url:"https://www.patreon.com/vyushin"}]};function N(){if(D)return A;D=1;const{keys:n,isInteger:e,includesAll:r,isBoolean:t,isArray:o,isPlainObject:s,assign:u,without:i,isCharCode:a,isString:c,isNumber:l}=E(),f=S(),{name:p}=C,h=p,g={numbers:!0,uppercase:!0,lowercase:!0,symbols:!0,length:12,ranges:null,prng:"default",seed:null},m={numbers:n=>t(n),uppercase:n=>t(n),lowercase:n=>t(n),symbols:n=>t(n),length:n=>e(n)&&n>0,ranges:n=>o(n)&&n.length>0&&n.every((n=>{return o(e=n)&&e.length>0&&e.every((n=>o(n)&&a(n[0])&&a(n[1])));var e})),prng:e=>["default"].concat(n(f)).includes(e),seed:n=>o(n)&&n.length>0&&!1===n.some((n=>!c(n)&&!l(n))),completely(e){return[()=>!1===(void 0===e||s(e)&&0===n(e).length),()=>s(e),()=>r(n(g),n(e)),()=>!1===e.hasOwnProperty("ranges")||this.ranges(e.ranges),()=>!1===e.hasOwnProperty("numbers")||this.numbers(e.numbers),()=>!1===e.hasOwnProperty("uppercase")||this.uppercase(e.uppercase),()=>!1===e.hasOwnProperty("lowercase")||this.lowercase(e.lowercase),()=>!1===e.hasOwnProperty("symbols")||this.symbols(e.symbols),()=>!1===e.hasOwnProperty("length")||this.length(e.length),()=>!1===e.hasOwnProperty("prng")||this.prng(e.prng),()=>!1===e.hasOwnProperty("seed")||this.seed(e.seed),()=>{const r=u({},g,e);return i(n(r),["length"]).some((n=>"ranges"===n?o(r[n]):!0===r[n]))},()=>{const n=u({},g,e);return!1===(e.hasOwnProperty("seed")&&"default"===n.prng)}].findIndex((n=>!1===n()))}},d=[];return d[0]="No errors",d[1]=`[${h}]: Option must be an object`,d[2]=`[${h}]: Options must contains only one (or several) of [${n(g).join(", ")}]`,d[3]=`[${h}]: Option "ranges" must be array with array of UTF-8 char code range. For example: [ [[48, 57 ]], [[33, 46], [58, 64], [94, 96], [123, 126]] ] `,d[4]=`[${h}]: Option "numbers" must be boolean`,d[5]=`[${h}]: Option "uppercase" must be boolean`,d[6]=`[${h}]: Option "lowercase" must be boolean`,d[7]=`[${h}]: Option "symbols" must be boolean`,d[8]=`[${h}]: Option "length" must be integer greater than 0`,d[9]=`[${h}]: Option "prng" must be one of [${["default"].concat(n(f)).join(", ")}]`,d[10]=`[${h}]: Option "seed" must be array of strings or numbers`,d[11]=`[${h}]: At less one of options [${i(n(g),["length","prng","seed"]).join(", ")}] mustn't be false`,d[12]=`[${h}]: Option "seed" cannot be used when "prng" option is default. Set "prng" option to one of [${n(f).join(", ")}]`,A={OPTION_VALIDATORS:m,ERROR_MESSAGES:d,MODULE_NAME:h,DEFAULT_OPTIONS:g}}function T(){if(P)return I;P=1;const{compact:n,assign:e,timesMap:r,isBrowser:t,...o}=E(),{OPTION_VALIDATORS:s,ERROR_MESSAGES:u,DEFAULT_OPTIONS:i}=N(),{DEFAULT_BROWSER_SEED:a,DEFAULT_NODE_SEED:c}=function(){if(_)return R;_=1;const{compact:n,isBrowser:e,getOS:r}=E(),t=r(),o=e()?null:n([].concat(Date.now(),process.memoryUsage?[process.memoryUsage().heapTotal,process.memoryUsage().heapUsed]:null,process.env?[process.arch,process.platform,t.cpus().length,t.totalmem()]:null)),s=e()?n([].concat(Date.now(),performance&&performance.memory?[performance.memory.totalJSHeapSize,performance.memory.usedJSHeapSize]:null,navigator?[navigator.userAgent,navigator.appVersion,navigator.hardwareConcurrency,navigator.deviceMemory]:null)):null;return R={DEFAULT_NODE_SEED:o,DEFAULT_BROWSER_SEED:s}}(),l=o.random,f=o.randomItem,p=o.shuffle,h=[[[48,57]],[[65,90]],[[97,122]],[[33,46],[58,64],[94,96],[123,126]]];function g({seed:n}){const e=Boolean(n);return t()?e?n:a:e?n:c}function m(t){const o=s.completely(t);if(o>0)throw u[o];const a=e({},i,t,m.prototype._dev.options),c=n=>{const e=p(g(a));return p(n,a.prng,e)},d=n=>{const e=p(g(a));return l(n,a.prng,p(e))},y=n=>{const e=p(g(a));return f(n,a.prng,p(e))},v=function(e){return n([].concat(e.numbers&&[h[0]],e.uppercase&&[h[1]],e.lowercase&&[h[2]],e.symbols&&[h[3]],e.ranges&&e.ranges))}(a),b=r(v.length,((n,e)=>String.fromCharCode(d(y(v[e])))));return b.length>=a.length?c(b).slice(0,a.length).join(""):c(r(a.length-b.length,(()=>String.fromCharCode(d(y(y(v)))))).concat(b)).join("")}return m.prototype._dev={options:{}},I={passfather:m,DEFAULT_OPTIONS:i,CHAR_RANGES:h,ERROR_MESSAGES:u}}return n(function(){if(j)return $;j=1;const{passfather:n}=T();return $=n}())}));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "passfather",
3
- "version": "4.0.1",
3
+ "version": "4.0.3",
4
4
  "description": "Passfather is very fast and powerful utility with zero dependencies to generate strong password",
5
5
  "author": "Evgeny Vyushin <e@vyushin.ru> (https://github.com/vyushin)",
6
6
  "contributors": [