/**
 * Minified by jsDelivr using Terser v5.39.0.
 * Original file: /npm/password-generator@3.0.0/dist/index.js
 *
 * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files
 */
var crypto=globalThis.crypto,MAX_RANDOM_BYTES=65536,getRandomBytes=async e=>{if(!Number.isFinite(e)||e<0)throw new RangeError("length must be a non-negative finite number");const t=new Uint8Array(e);for(let r=0;r<e;r+=MAX_RANDOM_BYTES){const n=Math.min(r+MAX_RANDOM_BYTES,e);crypto.getRandomValues(t.subarray(r,n))}return t},createDeterministicRandomBytes=async(e,t=crypto)=>{if(0===e.length)throw new RangeError("entropy must not be empty");if(!t.subtle)throw new Error("WebCrypto subtle is required for deterministic entropy");const r=new Uint8Array(e).buffer,n=await t.subtle.importKey("raw",r,{name:"HMAC",hash:"SHA-256"},!1,["sign"]);let o=0n;const i=new Uint8Array(8),a=new DataView(i.buffer);return async e=>{if(!Number.isFinite(e)||e<0)throw new RangeError("length must be a non-negative finite number");const r=new Uint8Array(e);let s=0;for(;s<e;){a.setBigUint64(0,o,!1),o+=1n;const h=new Uint8Array(await t.subtle.sign("HMAC",n,i)),l=Math.min(h.length,e-s);r.set(h.subarray(0,l),s),s+=l}return r}},randomInt=async(e,t,r=getRandomBytes)=>{if(!Number.isFinite(e)||!Number.isFinite(t))throw new RangeError("min and max must be finite numbers");if(t<=e)throw new RangeError("max must be greater than min");const n=t-e;if(1===n)return e;const o=Math.ceil(Math.log2(n)/8),i=256**o,a=i-i%n;let s=a;for(;s>=a;){const e=await r(o);s=0;for(const t of e)s=256*s+t}return e+s%n},VOWELS="aeiou",CONSONANTS="bcdfghjklmnpqrstvwxyz",CONSONANT=new RegExp(`[${CONSONANTS}]$`,"i"),DEFAULT_PATTERN=/\w/,DEFAULT_LENGTH=12,MIN_ENTROPY_BITS=64,MIN_WORD_LENGTH=3,MAX_WORD_LENGTH=7,textEncoder=new TextEncoder,MIN_MEMORABLE_LENGTH=(()=>{let e=0,t=0,r=!1;for(;e<MIN_ENTROPY_BITS;)e+=Math.log2(r?VOWELS.length:CONSONANTS.length),r=!r,t+=1;return t})(),buildValidChars=e=>{const t=[];for(let r=33;r<=126;r+=1){const n=String.fromCharCode(r);e.test(n)&&t.push(n)}if(0===t.length)throw new Error(`Could not find characters that match the password pattern ${e}. Patterns must match individual characters, not the password as a whole.`);return t},estimatePatternEntropy=(e,t,r)=>{const n=e>1?Math.log2(e):0;return{entropyBits:n*Math.max(0,t-r),recommendedLength:n>0?r+Math.ceil(MIN_ENTROPY_BITS/n):null}},estimateMemorableEntropy=(e,t)=>{const r=Math.max(0,e-t.length);let n=0,o=CONSONANT.test(t);for(let e=0;e<r;e+=1)n+=Math.log2(o?VOWELS.length:CONSONANTS.length),o=!o;let i=t.length,a=0;for(o=CONSONANT.test(t);a<MIN_ENTROPY_BITS;)a+=Math.log2(o?VOWELS.length:CONSONANTS.length),o=!o,i+=1;return{entropyBits:n,recommendedLength:i}},buildMemorable=async(e,t,r)=>{let n=t,o="";for(let t=0;t<e;t+=1){const e=n?VOWELS:CONSONANTS;o+=e[await r(0,e.length)],n=!n}return o},buildWordLengths=async(e,t,r)=>{const n=[];let o=0;for(let r=0;r<e;r+=1){const e=await t(MIN_WORD_LENGTH,MAX_WORD_LENGTH+1);n.push(e),o+=e}if(void 0!==r&&o<r){const i=[];for(let t=0;t<e;t+=1)n[t]<MAX_WORD_LENGTH&&i.push(t);let a=r-o;for(;a>0&&i.length>0;){const e=await t(0,i.length),r=i[e];n[r]=n[r]+1,a-=1,n[r]>=MAX_WORD_LENGTH&&i.splice(e,1)}}return n},generatePassword=async(e,t,r,n)=>{const o={};return void 0!==e&&(o.length=e),void 0!==t&&(o.memorable=t),void 0!==r&&(o.pattern=r),void 0!==n&&(o.prefix=n),generatePasswordWithOptions(o)},generatePasswordWithOptions=async e=>{const t=e?.length??DEFAULT_LENGTH,r=e?.memorable??!1,n=e?.pattern??DEFAULT_PATTERN,o=String(e?.prefix??""),i=e?.ignoreSecurityRecommendations??!1,a=e?.entropy,s=e?.words;if(!Number.isSafeInteger(t))throw new RangeError("length must be a safe integer");if(t<0)throw new RangeError("length must be a non-negative integer");if(!(n instanceof RegExp))throw new TypeError("pattern must be a RegExp");if(void 0!==s){if(!Number.isSafeInteger(s))throw new RangeError("words must be a safe integer");if(s<=0)throw new RangeError("words must be a positive integer")}if(void 0!==s&&""!==o)throw new Error("prefix is not supported when words are enabled");let h;if(void 0!==a)if("string"==typeof a)h=textEncoder.encode(a);else{if(!(a instanceof Uint8Array))throw new TypeError("entropy must be a Uint8Array or string");h=a}const l=h?await createDeterministicRandomBytes(h):getRandomBytes,c=(e,t)=>randomInt(e,t,l);if(void 0!==s){if(!i&&s*MAX_WORD_LENGTH<MIN_MEMORABLE_LENGTH){const e=Math.ceil(MIN_MEMORABLE_LENGTH/MAX_WORD_LENGTH);throw new Error(`Security recommendation: word count ${s} cannot reach ${MIN_ENTROPY_BITS} bits with ${MIN_WORD_LENGTH}-${MAX_WORD_LENGTH} letter words. Use words >= ${e}. To override, pass { ignoreSecurityRecommendations: true }.`)}const e=i?void 0:MIN_MEMORABLE_LENGTH,t=await buildWordLengths(s,c,e),r=[];for(const e of t)r.push(await buildMemorable(e,!1,c));return r.join(" ")}if(r){if(!i){const e=estimateMemorableEntropy(t,o);if(e.entropyBits<MIN_ENTROPY_BITS)throw new Error(`Security recommendation: estimated entropy ${e.entropyBits.toFixed(1)} bits is below ${MIN_ENTROPY_BITS} bits. Use length >= ${e.recommendedLength} or set memorable: false. To override, pass { ignoreSecurityRecommendations: true }.`)}const e=Math.max(0,t-o.length);return o+await buildMemorable(e,CONSONANT.test(o),c)}const m=buildValidChars(n);if(!i){const e=estimatePatternEntropy(m.length,t,o.length);if(e.entropyBits<MIN_ENTROPY_BITS){const t=null===e.recommendedLength?"Use a broader pattern to increase the character set.":`Use length >= ${e.recommendedLength} or broaden the pattern.`;throw new Error(`Security recommendation: estimated entropy ${e.entropyBits.toFixed(1)} bits is below ${MIN_ENTROPY_BITS} bits. ${t} To override, pass { ignoreSecurityRecommendations: true }.`)}}let d=o;for(;d.length<t;)d+=m[await c(0,m.length)];return d};export{generatePasswordWithOptions,generatePassword};
//# sourceMappingURL=/sm/ec0131938241da05eacec1e91902c26ee2fcc30a05b66ed8afca3902707d3461.map