UNPKG

afid

Version:

Random identifiers with some affordances for human usage.

2 lines 1.49 kB
/* afid@1.3.0 MIT https://alecperkins.net/afid */ window.afid=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0});const c="ACDEFGHJKMNPQRTUVWXY",w="2346789",b={length:8,start:"random",prefix:"",suffix:"",segments:1,separator:"-"};function t(e){var e=void 0!==e?"number"==typeof e?{length:e}:e:{},t=Object.assign(Object.assign({},b),e);if(!t.length||"number"!=typeof t.length||t.length<1)throw new Error("options.length must be a positive, non-zero integer");if(!t.segments||"number"!=typeof t.segments||t.segments<1)throw new Error("options.segments must be a positive, non-zero integer");let n;if("letter"===t.start)n=[c,w];else if("number"===t.start)n=[w,c];else{if(t.start&&"random"!==t.start)throw new Error("Unknown options.start type");n=d()?[w,c]:[c,w]}let r=0,s=0,o=[];var i=[];let a=0,g="",h=!0,l=0,f=0;for(var p=Math.ceil(t.length/t.segments);a<t.length;){var u=n[0],m=(m=u)[Math.floor(Math.random()*m.length)];if((t.segments<2||t.segments<3&&"."!==t.separator)&&u===c&&(f+=1,"E"===m?1<(l+=1)?h=!0:f<2&&1<a&&a<t.length-1&&(h=!1):h=h||!0),m!==g)o.push(m),g=m,a+=1,r+=1,o.length!==p&&a!==t.length||(i.push(o.join("")),o=[]),(u===c&&2===r||u===w&&4===r||!h&&u===w&&d((a+1)/t.length)||d(.25))&&(r=0,n.push(n.shift())),s=0;else{if(10===s)throw new Error("Too many loops picking non-repeating characters.");s+=1}}return""+t.prefix+i.join(t.separator)+t.suffix}function d(e=.5){return Math.random()<e}return e.default=t,e.version="1.3.0",Object.assign(t,e),t}({});