stringweaver 1.1.9 → 1.2.1

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.
@@ -1,7 +1,7 @@
1
1
  /*© KooiInc 2025-2030*/
2
- var{randomString:W,uuid4:B}=ue();function ue(){let e=j(),r=()=>e?[...crypto.getRandomValues(new Uint32Array(1))].shift()/2**32:Math.random(),n=({min:c=0,max:s=Number.MAX_SAFE_INTEGER}={})=>Math.floor(r()*(s-c+1)+c),t=(c=0,s=10,d)=>(d||[])instanceof Function?[...Array(s)].map((C,O)=>c+O).map(d):[...Array(s)].map((C,O)=>c+O),o=c=>String.fromCharCode(c),l="!?@#$%^&*=+_;-".split(""),p=RegExp(`[${l.map(c=>`\\${c}`).join("")}]`,"g"),h=c=>{let s=c.length;for(;s--;){let d=n({max:s});[c[s],c[d]]=[c[d],c[s]]}return c},y=h(t(65,26,o)),$=h(t(97,26,o)),m={UCLC:h(y.concat($)),UC:y,LC:$,Nrs:h(t()),Sym:h(l)},i=c=>Object.entries(c).reduce((s,[d,C])=>C?[...s,...m[d]]:s,$);function j(){try{return window&&"crypto"in window}catch{return!1}}function u(){return e&&crypto.randomUUID?crypto.randomUUID():[...new Uint8Array(16)].map(c=>n({max:255})).map((c,s)=>`${(s===8?c&63|128:s===6?c&15|64:c).toString(16).padStart(2,"0")}${~[3,5,7,9].indexOf(s)?"-":""}`).join("")}function f(c,s,d){return/[a-z]/i.test(c)&&(s&&d?/\d/.test(c)&&p.test(c):s?/\d/.test(c):d?p.test(c):!0)}function S(c){let s=[...c],d=s.findIndex(C=>/[a-z]/i.test(C));return[s[0],s[d]]=[s[d],s[0]],s.join("")}function V({len:c=12,includeUppercase:s=!0,includeNumbers:d,includeSymbols:C,startAlphabetic:O}={}){c=c<6?6:c;let v=h(i({UC:s,Nrs:d,Sym:C}));for(;v.length<c;)v=[...v,...h(v)];let x=v.slice(0,c).join("");if(!(d||C))return x;for(let R=0;R<v.length;R+=1)if(x=v.slice(R,R+c).join(""),f(x,d,C))return O&&!/^[a-z]/i.test(x)?S(x):x;return V({len:c,includeUppercase:s,includeNumbers:d,includeSymbols:C,startAlphabetic:O})}return{randomString:V,uuid4:u}}var D=le();function le(e=""){return e=e?.constructor===String?e:"",function(a,...m){return $(a,y(m))};function r(a,m){return m&&e.length>0?String(e):`{${a}}`}function n(a){return a?.constructor===String||a?.constructor===Number&&!Number.isNaN(a)}function t(a,m){let i=a in m;return i&&n(m[a])?String(m[a]):r(a,i)}function o(a){return(...m)=>{let i=m.find(j=>j.key);return t(i?i.key:"_",a)}}function l(a,m){return a.replace(/\{(?<key>[a-z_\d]+)}/gim,o(m))}function p(a){let m=[];return Object.entries(a).forEach(([i,j])=>{j.forEach((u,f)=>(m[f]??={},m[f][i]=u))}),m}function h(a){return a.length===1&&Object.values(a[0]).every(Array.isArray)}function y(a){return h(a)?p(a[0]):a}function $(a,m){return m?.length?m.filter(i=>i).map(i=>i?.constructor===Object?l(a,i):"").join(""):a}}var U=ce;function ce(e,...r){r=e.raw?r:[r];try{return ie(e,...r)}catch(n){let t=_();return`Error creating Regular Expression from string "${e.raw||e}" with flags ${t}
3
- RegExp error message: "${n.message}"`}}function _(...e){return e.length>0?Array.isArray(e.slice(-1))?e.pop().join(""):e.join(""):""}function ie(e,...r){let n=_(...r);r=[];let t=e.raw||[e];return new RegExp((r.length&&t.reduce((o,l,p)=>o.concat(r[p-1]||"").concat(l),"")||t?.join("")).split(`
4
- `).map(o=>o.replace(/\s|\/\/.*$/g,"").trim().replace(/(@s!)/g," ")).join(""),n)}function I(e,r,n){return e=g(e),e.length>0?r(e):n||e}function G(e,...r){return I(e,()=>`${D(e,...r)}`)}function Z(e){return I(e,()=>`${e[0].toUpperCase()}${e.slice(1)}`)}function P(e,r,n){return!r&&!n?e:([r,n]=L(String,[r,n??""])?[r,n]:["",""],`${r}${e}${n||r}`)}function M(e){return I(e,()=>e.replace(/\s/g,"").replace(/[A-Z]/g,r=>`-${r.toLowerCase()}`).replace(/-{2,}/g,"-").replace(/[^a-z-]/g,"").replace(/^-|-$/,""))}function z(e){return I(e,()=>e.replace(/\s/g,"").replace(/[A-Z]/g,r=>`_${r.toLowerCase()}`).replace(/_{2,}/g,"_").replace(/[^a-z_]/g,"").replace(/^_|_$/,""))}function T(e){return I(e,()=>[...e.toLowerCase()].slice(1).reduce((r,n)=>r+(/\p{L}|[-']/u.test(r.at(-1))?n.toLowerCase():n.toUpperCase()),e[0].toUpperCase()))}function Y(e){return I(e,()=>e.toLowerCase().trim().split(/[- ]/).filter(r=>r&&r.length>0).map((r,n)=>n>0&&`${Z(r)}`||r).join(""))}function k(e,{at:r,html:n=!1,wordBoundary:t=!1}={}){return I(e,()=>{if(e.length<=r)return e;let o=e.slice(0,r-1),l=n?"&hellip;":"...",p=t?[...o.matchAll(/\p{Pe}|\p{Z}/gu)].at(-1)?.index??o.length:o.length;return(t?o.slice(0,p+1).trim():o)+l})}function q(e,r){return I(e,()=>{let n=e.replace(/\n/gm,"#LF#").split(/#LF#/).map(t=>t.trim().replace(/\s{2,}/g,o=>o[0]));return r?n.join("#LF#").replace(/#LF#/g,`
2
+ var{randomString:H,uuid4:W}=ue();function ue(){let e=j(),r=()=>e?[...crypto.getRandomValues(new Uint32Array(1))].shift()/2**32:Math.random(),n=({min:l=0,max:s=Number.MAX_SAFE_INTEGER}={})=>Math.floor(r()*(s-l+1)+l),t=(l=0,s=10,d)=>(d||[])instanceof Function?[...Array(s)].map((C,O)=>l+O).map(d):[...Array(s)].map((C,O)=>l+O),o=l=>String.fromCharCode(l),c="!?@#$%^&*=+_;-".split(""),g=RegExp(`[${c.map(l=>`\\${l}`).join("")}]`,"g"),h=l=>{let s=l.length;for(;s--;){let d=n({max:s});[l[s],l[d]]=[l[d],l[s]]}return l},y=h(t(65,26,o)),$=h(t(97,26,o)),p={UCLC:h(y.concat($)),UC:y,LC:$,Nrs:h(t()),Sym:h(c)},a=l=>Object.entries(l).reduce((s,[d,C])=>C?[...s,...p[d]]:s,$);function j(){try{return window&&"crypto"in window}catch{return!1}}function u(){return e&&crypto.randomUUID?crypto.randomUUID():[...new Uint8Array(16)].map(l=>n({max:255})).map((l,s)=>`${(s===8?l&63|128:s===6?l&15|64:l).toString(16).padStart(2,"0")}${~[3,5,7,9].indexOf(s)?"-":""}`).join("")}function f(l,s,d){return/[a-z]/i.test(l)&&(s&&d?/\d/.test(l)&&g.test(l):s?/\d/.test(l):d?g.test(l):!0)}function S(l){let s=[...l],d=s.findIndex(C=>/[a-z]/i.test(C));return[s[0],s[d]]=[s[d],s[0]],s.join("")}function V({len:l=12,includeUppercase:s=!0,includeNumbers:d,includeSymbols:C,startAlphabetic:O}={}){l=l<6?6:l;let I=h(a({UC:s,Nrs:d,Sym:C}));for(;I.length<l;)I=[...I,...h(I)];let v=I.slice(0,l).join("");if(!(d||C))return v;for(let A=0;A<I.length;A+=1)if(v=I.slice(A,A+l).join(""),f(v,d,C))return O&&!/^[a-z]/i.test(v)?S(v):v;return V({len:l,includeUppercase:s,includeNumbers:d,includeSymbols:C,startAlphabetic:O})}return{randomString:V,uuid4:u}}var D=ce();function ce(e=""){return e=e?.constructor===String?e:"",function(i,...p){return $(i,y(p))};function r(i,p){return p&&e.length>0?String(e):`{${i}}`}function n(i){return i?.constructor===String||i?.constructor===Number&&!Number.isNaN(i)}function t(i,p){let a=i in p;return a&&n(p[i])?String(p[i]):r(i,a)}function o(i){return(...p)=>{let a=p.find(j=>j.key);return t(a?a.key:"_",i)}}function c(i,p){return i.replace(/\{(?<key>[a-z_\d]+)}/gim,o(p))}function g(i){let p=[];return Object.entries(i).forEach(([a,j])=>{j.forEach((u,f)=>(p[f]??={},p[f][a]=u))}),p}function h(i){return i.length===1&&Object.values(i[0]).every(Array.isArray)}function y(i){return h(i)?g(i[0]):i}function $(i,p){return p?.length?p.filter(a=>a).map(a=>a?.constructor===Object?c(i,a):"").join(""):i}}var U=le;function le(e,...r){r=e.raw?r:[r];try{return ae(e,...r)}catch(n){let t=_();return`Error creating Regular Expression from string "${e.raw||e}" with flags ${t}
3
+ RegExp error message: "${n.message}"`}}function _(...e){return e.length>0?Array.isArray(e.slice(-1))?e.pop().join(""):e.join(""):""}function ae(e,...r){let n=_(...r);r=[];let t=e.raw||[e];return new RegExp((r.length&&t.reduce((o,c,g)=>o.concat(r[g-1]||"").concat(c),"")||t?.join("")).split(`
4
+ `).map(o=>o.replace(/\s|\/\/.*$/g,"").trim().replace(/(@s!)/g," ")).join(""),n)}function x(e,r,n){return e=m(e),e.length>0?r(e):n||e}function Z(e){return x(e,()=>`${e[0].toUpperCase()}${e.slice(1)}`)}function q(e,...r){return x(e,()=>`${D(e,...r)}`)}function P(e,r,n){return!r&&!n?e:([r,n]=N(String,[r,n??""])?[r,n]:["",""],`${r}${e}${n||r}`)}function M(e){return x(e,()=>e.replace(/\s/g,"").replace(/[A-Z]/g,r=>`-${r.toLowerCase()}`).replace(/-{2,}/g,"-").replace(/[^a-z-]/g,"").replace(/^-|-$/,""))}function z(e){return x(e,()=>e.replace(/\s/g,"").replace(/[A-Z]/g,r=>`_${r.toLowerCase()}`).replace(/_{2,}/g,"_").replace(/[^a-z_]/g,"").replace(/^_|_$/,""))}function Y(e){return x(e,()=>[...e.toLowerCase()].slice(1).reduce((r,n)=>r+(/\p{L}|[-']/u.test(r.at(-1))?n.toLowerCase():n.toUpperCase()),e[0].toUpperCase()))}function T(e){return x(e,()=>e.toLowerCase().trim().split(/[- ]/).filter(r=>r&&r.length>0).map((r,n)=>n>0&&`${Z(r)}`||r).join(""))}function ie(e){return[...e.matchAll(/\p{Pe}|\p{Z}/gu)].at(-1)?.index??e.length}function X(e,{at:r,html:n=!1,wordBoundary:t=!1}={}){return n=n?.constructor===Boolean&&n||!1,t=t?.constructor===Boolean&&t||!1,x(e,()=>{if(e.length<=r)return e;let o=e.slice(0,r-1),c=n?"&hellip;":"...",g=t?ie(o):o.length;return(t?o.slice(0,g+1).trim():o)+c})}function G(e,r=!1){return r=r?.constructor===Boolean&&r||!1,x(e,()=>{let n=e.replace(/\n/gm,"#LF#").split(/#LF#/).map(t=>t.trim().replace(/\s{2,}/g,o=>o[0]));return r?n.join("#LF#").replace(/#LF#/g,`
5
5
  `).trim():n.filter(t=>t.length>0).join(`
6
- `)})}function X(e,{replacements:r={},caseSensitive:n=!1}={}){e=g(e);let t=Object.entries(r).flat(),o=L(String,t)&&n?.constructor===Boolean,l=`g${n?"":"i"}`;if(o&&(t=t.map(p=>g(p)).filter(p=>t.length>0),t.length))for(;t.length;){let[p,h]=[t.shift(),t.shift()],y=re(p,l);e=e.replace(y,h)}return e}function K(e,r,n){e=g(e),n=N(n)?n:0;let t=e.indexOf(r,n||0);return t<0?void 0:t}function Q(e,r,n){e=g(e),n=N(n)?n:e.length;let t=e.lastIndexOf(r,n);return t<0?void 0:t}function F(e,{value:r,values:n,at:t=0}={}){e=g(e),t=N(t)?t:0;let o=g(n);return n=g(r).length?r:o.length?o:L(String,n)?n.map(l=>g(l)).join(""):[],n.length<=1?e:e.length===0?`${n}${e}`:`${e.slice(0,t)}${n}${e.slice(t)}`}function J(e,...r){return r=L(String,r)&&r,r?F(g(e),{values:r,at:0}):g(e)}function ee(e,...r){return r=L(String,r)&&r,r&&r.length>0?`${g(e)}`.concat(r.join("")):g(e)}function te(e,r){return{value:{get backtick(){return e.enclose(...b.backtick)},get bracket(){return e.enclose(...b.bracket)},get curlyDouble(){return e.enclose(...b.curlyDouble)},get curlyDoubleInward(){return e.enclose(...b.curlyDoubleInward)},get curlyDoubleEqual(){return e.enclose(...b.curlyDoubleEqual)},get curlyLHDoubleInward(){return e.enclose(...b.curlyLHDoubleInward)},get curlyLHSingle(){return e.enclose(...b.curlyLHSingle)},get curlyLHSingleInward(){return e.enclose(...b.curlyLHSingleInward)},get curlySingle(){return e.enclose(...b.curlySingle)},get curlySingleEqual(){return e.enclose(...b.curlySingleEqual)},get curlySingleInward(){return e.enclose(...b.curlySingleInward)},custom(n,t){return e.enclose(n,t??n)},get double(){return e.enclose(...b.double)},get guillemets(){return e.enclose(...b.guillemets)},get guillemetsInward(){return e.enclose(...b.guillemetsInward)},get guillemetsSingle(){return e.enclose(...b.guillemetsSingle)},get guillemetsSingleInward(){return e.enclose(...b.guillemetsSingleInward)},get remove(){return r(`${e.value.replace(b.re,"")}`)},get single(){return e.enclose(...b.single)},get squareBrackets(){return e.enclose(...b.squareBrackets)}},enumerable:!1,configurable:!1}}var ne=se,ae=/symbol|anchor|big|blink|bold|fixed|fontsize|fontcolor|italics|link|small|strike|sup|sub/i;function se({initialstring:e}={}){let r={},n=new Proxy(r,p(r)),t=g(e),o=[t],l={configurable:!1,enumerable:!1};return Object.defineProperties(r,{append:{...l,value(...u){return i(ee(t,...u))}},enclose:{...l,value(u,f){return i(P(t,u,f))}},format:{...l,value(...u){return i(G(t,...u))}},indexOf:{...l,value(u){return K(t,u)}},interpolate:{...l,value(...u){return i(G(t,...u))}},insert:{...l,value({value:u,values:f,at:S}={}){return i(F(t,{value:u,values:f,at:S}))}},lastIndexOf:{...l,value(u){return Q(t,u)}},prefix:{...l,value(...u){return i(J(t,...u))}},replaceWords:{...l,value({caseSensitive:u=!1,replacements:f={}}={}){return i(X(t,{replacements:f,caseSensitive:u}))}},toString:{...l,value(){return t}},truncate:{...l,value({at:u,html:f=!1,wordBoundary:S=!1}={}){return i(k(t,{at:u,html:f,wordBoundary:S}))}},valueOf:{...l,value(){return t}},undoLast:{...l,value(u){return a(u)}},camelCase:{...l,get(){return i(Y(g(t)))}},clone:{...l,get(){return H(n,E)}},firstUp:{...l,get(){return i(Z(g(t)))}},history:{...l,get(){return o},set(u){o=u}},empty:{...l,get(){return t.length<1}},notEmpty:{...l,get(){return t.length<1?void 0:n}},kebabCase:{...l,get(){return i(M(g(t)))}},quote:te(n,i),snakeCase:{...l,get(){return i(z(g(t)))}},trimAll:{...l,get(){return i(q(t))}},trimAllKeepLF:{...l,get(){return i(q(t,!0))}},undoAll:{...l,get(){return $()}},undo:{...l,get(){return m()}},wordsUCFirst:{...l,get(){return i(T(g(t)))}},value:{...l,get(){return t},set(u){let f=g(u);f.length&&(t=f,o.push(f))}}}),j(E),n;function p(u){return{get(f,S){return S in u?u[S]:h(String(S))?y(S):void 0}}}function h(u){return!ae.test(u)&&u in String.prototype}function y(u){return t[u]instanceof Function?function(...f){let S=t[u](...f);return S?.constructor===String?i(t[u](...f)):S}:t[u]}function $(){for(;o.length>1;)o.pop();return t=o.at(-1),i(t,!1)}function a(u){if(!N(u))return i(t,!1);let f=o.length;return u>=f||u<1?(o=o.slice(0,1),t=o.at(-1),i(o.at(-1),!1)):(o=o.slice(0,f-u),t=o.at(-1),i(t,!1))}function m(){return o.length===1?i(o[0]):(o.pop(),t=o.at(-1),i(t,!1))}function i(u,f=!0){return t!==u&&f&&o.push(u),t=u,n}function j(u){Object.entries(u).forEach(([f,S])=>{let{enumerable:V,method:c,isGetter:s}=S,d=!1;Object.defineProperty(r,f,s?{get(){return i(c(n).value)},enumerable:V,configurable:d}:{value(...O){return i(c(n,...O).value)},enumerable:V,configurable:d})})}}var E={},b=oe();me(w,E);function w(e,...r){let n=ne({initialstring:fe(e,...r)});return Object.defineProperty(n,"constructor",{get(){return w},enumerable:!1}),Object.freeze(n)}function H(e){let r=w(e.value);return r.history=[...e.history],r}function fe(e,...r){return e?.raw?String.raw({raw:e},...r):g(e).length?e:""}function g(e){return e?.value||e?.constructor===String&&e||""}function ge(e,r,n){return e===String&&n?r?.constructor!==w&&r?.constructor!==e:r?.constructor!==e}function L(e,r,n=!0){return Array.isArray(r)&&r.length>0&&!r.find(t=>ge(e,t,n))}function N(e){return e?.constructor===Number&&!Number.isNaN(e)}function pe(e){let r=w(he()),n={value:"getter/setter",clone:"chainable getter",notEmpty:"chainable getter|undefined",quote:"Object. See [constructor].quoteInfo"};return r.split(/\n/).concat(Object.entries(Object.getOwnPropertyDescriptors(r)).sort(([t],[o])=>t.localeCompare(o)).map(([t,o])=>{let l=!e.find(u=>u===t),p="get"in o,h="value"in o,y=t in String.prototype,$=!y&&t in n,a=t in E?" *custom*":"",m=p&&l?`chainable getter${a}`:"getter",i=h&&l?`chainable method${a}`:"method",j=y&&`${o.get?"getter":"method"} (override)`;switch(!0){case $:return A(t,n[t]);case y:return A(t,j);case h:return A(t,i);case p:return A(t,m);default:return A(t,"property")}}))}function A(e,r){return`${e} (${r})`}function me(e,r){Symbol.toSB=Symbol.for("toStringBuilder"),Object.defineProperty(String.prototype,Symbol.toSB,{get(){return e(this)},enumerable:!1,configurable:!1});let n="constructor,history,indexOf,toString,value,valueOf,empty".split(",");return Object.defineProperties(e,{create:{get(){return e()},enumerable:!1},constructor:{get(){return e},enumerable:!1},format:{value(t,...o){return w(t).format(...o)}},addCustom:{value({name:t,method:o,enumerable:l=!1,isGetter:p=!1}={}){if(w``[t])return console.error(`addCustom: the property "${t}" exists and can not be redefined`);t?.constructor===String&&o?.constructor===Function&&o.length>0&&(r[t]={method:o,enumerable:l,isGetter:p})}},info:{get(){return pe(n)}},keys:{get(){return Object.keys(Object.getOwnPropertyDescriptors(w``)).sort((t,o)=>t.localeCompare(o)).map(t=>!/constructor|toString|valueOf/.test(t)&&t in r?`${t} *custom*`:t)}},quoteInfo:{get(){let t={...oe()};return delete t.re,Object.entries(t).sort((o,l)=>o[0].localeCompare(l[0])).reduce((o,[l,p])=>{let h=p.constructor===Function?"(start:string[, end:string])":` (${p.join(" [instance value] ")})`;return[...o,`[instance].quote.${l}${h}`]},[])}},uuid4:{get(){return w(B())}},randomString:{value:function({len:t,includeUppercase:o,includeNumbers:l,includeSymbols:p,startAlphabetic:h}={}){return w(W({len:t,includeUppercase:o,includeNumbers:l,includeSymbols:p,startAlphabetic:h}))}},regExp:{value:U}}),e}function re(e,r){return new RegExp(e.replace(/\p{S}|\p{P}/gu,n=>`\\${n}`),r)}function de(e){return e.replace(/\p{S}|\p{P}/gu,r=>`\\${r}`)}function he(){return atob`Rm9yIHRoZSByZWNvcmQ6CltjbV0gY2hhaW5hYmxlIGdldHRlcnMvbWV0aG9kcyBtb2RpZnkgdGhlIGluc3RhbmNlIHN0cmluZwpbY21dIGluZGV4T2Ygb3ZlcnJpZGVzIHJldHVybnMgW3VuZGVmaW5lZF0gaWYgbm90aGluZyB3YXMgZm91bmQgKHNvIG9uZSBjYW4gdXNlIFtsYXN0SV1pbmRleE9mKFtzb21lIHN0cmluZyB2YWx1ZV0pID8/IDAKW2NtXSBpbmNsdWRlcyBpbmZvcm1hdGlvbiBmb3IgY3VzdG9tIG1ldGhvZHMvZ2V0dGVycyBpZiBhcHBsaWNhYmxl`.replace(/\[cm\]/g,"\u2714")}function oe(){let r={backtick:["`","`"],bracket:["{","}"],curlyDoubleInward:["\u201D","\u201C"],curlyDouble:["\u201C","\u201D"],curlyDoubleEqual:["\u201C","\u201C"],curlyLHDouble:["\u201E","\u201D"],curlyLHDoubleInward:["\u201E","\u201C"],curlyLHSingle:["\u201A","\u2019"],curlyLHSingleInward:["\u201A","\u2018"],curlySingle:["\u201B","\u2019"],curlySingleEqual:["\u201B","\u201B"],curlySingleInward:["\u2019","\u201B"],custom:(t,o)=>(t=g(t),o=g(o),[g(t),o.length?o:t]),double:['"','"'],guillemets:["\xAB","\xBB"],guillemetsInward:["\xBB","\xAB"],guillemetsSingle:["\u2039","\u203A"],guillemetsSingleInward:["\u203A","\u2039"],single:["'","'"],squareBrackets:["[","]"]},n=de([...new Set(Object.values(r).filter(t=>Array.isArray(t)).flat())].join(""));return r.re=RegExp(`^[${n}]|[${n}]$`,"g"),r}var Ne=w;export{w as CustomStringConstructor,Ne as default};
6
+ `)})}function K(e,{replacements:r={},caseSensitive:n=!1}={}){e=m(e);let t=Object.entries(r).flat(),o=N(String,t)&&n?.constructor===Boolean,c=`g${n?"":"i"}`;if(o&&(t=t.map(g=>m(g)).filter(g=>t.length>0),t.length))for(;t.length;){let[g,h]=[t.shift(),t.shift()],y=re(g,c);e=e.replace(y,h)}return e}function k(e,r,n=0){e=m(e),n=L(n)&&n||0;let t=e.indexOf(r,n||0);return t<0?void 0:t}function Q(e,r,n=0){e=m(e),n=L(n)&&n||e.length;let t=e.lastIndexOf(r,n);return t<0?void 0:t}function B(e,{value:r,values:n,at:t=0}={}){e=m(e),t=L(t)&&t||0;let o=m(n);return n=m(r).length?r:o.length?o:N(String,n)?n.map(c=>m(c)).join(""):[],n.length<=1?e:e.length===0?`${n}${e}`:`${e.slice(0,t)}${n}${e.slice(t)}`}function J(e,...r){return r=N(String,r)&&r,r?B(m(e),{values:r,at:0}):m(e)}function ee(e,...r){return r=N(String,r)&&r,r&&r.length>0?`${m(e)}`.concat(r.join("")):m(e)}function te(e,r){return{value:{get backtick(){return e.enclose(...b.backtick)},get bracket(){return e.enclose(...b.bracket)},get curlyDouble(){return e.enclose(...b.curlyDouble)},get curlyDoubleInward(){return e.enclose(...b.curlyDoubleInward)},get curlyDoubleEqual(){return e.enclose(...b.curlyDoubleEqual)},get curlyLHDoubleInward(){return e.enclose(...b.curlyLHDoubleInward)},get curlyLHSingle(){return e.enclose(...b.curlyLHSingle)},get curlyLHSingleInward(){return e.enclose(...b.curlyLHSingleInward)},get curlySingle(){return e.enclose(...b.curlySingle)},get curlySingleEqual(){return e.enclose(...b.curlySingleEqual)},get curlySingleInward(){return e.enclose(...b.curlySingleInward)},custom(n,t){return e.enclose(n,t??n)},get double(){return e.enclose(...b.double)},get guillemets(){return e.enclose(...b.guillemets)},get guillemetsInward(){return e.enclose(...b.guillemetsInward)},get guillemetsSingle(){return e.enclose(...b.guillemetsSingle)},get guillemetsSingleInward(){return e.enclose(...b.guillemetsSingleInward)},get remove(){return r(`${e.value.replace(b.re,"")}`)},get single(){return e.enclose(...b.single)},get squareBrackets(){return e.enclose(...b.squareBrackets)}},enumerable:!1,configurable:!1}}var ne=fe,se=/symbol|anchor|big|blink|bold|fixed|fontsize|fontcolor|italics|link|small|strike|sup|sub/i;function fe({initialstring:e}={}){let r={},n=new Proxy(r,g(r)),t=m(e),o=[t],c={configurable:!1,enumerable:!1};return Object.defineProperties(r,{append:{...c,value(...u){return a(ee(t,...u))}},enclose:{...c,value(u,f){return a(P(t,u,f))}},format:{...c,value(...u){return a(q(t,...u))}},indexOf:{...c,value(u){return k(t,u)}},interpolate:{...c,value(...u){return a(q(t,...u))}},insert:{...c,value({value:u,values:f,at:S}={}){return a(B(t,{value:u,values:f,at:S}))}},lastIndexOf:{...c,value(u){return Q(t,u)}},prefix:{...c,value(...u){return a(J(t,...u))}},replaceWords:{...c,value({caseSensitive:u=!1,replacements:f={}}={}){return a(K(t,{replacements:f??{},caseSensitive:u}))}},toString:{...c,value(){return t}},truncate:{...c,value({at:u,html:f=!1,wordBoundary:S=!1}={}){return a(X(t,{at:u,html:f,wordBoundary:S}))}},valueOf:{...c,value(){return t}},undoLast:{...c,value(u){return i(u)}},camelCase:{...c,get(){return a(T(m(t)))}},clone:{...c,get(){return F(n,E)}},firstUp:{...c,get(){return a(Z(m(t)))}},history:{...c,get(){return o},set(u){o=u}},empty:{...c,get(){return t.length<1}},notEmpty:{...c,get(){return t.length<1?void 0:n}},kebabCase:{...c,get(){return a(M(m(t)))}},quote:te(n,a),snakeCase:{...c,get(){return a(z(m(t)))}},trimAll:{...c,get(){return a(G(t))}},trimAllKeepLF:{...c,get(){return a(G(t,!0))}},undoAll:{...c,get(){return $()}},undo:{...c,get(){return p()}},wordsUCFirst:{...c,get(){return a(Y(m(t)))}},value:{...c,get(){return t},set(u){let f=m(u);f.length&&(t=f,o.push(f))}}}),j(E),n;function g(u){return{get(f,S){return S in u?u[S]:h(String(S))?y(S):void 0}}}function h(u){return!se.test(u)&&u in String.prototype}function y(u){return t[u]instanceof Function?function(...f){let S=t[u](...f);return S?.constructor===String?a(t[u](...f)):S}:t[u]}function $(){for(;o.length>1;)o.pop();return t=o.at(-1),a(t,!1)}function i(u){if(!L(u))return a(t,!1);let f=o.length;return u>=f||u<1?(o=o.slice(0,1),t=o.at(-1),a(o.at(-1),!1)):(o=o.slice(0,f-u),t=o.at(-1),a(t,!1))}function p(){return o.length===1?a(o[0]):(o.pop(),t=o.at(-1),a(t,!1))}function a(u,f=!0){return t!==u&&f&&o.push(u),t=u,n}function j(u){Object.entries(u).forEach(([f,S])=>{let{enumerable:V,method:l,isGetter:s}=S,d=!1;Object.defineProperty(r,f,s?{get(){return a(l(n).value)},enumerable:V,configurable:d}:{value(...O){return a(l(n,...O).value)},enumerable:V,configurable:d})})}}var E={},b=oe();Se(w,E);function w(e,...r){let n=ne({initialstring:ge(e,...r)});return Object.defineProperty(n,"constructor",{get(){return w},enumerable:!1}),Object.freeze(n)}function ge(e,...r){return e?.raw?String.raw({raw:e},...r):m(e).length?e:""}function pe(e,r,n){return e===String&&n?r?.constructor!==w&&r?.constructor!==e:r?.constructor!==e}function N(e,r,n=!0){return Array.isArray(r)&&r.length>0&&!r.find(t=>pe(e,t,n))}function F(e){let r=w(e.value);return r.history=[...e.history],r}function m(e){return e?.value||e?.constructor===String&&e||""}function L(e){return e?.constructor===Number&&!Number.isNaN(e)}function re(e,r){return new RegExp(e.replace(/\p{S}|\p{P}/gu,n=>`\\${n}`),r)}function me(e){return e.replace(/\p{S}|\p{P}/gu,r=>`\\${r}`)}function R(e,r){return`${e} (${r})`}function de(){return{value:"getter/setter",clone:"chainable getter",notEmpty:"chainable getter|undefined",quote:"Object. See [constructor].quoteInfo"}}function he(e){let r=w(be()),n=de();return r.split(/\n/).concat(Object.entries(Object.getOwnPropertyDescriptors(r)).sort(([t],[o])=>t.localeCompare(o)).map(([t,o])=>{let c=!e.find(u=>u===t),g="get"in o,h="value"in o,y=t in String.prototype,$=!y&&t in n,i=t in E?" *custom*":"",p=g&&c?`chainable getter${i}`:"getter",a=h&&c?`chainable method${i}`:"method",j=y&&`${o.get?"getter":"method"} (override)`;switch(!0){case $:return R(t,n[t]);case y:return R(t,j);case h:return R(t,a);case g:return R(t,p)}}))}function be(){return atob`Rm9yIHRoZSByZWNvcmQ6CltjbV0gY2hhaW5hYmxlIGdldHRlcnMvbWV0aG9kcyBtb2RpZnkgdGhlIGluc3RhbmNlIHN0cmluZwpbY21dIGluZGV4T2Ygb3ZlcnJpZGVzIHJldHVybnMgW3VuZGVmaW5lZF0gaWYgbm90aGluZyB3YXMgZm91bmQgKHNvIG9uZSBjYW4gdXNlIFtsYXN0SV1pbmRleE9mKFtzb21lIHN0cmluZyB2YWx1ZV0pID8/IDAKW2NtXSBpbmNsdWRlcyBpbmZvcm1hdGlvbiBmb3IgY3VzdG9tIG1ldGhvZHMvZ2V0dGVycyBpZiBhcHBsaWNhYmxl`.replace(/\[cm]/g,"\u2714")}function oe(){let e={backtick:["`","`"],bracket:["{","}"],curlyDoubleInward:["\u201D","\u201C"],curlyDouble:["\u201C","\u201D"],curlyDoubleEqual:["\u201C","\u201C"],curlyLHDouble:["\u201E","\u201D"],curlyLHDoubleInward:["\u201E","\u201C"],curlyLHSingle:["\u201A","\u2019"],curlyLHSingleInward:["\u201A","\u2018"],curlySingle:["\u201B","\u2019"],curlySingleEqual:["\u201B","\u201B"],curlySingleInward:["\u2019","\u201B"],double:['"','"'],guillemets:["\xAB","\xBB"],guillemetsInward:["\xBB","\xAB"],guillemetsSingle:["\u2039","\u203A"],guillemetsSingleInward:["\u203A","\u2039"],single:["'","'"],squareBrackets:["[","]"]},r=me([...new Set(Object.values(e).filter(n=>Array.isArray(n)).flat())].join(""));return e.re=RegExp(`^[${r}]|[${r}]$`,"g"),e}function Se(e,r){Symbol.toSB=Symbol.for("toStringBuilder"),Object.defineProperty(String.prototype,Symbol.toSB,{get(){return e(this)},enumerable:!1,configurable:!1});let n="constructor,history,indexOf,toString,value,valueOf,empty".split(",");return Object.defineProperties(e,{create:{get(){return e()},enumerable:!1},constructor:{get(){return e},enumerable:!1},format:{value(t,...o){return w(t).format(...o)}},addCustom:{value({name:t,method:o,enumerable:c=!1,isGetter:g=!1}={}){if(w``[t])return console.error(`addCustom: the property "${t}" exists and can not be redefined`),`addCustom: the property "${t}" exists and can not be redefined`;if(t?.constructor===String&&o?.constructor===Function&&o.length>0)return r[t]={method:o,enumerable:c,isGetter:g},`addCustom: the ${g?"getter":"method"} named "${t}" is added`}},info:{get(){return he(n)}},keys:{get(){return Object.keys(Object.getOwnPropertyDescriptors(w``)).sort((t,o)=>t.localeCompare(o)).map(t=>!/constructor|toString|valueOf/.test(t)&&t in r?`${t} *custom*`:t)}},quoteInfo:{get(){let t={...oe()};return delete t.re,Object.entries(t).sort((o,c)=>o[0].localeCompare(c[0])).reduce((o,[c,g])=>{let h=g.constructor===Function?"(start:string[, end:string])":` (${g.join(" [instance value] ")})`;return[...o,`[instance].quote.${c}${h}`]},[])}},uuid4:{get(){return w(W())}},randomString:{value:function({len:t,includeUppercase:o,includeNumbers:c,includeSymbols:g,startAlphabetic:h}={}){return w(H({len:t,includeUppercase:o,includeNumbers:c,includeSymbols:g,startAlphabetic:h}))}},regExp:{value:U}}),e}var Ae=w;export{w as CustomStringConstructor,Ae as default};
7
7
  //# sourceMappingURL=index.min.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/Factories/randomStringFactory.js", "../src/Factories/interpolateFactory.js", "../src/Factories/regExpFromMultilineStringFactory.js", "../src/instanceMethods.js", "../src/extensions.js", "../src/genericMethods.js", "../index.js"],
4
- "sourcesContent": ["const { randomString, uuid4 } = randomStringGeneratorFactory();\r\nexport { randomString as default, randomString, uuid4 };\r\n\r\nfunction randomStringGeneratorFactory() {\r\n const hasCrypto = checkBrowserCrypto();\r\n const getRandomValue = () => hasCrypto\r\n ? [...crypto.getRandomValues(new Uint32Array(1))].shift() / 2**32\r\n : Math.random();\r\n const randomNr = ({min = 0, max = Number.MAX_SAFE_INTEGER} = {}) =>\r\n Math.floor( getRandomValue() * (max - min + 1) + min );\r\n const range = (start = 0, len = 10, reMap) => (reMap || []) instanceof Function\r\n ? [...Array(len)].map((_, i) => start + i).map(reMap)\r\n : [...Array(len)].map((_, i) => start + i);\r\n const map2Chrs = v => String.fromCharCode(v);\r\n const symbols = `!?@#$%^&*=+_;-`.split(``);\r\n const symRE = RegExp(`[${symbols.map(v => `\\\\${v}`).join(``)}]`, `g`);\r\n const shuffle = array => {\r\n let i = array.length;\r\n while (i--) {\r\n const ri = randomNr( { max: i } );\r\n [array[i], array[ri]] = [array[ri], array[i]];\r\n }\r\n \r\n return array;\r\n };\r\n const UC = shuffle(range(65, 26, map2Chrs));\r\n const LC = shuffle(range(97, 26, map2Chrs));\r\n const UCLC = shuffle(UC.concat(LC));\r\n const allChars = { UCLC, UC, LC, Nrs: shuffle(range()), Sym: shuffle(symbols), };\r\n const getChars2Use = use => Object.entries(use)\r\n .reduce( (acc, [key, value]) => value ? [...acc, ...allChars[key]] : acc, LC );\r\n \r\n function checkBrowserCrypto() {\r\n try { return window && `crypto` in window }\r\n catch(_) { return false; }\r\n }\r\n \r\n function uuid4() {\r\n // Note: randomUUID only in secure context (https)\r\n return hasCrypto && crypto.randomUUID\r\n ? crypto.randomUUID()\r\n : [...new Uint8Array(16)]\r\n .map(_ => randomNr({max: 255}))\r\n .map( (v, i) => `${\r\n (i === 8 ? v & 0b00111111 | 0b10000000 : i === 6 ? v & 0b00001111 | 0b01000000 : v)\r\n .toString(16).padStart(2, `0`)}${~[3,5,7,9].indexOf(i) ? `-` : ``}` )\r\n .join(``);\r\n }\r\n \r\n function strTest(strFound, numbers, symbols) {\r\n return /[a-z]/i.test(strFound) && (\r\n numbers && symbols ? /\\d/.test(strFound) && symRE.test(strFound)\r\n : numbers ? /\\d/.test(strFound)\r\n : symbols ? symRE.test(strFound)\r\n : true);\r\n }\r\n \r\n function alphaSwap(strFound) {\r\n const chars = [...strFound];\r\n const idx = chars.findIndex(v => /[a-z]/i.test(v));\r\n [chars[0], chars[idx]] = [chars[idx], chars[0]];\r\n return chars.join(``);\r\n }\r\n \r\n function randomString( {len = 12, includeUppercase = true, includeNumbers, includeSymbols, startAlphabetic} = {} ) {\r\n len = len < 6 ? 6 : len;\r\n let chrs2Use = shuffle( getChars2Use( { UC: includeUppercase, Nrs: includeNumbers, Sym: includeSymbols } ) );\r\n \r\n while (chrs2Use.length < len) { chrs2Use = [...chrs2Use, ...shuffle(chrs2Use)]; }\r\n \r\n let strFound = chrs2Use.slice(0, len).join(``);\r\n \r\n if (!(includeNumbers || includeSymbols)) { return strFound; }\r\n \r\n for (let i = 0; i < chrs2Use.length; i += 1) {\r\n strFound = chrs2Use.slice(i, i + len).join(``);\r\n \r\n if (strTest(strFound, includeNumbers, includeSymbols)) {\r\n return startAlphabetic && !/^[a-z]/i.test(strFound) ? alphaSwap(strFound) : strFound;\r\n }\r\n }\r\n \r\n return randomString({len, includeUppercase, includeNumbers, includeSymbols, startAlphabetic});\r\n }\r\n \r\n return { randomString, uuid4 };\r\n}\r\n", "const defaultInterpolator = interpolateFactory();\r\nexport {defaultInterpolator as default, interpolateFactory};\r\n\r\n/**\r\n * Factory function to create an interpolate function with a default replacer.\r\n * @param {string} defaultReplacer - Default value to use for missing tokens.\r\n * @returns {Function} - The interpolation function.\r\n */\r\nfunction interpolateFactory(defaultReplacer = \"\") {\r\n defaultReplacer = defaultReplacer?.constructor === String ? defaultReplacer : \"\";\r\n \r\n /**\r\n * Main interpolation function.\r\n * @param {string} str - The string with placeholders.\r\n * @param {...object} tokens - Objects containing replacement values.\r\n * @returns {string} - The interpolated string.\r\n */\r\n return function(str, ...tokens) {\r\n return interpolate(str, processTokens(tokens));\r\n }\r\n \r\n /**\r\n * Handle invalid keys by returning the default replacer or the key in braces.\r\n * @param {string} key - The placeholder key.\r\n * @param {boolean} keyExists - Flag indicating if the key exists in the token.\r\n * @returns {string} - The replacement value.\r\n */\r\n function invalidate(key, keyExists) {\r\n if (keyExists && defaultReplacer.length > 0) {\r\n return String(defaultReplacer);\r\n }\r\n \r\n return `{${key}}`;\r\n }\r\n \r\n /**\r\n * determine if [value] is a String or Number\r\n * @param {any} value\r\n * @returns {boolean}\r\n */\r\n function isStringOrNumber(value ) {\r\n return value?.constructor === String || value?.constructor === Number && !Number.isNaN(value);\r\n }\r\n \r\n /**\r\n * Get the replacement value for a key from the token.\r\n * @param {string} key - The placeholder key.\r\n * @param {object} token - The token object containing replacement values.\r\n * @returns {string} - The replacement value.\r\n */\r\n function replacement(key, token) {\r\n const isValid = key in token;\r\n return isValid && isStringOrNumber(token[key]) ? String(token[key]) : invalidate(key, isValid);\r\n }\r\n \r\n /**\r\n * Create a lambda function for replacing placeholders in the string.\r\n * @param {object<string, string>} token - The token object containing replacement values.\r\n * @returns {Function} - The replacer lambda function.\r\n */\r\n function getReplacerLambda(token) {\r\n return (...args) => {\r\n const replacementObject = args.find(a => a.key);\r\n return replacement((replacementObject ? replacementObject.key : `_`), token);\r\n };\r\n }\r\n \r\n /**\r\n * Replace placeholders in the string with values from the token.\r\n * @param {string} str - The string with placeholders.\r\n * @param {object} token - The token object containing replacement values.\r\n * @returns {string} - The interpolated string.\r\n */\r\n function replace(str, token) {\r\n return str.replace(/\\{(?<key>[a-z_\\d]+)}/gim, getReplacerLambda(token));\r\n }\r\n \r\n /**\r\n * Convert token object to array of token Objects\r\n * when it's values are arrays of values.\r\n * @param {object} tokenObject - The token object containing arrays of values.\r\n * @returns {object[]} - Array of token objects.\r\n */\r\n function convertTokensFromArrayValues(tokenObject) {\r\n const converted = [];\r\n \r\n Object.entries(tokenObject).forEach(([key, value]) => {\r\n value.forEach((v, i) => (converted[i] ??= {}, converted[i][key] = v));\r\n });\r\n \r\n return converted;\r\n }\r\n \r\n /**\r\n * Check if single token and its values are arrays.\r\n * @param {object[]} tokens - The tokens to check.\r\n * @returns {boolean} - True if tokens contains one Object\r\n * and all it's values are of type Array.\r\n */\r\n function isMultiLineWithArrays(tokens) {\r\n return tokens.length === 1 && Object.values(tokens[0]).every(Array.isArray);\r\n }\r\n \r\n /**\r\n * Process tokens to handle multi-line formats.\r\n * @param {object[]} tokens - The tokens to process.\r\n * @returns {object[]} - Processed tokens.\r\n */\r\n function processTokens(tokens) {\r\n return isMultiLineWithArrays(tokens) ? convertTokensFromArrayValues(tokens[0]) : tokens;\r\n }\r\n \r\n /**\r\n * Interpolate the string with the given tokens.\r\n * @param {string} str - The string with placeholders.\r\n * @param {object[]} tokens - The tokens containing replacement values.\r\n * @returns {string} - The interpolated string.\r\n */\r\n function interpolate(str, tokens) {\r\n return !tokens?.length ? str : tokens\r\n .filter(token => token)\r\n .map(token => token?.constructor === Object ? replace(str, token) : ``)\r\n .join(``);\r\n }\r\n}\r\n", "import {resolveTemplateString} from \"../genericMethods.js\";\r\n\r\nexport default createRegExp\r\n\r\nfunction createRegExp(str, ...args) {\r\n args = !str.raw ? [args] : args;\r\n try {\r\n return regExp(str, ...args);\r\n } catch (err) {\r\n const flags = resolveFlags();\r\n const raw = str.raw || str; \r\n return `Error creating Regular Expression from string \"${raw}\" with flags ${flags}` +\r\n `\\nRegExp error message: \"${err.message}\"`;\r\n }\r\n}\r\n\r\nfunction resolveFlags(...args) {\r\n return args.length > 0\r\n ? Array.isArray(args.slice(-1))\r\n ? args.pop().join(``) : args.join(``) : ``;\r\n}\r\n\r\nfunction regExp(regexStr, ...args) {\r\n const flags = resolveFlags(...args);\r\n args = [];\r\n const raw = regexStr.raw || [regexStr];\r\n \r\n return new RegExp(\r\n (args.length &&\r\n raw.reduce( (a, v, i ) => a.concat(args[i-1] || ``).concat(v), ``) ||\r\n raw?.join(``))\r\n .split(`\\n`)\r\n .map( line => line.replace(/\\s|\\/\\/.*$/g, ``).trim().replace(/(@s!)/g, ` `) )\r\n .join(``), flags);\r\n}\r\n", "import {\r\n isArrayOf,\r\n isNumber,\r\n quotingStyles,\r\n getStringValue,\r\n escapeRE,\r\n customMethods,\r\n interpolate,\r\n clone } from \"./genericMethods.js\";\r\n\r\nexport {\r\n format,\r\n ucFirst,\r\n truncate,\r\n trimAll,\r\n replaceWords,\r\n indexOf,\r\n lastIndexOf,\r\n insert,\r\n append,\r\n isNumber,\r\n prefix,\r\n getStringValue,\r\n toCamelcase,\r\n wordsFirstUp,\r\n toDashedNotation,\r\n quotGetters,\r\n surroundWith,\r\n toSnakeCase,\r\n customMethods,\r\n clone,\r\n};\r\n\r\nfunction checkAndRun(string, fn, or) {\r\n string = getStringValue(string);\r\n return string.length > 0 ? fn(string) : or || string;\r\n}\r\n\r\nfunction format(string, ...tokens) {\r\n return checkAndRun(string, () => `${interpolate(string, ...tokens)}`); \r\n}\r\n\r\nfunction ucFirst(string) {\r\n return checkAndRun(string, () => `${string[0].toUpperCase()}${string.slice(1)}`); \r\n}\r\n\r\nfunction surroundWith(string, start, end) {\r\n if (!start && !end) {\r\n return string;\r\n }\r\n [start, end] = isArrayOf(String, [start, end ?? ``]) ? [start, end] : [``, ``];\r\n return `${start}${string}${end || start}`;\r\n}\r\n\r\nfunction toDashedNotation(string) {\r\n return checkAndRun(string, () => \r\n string\r\n .replace(/\\s/g, '')\r\n .replace(/[A-Z]/g, a => `-${a.toLowerCase()}`)\r\n .replace(/-{2,}/g, `-`)\r\n .replace(/[^a-z-]/g, ``)\r\n .replace(/^-|-$/, ``)\r\n );\r\n}\r\n\r\nfunction toSnakeCase(string) {\r\n return checkAndRun(string, () =>\r\n string\r\n .replace(/\\s/g, '')\r\n .replace(/[A-Z]/g, a => `_${a.toLowerCase()}`)\r\n .replace(/_{2,}/g, `_`)\r\n .replace(/[^a-z_]/g, ``)\r\n .replace(/^_|_$/, ``)\r\n );\r\n}\r\n\r\nfunction wordsFirstUp(string) {\r\n return checkAndRun(string, () => [...string.toLowerCase()].slice(1).reduce( (acc, v) =>\r\n acc + ( !/\\p{L}|[-']/u.test(acc.at(-1)) ? v.toUpperCase() : v.toLowerCase() ),\r\n string[0].toUpperCase()\r\n ));\r\n}\r\n\r\nfunction toCamelcase(string) {\r\n return checkAndRun(string, () => \r\n string.toLowerCase()\r\n .trim()\r\n .split(/[- ]/)\r\n .filter(l => l && l.length > 0)\r\n .map( (str, i) => i > 0 && `${ucFirst(str)}`|| str)\r\n .join(``)\r\n );\r\n}\r\n\r\nfunction truncate(string, {at, html = false, wordBoundary = false} = {} ) {\r\n return checkAndRun(string, () => {\r\n if (string.length <= at) { return string; }\r\n \r\n const subString = string.slice(0, at - 1);\r\n const endwith = html ? \"&hellip;\" : `...`;\r\n const boundary = wordBoundary \r\n ? [...subString.matchAll(/\\p{Pe}|\\p{Z}/gu)].at(-1)?.index ?? subString.length \r\n : subString.length;\r\n \r\n return (wordBoundary\r\n ? subString.slice(0, boundary+1).trim()\r\n : subString) + endwith; \r\n }\r\n );\r\n}\r\n\r\nfunction trimAll(string, keepLines) {\r\n return checkAndRun(string, () => {\r\n const lines = string.replace(/\\n/gm, `#LF#`)\r\n .split(/#LF#/)\r\n .map(line => line.trim().replace(/\\s{2,}/g, a => a[0]) );\r\n return keepLines \r\n ? lines.join(`#LF#`).replace(/#LF#/g, `\\n`).trim()\r\n : lines.filter(l => l.length > 0).join(`\\n`);\r\n });\r\n}\r\n\r\nfunction replaceWords(string, { replacements = {}, caseSensitive = false} = {}) {\r\n string = getStringValue(string);\r\n let replacements2Array = Object.entries(replacements).flat();\r\n const cando = isArrayOf(String, replacements2Array) && caseSensitive?.constructor === Boolean;\r\n const modifiers = `g${!caseSensitive ? 'i' : ''}`;\r\n \r\n if (cando) {\r\n replacements2Array = replacements2Array.map(v => getStringValue(v)).filter(v => replacements2Array.length > 0);\r\n \r\n if (replacements2Array.length) {\r\n while (replacements2Array.length) {\r\n const [initial, replacement] = [replacements2Array.shift(), replacements2Array.shift()];\r\n const re = escapeRE(initial, modifiers);\r\n string = string.replace(re, replacement);\r\n }\r\n }\r\n }\r\n \r\n return string;\r\n}\r\n\r\n// SEE https://youtu.be/99Zacm7SsWQ?t=2101\r\nfunction indexOf(string, findMe, fromIndex) {\r\n string = getStringValue(string);\r\n fromIndex = isNumber(fromIndex) ? fromIndex : 0;\r\n const index = string.indexOf(findMe, fromIndex || 0);\r\n return index < 0 ? undefined : index; \r\n}\r\n\r\nfunction lastIndexOf(string, findMe, beforeIndex) {\r\n string = getStringValue(string);\r\n beforeIndex = isNumber(beforeIndex) ? beforeIndex : string.length;\r\n const index = string.lastIndexOf(findMe, beforeIndex);\r\n return index < 0 ? undefined : index;\r\n}\r\n\r\nfunction insert(string, { value, values, at = 0 } = {}) {\r\n string = getStringValue(string);\r\n at = isNumber(at) ? at : 0;\r\n const valuesMaybeValue = getStringValue(values);\r\n values = getStringValue(value).length \r\n ? value\r\n : valuesMaybeValue.length\r\n ? valuesMaybeValue\r\n : isArrayOf(String, values) \r\n ? values.map(v => getStringValue(v)).join(``) \r\n : [];\r\n \r\n return values.length <= 1\r\n ? string\r\n : string.length === 0 \r\n ? `${values}${string}` \r\n : `${string.slice(0, at)}${values}${string.slice(at)}`;\r\n}\r\n\r\nfunction prefix(string, ...strings) {\r\n strings = isArrayOf(String, strings) && strings;\r\n return strings ? insert(getStringValue(string), {values: strings, at: 0}) : getStringValue(string);\r\n}\r\n\r\nfunction append(string, ...strings2Append) {\r\n strings2Append = isArrayOf(String, strings2Append) && strings2Append;\r\n \r\n if (strings2Append && strings2Append.length > 0) {\r\n return `${getStringValue(string)}`.concat(strings2Append.join(``))\r\n }\r\n \r\n return getStringValue(string);\r\n}\r\n\r\nfunction quotGetters(instance, wrap) {\r\n return { \r\n value: {\r\n get backtick() { return instance.enclose(...quotingStyles.backtick); },\r\n get bracket() { return instance.enclose(...quotingStyles.bracket); },\r\n get curlyDouble() { return instance.enclose(...quotingStyles.curlyDouble); },\r\n get curlyDoubleInward() { return instance.enclose(...quotingStyles.curlyDoubleInward); },\r\n get curlyDoubleEqual() { return instance.enclose(...quotingStyles.curlyDoubleEqual); },\r\n get curlyLHDoubleInward() { return instance.enclose(...quotingStyles.curlyLHDoubleInward); },\r\n get curlyLHSingle() { return instance.enclose(...quotingStyles.curlyLHSingle); },\r\n get curlyLHSingleInward() { return instance.enclose(...quotingStyles.curlyLHSingleInward); },\r\n get curlySingle() { return instance.enclose(...quotingStyles.curlySingle); },\r\n get curlySingleEqual() { return instance.enclose(...quotingStyles.curlySingleEqual); },\r\n get curlySingleInward() { return instance.enclose(...quotingStyles.curlySingleInward); },\r\n custom(start, end) { return instance.enclose(...[start, end ?? start]); },\r\n get double() { return instance.enclose(...quotingStyles.double); },\r\n get guillemets() { return instance.enclose(...quotingStyles.guillemets); },\r\n get guillemetsInward() { return instance.enclose(...quotingStyles.guillemetsInward); },\r\n get guillemetsSingle() { return instance.enclose(...quotingStyles.guillemetsSingle); },\r\n get guillemetsSingleInward() { return instance.enclose(...quotingStyles.guillemetsSingleInward); },\r\n get remove() { return wrap(`${instance.value.replace(quotingStyles.re, ``)}`); },\r\n get single() { return instance.enclose(...quotingStyles.single); },\r\n get squareBrackets() { return instance.enclose(...quotingStyles.squareBrackets); },\r\n }, \r\n enumerable: false,\r\n configurable: false,\r\n };\r\n}\r\n", "import {\r\n format,\r\n ucFirst,\r\n truncate,\r\n trimAll,\r\n replaceWords,\r\n indexOf,\r\n lastIndexOf,\r\n insert,\r\n append,\r\n prefix,\r\n getStringValue,\r\n quotGetters,\r\n surroundWith,\r\n toCamelcase,\r\n wordsFirstUp,\r\n toDashedNotation,\r\n toSnakeCase,\r\n customMethods,\r\n isNumber,\r\n clone,\r\n} from \"./instanceMethods.js\";\r\n\r\nexport default instanceCreator;\r\n\r\nconst deprecatedRE = /symbol|anchor|big|blink|bold|fixed|fontsize|fontcolor|italics|link|small|strike|sup|sub/i\r\n\r\nfunction instanceCreator({initialstring} = {}) {\r\n let customStringExtensions = { };\r\n let instance = new Proxy(customStringExtensions, getTraps(customStringExtensions));\r\n let actualValue = getStringValue(initialstring);\r\n let history = [actualValue];\r\n const descriptorProps = {configurable: false, enumerable: false};\r\n \r\n Object.defineProperties( customStringExtensions, {\r\n append: { ...descriptorProps, value(...strings) { return wrap(append(actualValue, ...strings)); } },\r\n enclose: { ...descriptorProps, value(start, end) { return wrap(surroundWith(actualValue, start, end)); } },\r\n format: { ...descriptorProps, value(...tokens) { return wrap(format(actualValue, ...tokens)); } },\r\n indexOf: { ...descriptorProps, value(str) { return indexOf(actualValue, str); } },\r\n interpolate: { ...descriptorProps, value(...tokens) { return wrap(format(actualValue, ...tokens)); } },\r\n insert: { ...descriptorProps, value({ value, values, at } = {}) { \r\n return wrap(insert(actualValue, { value, values, at })); \r\n } \r\n },\r\n lastIndexOf: { ...descriptorProps, value(str) { return lastIndexOf(actualValue, str); } },\r\n prefix: { ...descriptorProps, value(...strings) { return wrap(prefix(actualValue, ...strings)); } },\r\n replaceWords: { ...descriptorProps, value({caseSensitive = false, replacements = {}} = {}) {\r\n return wrap(replaceWords(actualValue, {replacements, caseSensitive}));\r\n } },\r\n toString: { ...descriptorProps, value() { return actualValue; } },\r\n truncate: { ...descriptorProps, value({at, html = false, wordBoundary = false} = {}) {\r\n return wrap(truncate(actualValue, {at, html, wordBoundary})); } },\r\n valueOf: { ...descriptorProps, value() { return actualValue; } },\r\n undoLast: { ...descriptorProps, value(nSteps) { return undoSteps(nSteps); } },\r\n\r\n camelCase: { ...descriptorProps, get() { return wrap(toCamelcase(getStringValue(actualValue))); } }, \r\n clone: { ...descriptorProps, get() { return clone(instance, customMethods); } },\r\n firstUp: { ...descriptorProps, get() { return wrap(ucFirst(getStringValue(actualValue))); } },\r\n history: { ...descriptorProps, get() { return history; }, set(value) { history = value; } },\r\n empty: { ...descriptorProps, get() { return actualValue.length < 1; } },\r\n notEmpty: { ...descriptorProps, get() { return actualValue.length < 1 ? undefined: instance; } },\r\n kebabCase: { ...descriptorProps, get() { return wrap(toDashedNotation(getStringValue(actualValue))); } },\r\n quote: quotGetters(instance, wrap),\r\n snakeCase: { ...descriptorProps, get() { return wrap(toSnakeCase(getStringValue(actualValue))); } },\r\n trimAll: { ...descriptorProps, get() { return wrap(trimAll(actualValue)); } },\r\n trimAllKeepLF: { ...descriptorProps, get() { return wrap(trimAll(actualValue, true)); } },\r\n undoAll: { ...descriptorProps, get() { return undoAll(); } },\r\n undo: { ...descriptorProps, get() { return undoLast(); } },\r\n wordsUCFirst: { ...descriptorProps, get() { return wrap(wordsFirstUp(getStringValue(actualValue))); } },\r\n value: { ...descriptorProps, \r\n get() { return actualValue; }, \r\n set(value) {\r\n const nwValue = getStringValue(value);\r\n if (nwValue.length) {\r\n actualValue = nwValue;\r\n history.push(nwValue); \r\n }\r\n }\r\n },\r\n });\r\n \r\n injectCustomMethods(customMethods);\r\n \r\n return instance;\r\n \r\n function getTraps(extensions) {\r\n return {\r\n get( target, key ) {\r\n return key in extensions\r\n ? extensions[key]\r\n : canWrapNative(String(key))\r\n ? wrapNative(key)\r\n : undefined;\r\n },\r\n };\r\n }\r\n \r\n function canWrapNative(key) {\r\n return !deprecatedRE.test(key)\r\n && key in String.prototype;\r\n }\r\n \r\n function wrapNative(key) {\r\n return actualValue[key] instanceof Function\r\n ? function(...args) {\r\n const result = actualValue[key](...args); \r\n return result?.constructor === String ? wrap(actualValue[key](...args)) : result; \r\n } : actualValue[key];\r\n }\r\n \r\n function undoAll() {\r\n while(history.length > 1) { history.pop(); }\r\n actualValue = history.at(-1);\r\n return wrap(actualValue, false);\r\n }\r\n \r\n function undoSteps(steps) {\r\n if (!isNumber(steps)) {\r\n return wrap(actualValue, false); \r\n }\r\n \r\n const historyLen = history.length;\r\n \r\n if (steps >= historyLen || steps < 1) {\r\n history = history.slice(0, 1);\r\n actualValue = history.at(-1); \r\n return wrap(history.at(-1), false); \r\n }\r\n \r\n history = history.slice(0, historyLen - steps);\r\n \r\n actualValue = history.at(-1);\r\n return wrap(actualValue, false);\r\n }\r\n \r\n function undoLast() {\r\n if (history.length === 1) {\r\n return wrap(history[0]);\r\n }\r\n history.pop();\r\n actualValue = history.at(-1);\r\n return wrap(actualValue, false);\r\n }\r\n \r\n function wrap(result, pushHistory = true) {\r\n const changed = actualValue !== result;\r\n changed && pushHistory && history.push(result);\r\n actualValue = result;\r\n return instance;\r\n }\r\n \r\n function injectCustomMethods(customMethods) {\r\n Object.entries(customMethods).forEach(([methodName, methodContainer]) => {\r\n const {enumerable, method, isGetter} = methodContainer;\r\n const configurable = false\r\n const descriptor = isGetter\r\n ? { get() { return wrap(method(instance).value); }, enumerable, configurable }\r\n : { value(...args) { return wrap(method(instance, ...args).value); }, enumerable, configurable };\r\n \r\n Object.defineProperty(customStringExtensions, methodName, descriptor);\r\n });\r\n }\r\n}\r\n", "import {default as randomString, uuid4} from \"./Factories/randomStringFactory.js\";\r\nimport interpolate from \"./Factories/interpolateFactory.js\";\r\nimport createRegExp from \"./Factories/regExpFromMultilineStringFactory.js\";\r\nimport createInstance from \"./extensions.js\";\r\nconst customMethods = {};\r\nconst quotingStyles = defineQuotingStyles();\r\n\r\nexport {\r\n customMethods,\r\n CustomStringConstructor,\r\n isNumber, \r\n isArrayOf,\r\n defineQuotingStyles,\r\n getStringValue,\r\n escapeRE,\r\n resolveTemplateString,\r\n clone,\r\n interpolate,\r\n quotingStyles,\r\n};\r\n\r\ncreateExtendedCTOR(CustomStringConstructor, customMethods);\r\n\r\nfunction CustomStringConstructor(str, ...args) {\r\n const instance = createInstance({initialstring: resolveTemplateString(str, ...args)});\r\n Object.defineProperty( instance, \r\n `constructor`, { get() { return CustomStringConstructor; }, enumerable: false}\r\n );\r\n return Object.freeze(instance);\r\n}\r\n\r\nfunction clone(instance) {\r\n const newInstance = CustomStringConstructor(instance.value);\r\n newInstance.history = [...instance.history];\r\n return newInstance;\r\n}\r\n\r\nfunction resolveTemplateString(str, ...args) {\r\n return str?.raw\r\n ? String.raw({ raw: str }, ...args)\r\n : getStringValue(str).length ? str : \"\";\r\n}\r\n\r\nfunction getStringValue(string) {\r\n return string?.value || (string?.constructor === String && string) || ``;\r\n}\r\n\r\nfunction checkType(type, item, includeInstances) {\r\n return type === String && includeInstances\r\n ? item?.constructor !== CustomStringConstructor && item?.constructor !== type\r\n : item?.constructor !== type;\r\n}\r\n\r\nfunction isArrayOf(type, value, includeInstances = true) {\r\n return Array.isArray(value) && value.length > 0 && !value.find(v => checkType(type, v, includeInstances));\r\n}\r\n\r\nfunction isNumber(value) {\r\n return value?.constructor === Number && !Number.isNaN(value);\r\n}\r\n\r\nfunction getSWInformation(notChainable) {\r\n const firstLines = CustomStringConstructor(decode());\r\n const plainValues = {\r\n value: `getter/setter`,\r\n clone: `chainable getter`,\r\n notEmpty: `chainable getter|undefined`,\r\n quote: `Object. See [constructor].quoteInfo`,\r\n };\r\n \r\n return firstLines.split(/\\n/)\r\n .concat(\r\n Object.entries(Object.getOwnPropertyDescriptors(firstLines))\r\n .sort(([keyA], [keyB]) => keyA.localeCompare(keyB))\r\n .map(([key, descriptr]) => {\r\n const isChainable = !notChainable.find(k => k === key);\r\n const isGetter = 'get' in descriptr;\r\n const isMethod = 'value' in descriptr;\r\n const isNative = key in String.prototype;\r\n const isPlainValue = !isNative && key in plainValues;\r\n const custom = key in customMethods ? ` *custom*` : ``;\r\n const getter = isGetter && isChainable ? `chainable getter${custom}` : `getter`;\r\n const method = isMethod && isChainable ? `chainable method${custom}` : `method`;\r\n const native = isNative && `${descriptr.get ? `getter` : `method`} (override)`;\r\n \r\n switch (true) {\r\n case isPlainValue: return infoValue(key, plainValues[key]);\r\n case isNative: return infoValue(key, native);\r\n case isMethod: return infoValue(key, method);\r\n case isGetter: return infoValue(key, getter);\r\n default: return infoValue(key, `property`);\r\n }\r\n }\r\n )\r\n );\r\n}\r\n\r\nfunction infoValue(key, infoValue) {\r\n return `${key} (${infoValue})`;\r\n}\r\n\r\nfunction createExtendedCTOR(ctor, customMethods) {\r\n Symbol.toSB = Symbol.for(`toStringBuilder`);\r\n Object.defineProperty(String.prototype, Symbol.toSB, { \r\n get() { return ctor(this); }, \r\n enumerable: false,\r\n configurable: false });\r\n const notChainable = `constructor,history,indexOf,toString,value,valueOf,empty`.split(`,`);\r\n Object.defineProperties(ctor, {\r\n create: {\r\n get() { return ctor(); },\r\n enumerable: false\r\n },\r\n constructor: {\r\n get() { return ctor; },\r\n enumerable: false,\r\n },\r\n format: {\r\n value(str, ...tokens) {\r\n return CustomStringConstructor(str).format(...tokens);\r\n }\r\n },\r\n addCustom: {\r\n value( { name, method, enumerable = false, isGetter = false } = {} ) {\r\n if (CustomStringConstructor``[name]) {\r\n return console.error(`addCustom: the property \"${name}\" exists and can not be redefined`);\r\n }\r\n if (name?.constructor === String && method?.constructor === Function && method.length > 0) {\r\n customMethods[name] = {method, enumerable, isGetter};\r\n }\r\n }\r\n },\r\n info: {\r\n get() { return getSWInformation(notChainable); }\r\n },\r\n keys: {\r\n get() { \r\n return Object.keys(Object.getOwnPropertyDescriptors(CustomStringConstructor``)).sort( (a,b) => a.localeCompare(b) )\r\n .map(v => !/constructor|toString|valueOf/.test(v) && v in customMethods ? `${v} *custom*` : v); \r\n }\r\n },\r\n quoteInfo: {\r\n get() {\r\n const qStyles = {...defineQuotingStyles()};\r\n delete qStyles.re;\r\n return Object.entries(qStyles)\r\n .sort( (a,b) => a[0].localeCompare(b[0]) )\r\n .reduce((acc, [k, v]) => {\r\n const val = v.constructor === Function ? `(start:string[, end:string])` : ` (${v.join(` [instance value] `)})`;\r\n return [...acc, `[instance].quote.${k}${val}`];\r\n }, []);\r\n }\r\n },\r\n uuid4: {\r\n get() { return CustomStringConstructor(uuid4()); }\r\n },\r\n randomString: {\r\n value: function({len, includeUppercase, includeNumbers, includeSymbols, startAlphabetic} = {}) {\r\n return CustomStringConstructor(randomString({len, includeUppercase, includeNumbers, includeSymbols, startAlphabetic})); \r\n }\r\n },\r\n regExp: { value: createRegExp }\r\n });\r\n \r\n return ctor;\r\n}\r\n\r\nfunction escapeRE(reString, modifiers) {\r\n return new RegExp(reString.replace(/\\p{S}|\\p{P}/gu, a => `\\\\${a}`), modifiers);\r\n}\r\n\r\nfunction escape4RE(reString) {\r\n return reString.replace(/\\p{S}|\\p{P}/gu, a => `\\\\${a}`);\r\n}\r\n\r\nfunction decode() {\r\n return atob`Rm9yIHRoZSByZWNvcmQ6CltjbV0gY2hhaW5hYmxlIGdldHRlcnMvbWV0aG9kcyBtb2RpZnkgdGhlIGluc3RhbmNlIHN0cmluZwpbY21dIGluZGV4T2Ygb3ZlcnJpZGVzIHJldHVybnMgW3VuZGVmaW5lZF0gaWYgbm90aGluZyB3YXMgZm91bmQgKHNvIG9uZSBjYW4gdXNlIFtsYXN0SV1pbmRleE9mKFtzb21lIHN0cmluZyB2YWx1ZV0pID8/IDAKW2NtXSBpbmNsdWRlcyBpbmZvcm1hdGlvbiBmb3IgY3VzdG9tIG1ldGhvZHMvZ2V0dGVycyBpZiBhcHBsaWNhYmxl`.replace(/\\[cm\\]/g, `\\u2714`);\r\n}\r\n\r\nfunction defineQuotingStyles() {\r\n // see https://en.wikipedia.org/wiki/Quotation_mark\r\n const custom = (start, end) => {\r\n start = getStringValue(start);\r\n end = getStringValue(end);\r\n return [getStringValue(start), end.length ? end : start]; \r\n } \r\n const quots = {\r\n backtick: [\"`\", \"`\"],\r\n bracket: [`{`, `}`],\r\n curlyDoubleInward: [`\u201D`, `\u201C`],\r\n curlyDouble: [`\u201C`, `\u201D`],\r\n curlyDoubleEqual: [`\u201C`, `\u201C`],\r\n curlyLHDouble: [`\u201E`, `\u201D`],\r\n curlyLHDoubleInward: [`\u201E`, `\u201C`],\r\n curlyLHSingle: [`\u201A`, `\u2019`],\r\n curlyLHSingleInward: [`\u201A`, `\u2018`],\r\n curlySingle: [`\u201B`, `\u2019`],\r\n curlySingleEqual: [`\u201B`, `\u201B`],\r\n curlySingleInward: [`\u2019`, `\u201B`],\r\n custom,\r\n double: [`\"`, `\"`],\r\n guillemets: [`\u00AB`, `\u00BB`],\r\n guillemetsInward: [`\u00BB`, `\u00AB`],\r\n guillemetsSingle: [`\u2039`, `\u203A`],\r\n guillemetsSingleInward: [`\u203A`, `\u2039`],\r\n single: [`'`, `'`],\r\n squareBrackets: [`[`, `]`],\r\n };\r\n const regExpValues = escape4RE([...new Set(\r\n Object.values(quots)\r\n .filter(v => Array.isArray(v))\r\n .flat())].join(``));\r\n quots.re = RegExp(`^[${regExpValues}]|[${regExpValues}]$`, \"g\");\r\n return quots;\r\n}\r\n", "import { CustomStringConstructor } from \"./src/genericMethods.js\";\r\nconst defaultStringCTOR = CustomStringConstructor;\r\n\r\nexport {defaultStringCTOR as default, CustomStringConstructor};\r\n"],
5
- "mappings": ";AAAA,GAAM,CAAE,aAAAA,EAAc,MAAAC,CAAM,EAAIC,GAA6B,EAG7D,SAASC,IAA+B,CACtC,IAAMC,EAAYC,EAAmB,EAC/BC,EAAiB,IAAMF,EACzB,CAAC,GAAG,OAAO,gBAAgB,IAAI,YAAY,CAAC,CAAC,CAAC,EAAE,MAAM,EAAI,GAAG,GAC7D,KAAK,OAAO,EACVG,EAAW,CAAC,CAAC,IAAAC,EAAM,EAAG,IAAAC,EAAM,OAAO,gBAAgB,EAAI,CAAC,IAC5D,KAAK,MAAOH,EAAe,GAAKG,EAAMD,EAAM,GAAKA,CAAI,EACjDE,EAAQ,CAACC,EAAQ,EAAGC,EAAM,GAAIC,KAAWA,GAAS,CAAC,aAAc,SACnE,CAAC,GAAG,MAAMD,CAAG,CAAC,EAAE,IAAI,CAACE,EAAGC,IAAMJ,EAAQI,CAAC,EAAE,IAAIF,CAAK,EAClD,CAAC,GAAG,MAAMD,CAAG,CAAC,EAAE,IAAI,CAACE,EAAGC,IAAMJ,EAAQI,CAAC,EACrCC,EAAWC,GAAK,OAAO,aAAaA,CAAC,EACrCC,EAAU,iBAAiB,MAAM,EAAE,EACnCC,EAAQ,OAAO,IAAID,EAAQ,IAAID,GAAK,KAAKA,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,IAAK,GAAG,EAC9DG,EAAUC,GAAS,CACvB,IAAIN,EAAIM,EAAM,OACd,KAAON,KAAK,CACV,IAAMO,EAAKf,EAAU,CAAE,IAAKQ,CAAE,CAAE,EAChC,CAACM,EAAMN,CAAC,EAAGM,EAAMC,CAAE,CAAC,EAAI,CAACD,EAAMC,CAAE,EAAGD,EAAMN,CAAC,CAAC,CAC9C,CAEA,OAAOM,CACT,EACME,EAAKH,EAAQV,EAAM,GAAI,GAAIM,CAAQ,CAAC,EACpCQ,EAAKJ,EAAQV,EAAM,GAAI,GAAIM,CAAQ,CAAC,EAEpCS,EAAW,CAAE,KADNL,EAAQG,EAAG,OAAOC,CAAE,CAAC,EACT,GAAAD,EAAI,GAAAC,EAAI,IAAKJ,EAAQV,EAAM,CAAC,EAAG,IAAKU,EAAQF,CAAO,CAAG,EACzEQ,EAAgBC,GAAO,OAAO,QAAQA,CAAG,EAC5C,OAAQ,CAACC,EAAK,CAACC,EAAKC,CAAK,IAAMA,EAAQ,CAAC,GAAGF,EAAK,GAAGH,EAASI,CAAG,CAAC,EAAID,EAAKJ,CAAG,EAE/E,SAASnB,GAAqB,CAC5B,GAAI,CAAE,OAAO,QAAU,WAAY,MAAO,MACjC,CAAE,MAAO,EAAO,CAC3B,CAEA,SAAS0B,GAAQ,CAEf,OAAO3B,GAAa,OAAO,WACvB,OAAO,WAAW,EAClB,CAAC,GAAG,IAAI,WAAW,EAAE,CAAC,EACrB,IAAIU,GAAKP,EAAS,CAAC,IAAK,GAAG,CAAC,CAAC,EAC7B,IAAK,CAACU,EAAGF,IAAM,IACbA,IAAM,EAAIE,EAAI,GAAa,IAAaF,IAAM,EAAKE,EAAI,GAAa,GAAaA,GAC/E,SAAS,EAAE,EAAE,SAAS,EAAG,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,QAAQF,CAAC,EAAI,IAAM,EAAE,EAAG,EACvE,KAAK,EAAE,CACd,CAEA,SAASiB,EAAQC,EAAUC,EAAShB,EAAS,CAC3C,MAAO,SAAS,KAAKe,CAAQ,IAC3BC,GAAWhB,EAAU,KAAK,KAAKe,CAAQ,GAAKd,EAAM,KAAKc,CAAQ,EAC3DC,EAAU,KAAK,KAAKD,CAAQ,EAC1Bf,EAAUC,EAAM,KAAKc,CAAQ,EAC3B,GACZ,CAEA,SAASE,EAAUF,EAAU,CAC3B,IAAMG,EAAQ,CAAC,GAAGH,CAAQ,EACpBI,EAAMD,EAAM,UAAUnB,GAAK,SAAS,KAAKA,CAAC,CAAC,EACjD,OAACmB,EAAM,CAAC,EAAGA,EAAMC,CAAG,CAAC,EAAI,CAACD,EAAMC,CAAG,EAAGD,EAAM,CAAC,CAAC,EACvCA,EAAM,KAAK,EAAE,CACtB,CAEA,SAASE,EAAc,CAAC,IAAA1B,EAAM,GAAI,iBAAA2B,EAAmB,GAAM,eAAAC,EAAgB,eAAAC,EAAgB,gBAAAC,CAAe,EAAI,CAAC,EAAI,CACjH9B,EAAMA,EAAM,EAAI,EAAIA,EACpB,IAAI+B,EAAWvB,EAASM,EAAc,CAAE,GAAIa,EAAkB,IAAKC,EAAgB,IAAKC,CAAe,CAAE,CAAE,EAE3G,KAAOE,EAAS,OAAS/B,GAAO+B,EAAW,CAAC,GAAGA,EAAU,GAAGvB,EAAQuB,CAAQ,CAAC,EAE7E,IAAIV,EAAWU,EAAS,MAAM,EAAG/B,CAAG,EAAE,KAAK,EAAE,EAE7C,GAAI,EAAE4B,GAAkBC,GAAmB,OAAOR,EAElD,QAASlB,EAAI,EAAGA,EAAI4B,EAAS,OAAQ5B,GAAK,EAGxC,GAFCkB,EAAWU,EAAS,MAAM5B,EAAGA,EAAIH,CAAG,EAAE,KAAK,EAAE,EAE1CoB,EAAQC,EAAUO,EAAgBC,CAAc,EAClD,OAAOC,GAAmB,CAAC,UAAU,KAAKT,CAAQ,EAAIE,EAAUF,CAAQ,EAAIA,EAIhF,OAAOK,EAAa,CAAC,IAAA1B,EAAK,iBAAA2B,EAAkB,eAAAC,EAAgB,eAAAC,EAAgB,gBAAAC,CAAe,CAAC,CAC9F,CAEA,MAAO,CAAE,aAAAJ,EAAc,MAAAP,CAAM,CAC/B,CCtFA,IAAMa,EAAsBC,GAAmB,EAQ/C,SAASC,GAAmBC,EAAkB,GAAI,CAChD,OAAAA,EAAkBA,GAAiB,cAAgB,OAASA,EAAkB,GAQvE,SAASC,KAAQC,EAAQ,CAC9B,OAAOC,EAAYF,EAAKG,EAAcF,CAAM,CAAC,CAC/C,EAQA,SAASG,EAAWC,EAAKC,EAAW,CAClC,OAAIA,GAAaP,EAAgB,OAAS,EACjC,OAAOA,CAAe,EAGxB,IAAIM,CAAG,GAChB,CAOA,SAASE,EAAiBC,EAAQ,CAChC,OAAOA,GAAO,cAAgB,QAAUA,GAAO,cAAgB,QAAU,CAAC,OAAO,MAAMA,CAAK,CAC9F,CAQA,SAASC,EAAYJ,EAAKK,EAAO,CAC/B,IAAMC,EAAUN,KAAOK,EACvB,OAAOC,GAAWJ,EAAiBG,EAAML,CAAG,CAAC,EAAI,OAAOK,EAAML,CAAG,CAAC,EAAID,EAAWC,EAAKM,CAAO,CAC/F,CAOA,SAASC,EAAkBF,EAAO,CAChC,MAAO,IAAIG,IAAS,CAClB,IAAMC,EAAoBD,EAAK,KAAKE,GAAKA,EAAE,GAAG,EAC9C,OAAON,EAAaK,EAAoBA,EAAkB,IAAM,IAAMJ,CAAK,CAC7E,CACF,CAQA,SAASM,EAAQhB,EAAKU,EAAO,CAC3B,OAAOV,EAAI,QAAQ,0BAA2BY,EAAkBF,CAAK,CAAC,CACxE,CAQA,SAASO,EAA6BC,EAAa,CACjD,IAAMC,EAAY,CAAC,EAEnB,cAAO,QAAQD,CAAW,EAAE,QAAQ,CAAC,CAACb,EAAKG,CAAK,IAAM,CACpDA,EAAM,QAAQ,CAACY,EAAGC,KAAOF,EAAUE,CAAC,IAAM,CAAC,EAAGF,EAAUE,CAAC,EAAEhB,CAAG,EAAIe,EAAE,CACtE,CAAC,EAEMD,CACT,CAQA,SAASG,EAAsBrB,EAAQ,CACrC,OAAOA,EAAO,SAAW,GAAK,OAAO,OAAOA,EAAO,CAAC,CAAC,EAAE,MAAM,MAAM,OAAO,CAC5E,CAOA,SAASE,EAAcF,EAAQ,CAC7B,OAAOqB,EAAsBrB,CAAM,EAAIgB,EAA6BhB,EAAO,CAAC,CAAC,EAAIA,CACnF,CAQA,SAASC,EAAYF,EAAKC,EAAQ,CAChC,OAAQA,GAAQ,OAAeA,EAC5B,OAAOS,GAASA,CAAK,EACrB,IAAIA,GAASA,GAAO,cAAgB,OAASM,EAAQhB,EAAKU,CAAK,EAAI,EAAE,EACrE,KAAK,EAAE,EAHeV,CAI3B,CACF,CC1HA,IAAOuB,EAAQC,GAEf,SAASA,GAAaC,KAAQC,EAAM,CAClCA,EAAQD,EAAI,IAAeC,EAAT,CAACA,CAAI,EACvB,GAAI,CACF,OAAOC,GAAOF,EAAK,GAAGC,CAAI,CAC5B,OAASE,EAAK,CACZ,IAAMC,EAAQC,EAAa,EAE3B,MAAO,kDADKL,EAAI,KAAOA,CACqC,gBAAgBI,CAAK;AAAA,yBACnDD,EAAI,OAAO,GAC3C,CACF,CAEA,SAASE,KAAgBJ,EAAM,CAC7B,OAAOA,EAAK,OAAS,EACjB,MAAM,QAAQA,EAAK,MAAM,EAAE,CAAC,EAC1BA,EAAK,IAAI,EAAE,KAAK,EAAE,EAAIA,EAAK,KAAK,EAAE,EAAI,EAC9C,CAEA,SAASC,GAAOI,KAAaL,EAAM,CACjC,IAAMG,EAAQC,EAAa,GAAGJ,CAAI,EAClCA,EAAO,CAAC,EACR,IAAMM,EAAMD,EAAS,KAAO,CAACA,CAAQ,EAErC,OAAO,IAAI,QACRL,EAAK,QACJM,EAAI,OAAQ,CAACC,EAAGC,EAAGC,IAAOF,EAAE,OAAOP,EAAKS,EAAE,CAAC,GAAK,EAAE,EAAE,OAAOD,CAAC,EAAG,EAAE,GACjEF,GAAK,KAAK,EAAE,GACX,MAAM;AAAA,CAAI,EACV,IAAKI,GAAQA,EAAK,QAAQ,cAAe,EAAE,EAAE,KAAK,EAAE,QAAQ,SAAU,GAAG,CAAE,EAC3E,KAAK,EAAE,EAAGP,CAAK,CACtB,CCDA,SAASQ,EAAYC,EAAQC,EAAIC,EAAI,CACnC,OAAAF,EAASG,EAAeH,CAAM,EACvBA,EAAO,OAAS,EAAIC,EAAGD,CAAM,EAAIE,GAAMF,CAChD,CAEA,SAASI,EAAOJ,KAAWK,EAAQ,CACjC,OAAON,EAAYC,EAAQ,IAAM,GAAGM,EAAYN,EAAQ,GAAGK,CAAM,CAAC,EAAE,CACtE,CAEA,SAASE,EAAQP,EAAQ,CACvB,OAAOD,EAAYC,EAAQ,IAAM,GAAGA,EAAO,CAAC,EAAE,YAAY,CAAC,GAAGA,EAAO,MAAM,CAAC,CAAC,EAAE,CACjF,CAEA,SAASQ,EAAaR,EAAQS,EAAOC,EAAK,CACxC,MAAI,CAACD,GAAS,CAACC,EACNV,GAET,CAACS,EAAOC,CAAG,EAAIC,EAAU,OAAQ,CAACF,EAAOC,GAAO,EAAE,CAAC,EAAI,CAACD,EAAOC,CAAG,EAAI,CAAC,GAAI,EAAE,EACtE,GAAGD,CAAK,GAAGT,CAAM,GAAGU,GAAOD,CAAK,GACzC,CAEA,SAASG,EAAiBZ,EAAQ,CAChC,OAAOD,EAAYC,EAAQ,IACzBA,EACG,QAAQ,MAAO,EAAE,EACjB,QAAQ,SAAUa,GAAK,IAAIA,EAAE,YAAY,CAAC,EAAE,EAC5C,QAAQ,SAAU,GAAG,EACrB,QAAQ,WAAY,EAAE,EACtB,QAAQ,QAAS,EAAE,CACxB,CACF,CAEA,SAASC,EAAYd,EAAQ,CAC3B,OAAOD,EAAYC,EAAQ,IACzBA,EACG,QAAQ,MAAO,EAAE,EACjB,QAAQ,SAAUa,GAAK,IAAIA,EAAE,YAAY,CAAC,EAAE,EAC5C,QAAQ,SAAU,GAAG,EACrB,QAAQ,WAAY,EAAE,EACtB,QAAQ,QAAS,EAAE,CACxB,CACF,CAEA,SAASE,EAAaf,EAAQ,CAC5B,OAAOD,EAAYC,EAAQ,IAAM,CAAC,GAAGA,EAAO,YAAY,CAAC,EAAE,MAAM,CAAC,EAAE,OAAQ,CAACgB,EAAKC,IAC9ED,GAAS,cAAc,KAAKA,EAAI,GAAG,EAAE,CAAC,EAAsBC,EAAE,YAAY,EAAhCA,EAAE,YAAY,GAC1DjB,EAAO,CAAC,EAAE,YAAY,CACxB,CAAC,CACH,CAEA,SAASkB,EAAYlB,EAAQ,CAC3B,OAAOD,EAAYC,EAAQ,IACzBA,EAAO,YAAY,EAChB,KAAK,EACL,MAAM,MAAM,EACZ,OAAOmB,GAAKA,GAAKA,EAAE,OAAS,CAAC,EAC7B,IAAK,CAACC,EAAKC,IAAMA,EAAI,GAAK,GAAGd,EAAQa,CAAG,CAAC,IAAKA,CAAG,EACjD,KAAK,EAAE,CACZ,CACF,CAEA,SAASE,EAAStB,EAAQ,CAAC,GAAAuB,EAAI,KAAAC,EAAO,GAAO,aAAAC,EAAe,EAAK,EAAI,CAAC,EAAI,CACxE,OAAO1B,EAAYC,EAAQ,IAAM,CAC/B,GAAIA,EAAO,QAAUuB,EAAM,OAAOvB,EAElC,IAAM0B,EAAY1B,EAAO,MAAM,EAAGuB,EAAK,CAAC,EAClCI,EAAUH,EAAO,WAAa,MAC9BI,EAAWH,EACb,CAAC,GAAGC,EAAU,SAAS,gBAAgB,CAAC,EAAE,GAAG,EAAE,GAAG,OAASA,EAAU,OACrEA,EAAU,OAEd,OAAQD,EACJC,EAAU,MAAM,EAAGE,EAAS,CAAC,EAAE,KAAK,EACpCF,GAAaC,CACjB,CACF,CACF,CAEA,SAASE,EAAQ7B,EAAS8B,EAAW,CACnC,OAAO/B,EAAYC,EAAQ,IAAM,CAC/B,IAAM+B,EAAQ/B,EAAO,QAAQ,OAAQ,MAAM,EACxC,MAAM,MAAM,EACZ,IAAIgC,GAAQA,EAAK,KAAK,EAAE,QAAQ,UAAWnB,GAAKA,EAAE,CAAC,CAAC,CAAE,EACzD,OAAOiB,EACHC,EAAM,KAAK,MAAM,EAAE,QAAQ,QAAS;AAAA,CAAI,EAAE,KAAK,EAC/CA,EAAM,OAAOZ,GAAKA,EAAE,OAAS,CAAC,EAAE,KAAK;AAAA,CAAI,CAC/C,CAAC,CACH,CAEA,SAASc,EAAajC,EAAQ,CAAE,aAAAkC,EAAe,CAAC,EAAG,cAAAC,EAAgB,EAAK,EAAI,CAAC,EAAG,CAC9EnC,EAASG,EAAeH,CAAM,EAC9B,IAAIoC,EAAqB,OAAO,QAAQF,CAAY,EAAE,KAAK,EACrDG,EAAQ1B,EAAU,OAAQyB,CAAkB,GAAKD,GAAe,cAAgB,QAChFG,EAAY,IAAKH,EAAsB,GAAN,GAAQ,GAE/C,GAAIE,IACFD,EAAqBA,EAAmB,IAAInB,GAAKd,EAAec,CAAC,CAAC,EAAE,OAAOA,GAAKmB,EAAmB,OAAS,CAAC,EAEzGA,EAAmB,QACrB,KAAOA,EAAmB,QAAQ,CAChC,GAAM,CAACG,EAASC,CAAW,EAAI,CAACJ,EAAmB,MAAM,EAAGA,EAAmB,MAAM,CAAC,EAChFK,EAAKC,GAASH,EAASD,CAAS,EACtCtC,EAASA,EAAO,QAAQyC,EAAID,CAAW,CACzC,CAIJ,OAAOxC,CACT,CAGA,SAAS2C,EAAQ3C,EAAQ4C,EAAQC,EAAW,CAC1C7C,EAASG,EAAeH,CAAM,EAC9B6C,EAAYC,EAASD,CAAS,EAAIA,EAAY,EAC9C,IAAME,EAAQ/C,EAAO,QAAQ4C,EAAQC,GAAa,CAAC,EACnD,OAAOE,EAAQ,EAAI,OAAYA,CACjC,CAEA,SAASC,EAAYhD,EAAQ4C,EAAQK,EAAa,CAChDjD,EAASG,EAAeH,CAAM,EAC9BiD,EAAcH,EAASG,CAAW,EAAIA,EAAcjD,EAAO,OAC3D,IAAM+C,EAAQ/C,EAAO,YAAY4C,EAAQK,CAAW,EACpD,OAAOF,EAAQ,EAAI,OAAYA,CACjC,CAEA,SAASG,EAAOlD,EAAQ,CAAE,MAAAmD,EAAO,OAAAC,EAAQ,GAAA7B,EAAK,CAAE,EAAI,CAAC,EAAG,CACtDvB,EAASG,EAAeH,CAAM,EAC9BuB,EAAKuB,EAASvB,CAAE,EAAIA,EAAK,EACzB,IAAM8B,EAAmBlD,EAAeiD,CAAM,EAC9C,OAAAA,EAASjD,EAAegD,CAAK,EAAE,OAC3BA,EACAE,EAAiB,OACjBA,EACA1C,EAAU,OAAQyC,CAAM,EACtBA,EAAO,IAAInC,GAAKd,EAAec,CAAC,CAAC,EAAE,KAAK,EAAE,EAC1C,CAAC,EAEAmC,EAAO,QAAU,EACpBpD,EACAA,EAAO,SAAW,EAChB,GAAGoD,CAAM,GAAGpD,CAAM,GAClB,GAAGA,EAAO,MAAM,EAAGuB,CAAE,CAAC,GAAG6B,CAAM,GAAGpD,EAAO,MAAMuB,CAAE,CAAC,EAC1D,CAEA,SAAS+B,EAAOtD,KAAWuD,EAAS,CAClC,OAAAA,EAAU5C,EAAU,OAAQ4C,CAAO,GAAKA,EACjCA,EAAUL,EAAO/C,EAAeH,CAAM,EAAG,CAAC,OAAQuD,EAAS,GAAI,CAAC,CAAC,EAAIpD,EAAeH,CAAM,CACnG,CAEA,SAASwD,GAAOxD,KAAWyD,EAAgB,CAGzC,OAFAA,EAAiB9C,EAAU,OAAQ8C,CAAc,GAAKA,EAElDA,GAAkBA,EAAe,OAAS,EACrC,GAAGtD,EAAeH,CAAM,CAAC,GAAG,OAAOyD,EAAe,KAAK,EAAE,CAAC,EAG5DtD,EAAeH,CAAM,CAC9B,CAEA,SAAS0D,GAAYC,EAAUC,EAAM,CACnC,MAAO,CACL,MAAO,CACL,IAAI,UAAW,CAAE,OAAOD,EAAS,QAAQ,GAAGE,EAAc,QAAQ,CAAG,EACrE,IAAI,SAAU,CAAE,OAAOF,EAAS,QAAQ,GAAGE,EAAc,OAAO,CAAG,EACnE,IAAI,aAAc,CAAE,OAAOF,EAAS,QAAQ,GAAGE,EAAc,WAAW,CAAG,EAC3E,IAAI,mBAAoB,CAAE,OAAOF,EAAS,QAAQ,GAAGE,EAAc,iBAAiB,CAAG,EACvF,IAAI,kBAAmB,CAAE,OAAOF,EAAS,QAAQ,GAAGE,EAAc,gBAAgB,CAAG,EACrF,IAAI,qBAAsB,CAAE,OAAOF,EAAS,QAAQ,GAAGE,EAAc,mBAAmB,CAAG,EAC3F,IAAI,eAAgB,CAAE,OAAOF,EAAS,QAAQ,GAAGE,EAAc,aAAa,CAAG,EAC/E,IAAI,qBAAsB,CAAE,OAAOF,EAAS,QAAQ,GAAGE,EAAc,mBAAmB,CAAG,EAC3F,IAAI,aAAc,CAAE,OAAOF,EAAS,QAAQ,GAAGE,EAAc,WAAW,CAAG,EAC3E,IAAI,kBAAmB,CAAE,OAAOF,EAAS,QAAQ,GAAGE,EAAc,gBAAgB,CAAG,EACrF,IAAI,mBAAoB,CAAE,OAAOF,EAAS,QAAQ,GAAGE,EAAc,iBAAiB,CAAG,EACvF,OAAOpD,EAAOC,EAAK,CAAE,OAAOiD,EAAS,QAAYlD,EAAOC,GAAOD,CAAM,CAAG,EACxE,IAAI,QAAS,CAAE,OAAOkD,EAAS,QAAQ,GAAGE,EAAc,MAAM,CAAI,EAClE,IAAI,YAAa,CAAE,OAAOF,EAAS,QAAQ,GAAGE,EAAc,UAAU,CAAG,EACzE,IAAI,kBAAmB,CAAE,OAAOF,EAAS,QAAQ,GAAGE,EAAc,gBAAgB,CAAG,EACrF,IAAI,kBAAmB,CAAE,OAAOF,EAAS,QAAQ,GAAGE,EAAc,gBAAgB,CAAG,EACrF,IAAI,wBAAyB,CAAE,OAAOF,EAAS,QAAQ,GAAGE,EAAc,sBAAsB,CAAG,EACjG,IAAI,QAAS,CAAE,OAAOD,EAAK,GAAGD,EAAS,MAAM,QAAQE,EAAc,GAAI,EAAE,CAAC,EAAE,CAAG,EAC/E,IAAI,QAAS,CAAE,OAAOF,EAAS,QAAQ,GAAGE,EAAc,MAAM,CAAG,EACjE,IAAI,gBAAiB,CAAE,OAAOF,EAAS,QAAQ,GAAGE,EAAc,cAAc,CAAG,CACnF,EACA,WAAY,GACZ,aAAc,EAChB,CACF,CCpMA,IAAOC,GAAQC,GAETC,GAAe,2FAErB,SAASD,GAAgB,CAAC,cAAAE,CAAa,EAAI,CAAC,EAAG,CAC7C,IAAIC,EAAyB,CAAE,EAC3BC,EAAW,IAAI,MAAMD,EAAwBE,EAASF,CAAsB,CAAC,EAC7EG,EAAcC,EAAeL,CAAa,EAC1CM,EAAU,CAACF,CAAW,EACpBG,EAAkB,CAAC,aAAc,GAAO,WAAY,EAAK,EAE/D,cAAO,iBAAkBN,EAAwB,CAC/C,OAAQ,CAAE,GAAGM,EAAiB,SAASC,EAAS,CAAE,OAAOC,EAAKC,GAAON,EAAa,GAAGI,CAAO,CAAC,CAAG,CAAE,EAClG,QAAS,CAAE,GAAGD,EAAiB,MAAMI,EAAOC,EAAK,CAAE,OAAOH,EAAKI,EAAaT,EAAaO,EAAOC,CAAG,CAAC,CAAG,CAAE,EACzG,OAAQ,CAAE,GAAGL,EAAiB,SAASO,EAAQ,CAAE,OAAOL,EAAKM,EAAOX,EAAa,GAAGU,CAAM,CAAC,CAAG,CAAE,EAChG,QAAS,CAAE,GAAGP,EAAiB,MAAMS,EAAK,CAAE,OAAOC,EAAQb,EAAaY,CAAG,CAAG,CAAE,EAChF,YAAa,CAAE,GAAGT,EAAiB,SAASO,EAAQ,CAAE,OAAOL,EAAKM,EAAOX,EAAa,GAAGU,CAAM,CAAC,CAAG,CAAE,EACrG,OAAQ,CAAE,GAAGP,EAAiB,MAAM,CAAE,MAAAW,EAAO,OAAAC,EAAQ,GAAAC,CAAG,EAAI,CAAC,EAAG,CAC5D,OAAOX,EAAKY,EAAOjB,EAAa,CAAE,MAAAc,EAAO,OAAAC,EAAQ,GAAAC,CAAG,CAAC,CAAC,CACxD,CACF,EACA,YAAa,CAAE,GAAGb,EAAiB,MAAMS,EAAK,CAAE,OAAOM,EAAYlB,EAAaY,CAAG,CAAG,CAAE,EACxF,OAAQ,CAAE,GAAGT,EAAiB,SAASC,EAAS,CAAE,OAAOC,EAAKc,EAAOnB,EAAa,GAAGI,CAAO,CAAC,CAAG,CAAE,EAClG,aAAc,CAAE,GAAGD,EAAiB,MAAM,CAAC,cAAAiB,EAAgB,GAAO,aAAAC,EAAe,CAAC,CAAC,EAAI,CAAC,EAAG,CACzF,OAAOhB,EAAKiB,EAAatB,EAAa,CAAC,aAAAqB,EAAc,cAAAD,CAAa,CAAC,CAAC,CACtE,CAAE,EACF,SAAU,CAAE,GAAGjB,EAAiB,OAAQ,CAAE,OAAOH,CAAa,CAAE,EAChE,SAAU,CAAE,GAAGG,EAAiB,MAAM,CAAC,GAAAa,EAAI,KAAAO,EAAO,GAAO,aAAAC,EAAe,EAAK,EAAI,CAAC,EAAG,CACnF,OAAOnB,EAAKoB,EAASzB,EAAa,CAAC,GAAAgB,EAAI,KAAAO,EAAM,aAAAC,CAAY,CAAC,CAAC,CAAG,CAAE,EAClE,QAAS,CAAE,GAAGrB,EAAiB,OAAQ,CAAE,OAAOH,CAAa,CAAE,EAC/D,SAAU,CAAE,GAAGG,EAAiB,MAAMuB,EAAQ,CAAE,OAAOC,EAAUD,CAAM,CAAG,CAAE,EAE5E,UAAW,CAAE,GAAGvB,EAAiB,KAAM,CAAE,OAAOE,EAAKuB,EAAY3B,EAAeD,CAAW,CAAC,CAAC,CAAG,CAAE,EAClG,MAAO,CAAE,GAAGG,EAAiB,KAAM,CAAE,OAAO0B,EAAM/B,EAAUgC,CAAa,CAAG,CAAE,EAC9E,QAAS,CAAE,GAAG3B,EAAiB,KAAM,CAAE,OAAOE,EAAK0B,EAAQ9B,EAAeD,CAAW,CAAC,CAAC,CAAG,CAAE,EAC5F,QAAS,CAAE,GAAGG,EAAiB,KAAM,CAAE,OAAOD,CAAS,EAAG,IAAIY,EAAO,CAAEZ,EAAUY,CAAO,CAAE,EAC1F,MAAO,CAAE,GAAGX,EAAiB,KAAM,CAAE,OAAOH,EAAY,OAAS,CAAG,CAAE,EACtE,SAAU,CAAE,GAAGG,EAAiB,KAAM,CAAE,OAAOH,EAAY,OAAS,EAAI,OAAWF,CAAU,CAAE,EAC/F,UAAW,CAAE,GAAGK,EAAiB,KAAM,CAAE,OAAOE,EAAK2B,EAAiB/B,EAAeD,CAAW,CAAC,CAAC,CAAG,CAAE,EACvG,MAAOiC,GAAYnC,EAAUO,CAAI,EACjC,UAAW,CAAE,GAAGF,EAAiB,KAAM,CAAE,OAAOE,EAAK6B,EAAYjC,EAAeD,CAAW,CAAC,CAAC,CAAG,CAAE,EAClG,QAAS,CAAE,GAAGG,EAAiB,KAAM,CAAE,OAAOE,EAAK8B,EAAQnC,CAAW,CAAC,CAAG,CAAE,EAC5E,cAAe,CAAE,GAAGG,EAAiB,KAAM,CAAE,OAAOE,EAAK8B,EAAQnC,EAAa,EAAI,CAAC,CAAG,CAAE,EACxF,QAAS,CAAE,GAAGG,EAAiB,KAAM,CAAE,OAAOiC,EAAQ,CAAG,CAAE,EAC3D,KAAM,CAAE,GAAGjC,EAAiB,KAAM,CAAE,OAAOkC,EAAS,CAAG,CAAE,EACzD,aAAc,CAAE,GAAGlC,EAAiB,KAAM,CAAE,OAAOE,EAAKiC,EAAarC,EAAeD,CAAW,CAAC,CAAC,CAAG,CAAE,EACtG,MAAO,CAAE,GAAGG,EACV,KAAM,CAAE,OAAOH,CAAa,EAC5B,IAAIc,EAAO,CACT,IAAMyB,EAAUtC,EAAea,CAAK,EAChCyB,EAAQ,SACVvC,EAAcuC,EACdrC,EAAQ,KAAKqC,CAAO,EAExB,CACF,CACF,CAAC,EAEDC,EAAoBV,CAAa,EAE1BhC,EAEP,SAASC,EAAS0C,EAAY,CAC5B,MAAO,CACL,IAAKC,EAAQC,EAAM,CACjB,OAAOA,KAAOF,EACVA,EAAWE,CAAG,EACdC,EAAc,OAAOD,CAAG,CAAC,EACvBE,EAAWF,CAAG,EACd,MACR,CACF,CACF,CAEA,SAASC,EAAcD,EAAK,CAC1B,MAAO,CAAChD,GAAa,KAAKgD,CAAG,GACxBA,KAAO,OAAO,SACrB,CAEA,SAASE,EAAWF,EAAK,CACvB,OAAO3C,EAAY2C,CAAG,YAAa,SAC/B,YAAYG,EAAM,CAClB,IAAMC,EAAS/C,EAAY2C,CAAG,EAAE,GAAGG,CAAI,EACvC,OAAOC,GAAQ,cAAgB,OAAS1C,EAAKL,EAAY2C,CAAG,EAAE,GAAGG,CAAI,CAAC,EAAIC,CAC5E,EAAI/C,EAAY2C,CAAG,CACvB,CAEA,SAASP,GAAU,CACjB,KAAMlC,EAAQ,OAAS,GAAKA,EAAQ,IAAI,EACxC,OAAAF,EAAcE,EAAQ,GAAG,EAAE,EACpBG,EAAKL,EAAa,EAAK,CAChC,CAEA,SAAS2B,EAAUqB,EAAO,CACxB,GAAI,CAACC,EAASD,CAAK,EACjB,OAAO3C,EAAKL,EAAa,EAAK,EAGhC,IAAMkD,EAAahD,EAAQ,OAE3B,OAAI8C,GAASE,GAAcF,EAAQ,GACjC9C,EAAUA,EAAQ,MAAM,EAAG,CAAC,EAC5BF,EAAcE,EAAQ,GAAG,EAAE,EACpBG,EAAKH,EAAQ,GAAG,EAAE,EAAG,EAAK,IAGnCA,EAAUA,EAAQ,MAAM,EAAGgD,EAAaF,CAAK,EAE7ChD,EAAcE,EAAQ,GAAG,EAAE,EACpBG,EAAKL,EAAa,EAAK,EAChC,CAEA,SAASqC,GAAW,CAClB,OAAInC,EAAQ,SAAW,EACdG,EAAKH,EAAQ,CAAC,CAAC,GAExBA,EAAQ,IAAI,EACZF,EAAcE,EAAQ,GAAG,EAAE,EACpBG,EAAKL,EAAa,EAAK,EAChC,CAEA,SAASK,EAAK0C,EAAQI,EAAc,GAAM,CAExC,OADgBnD,IAAgB+C,GACrBI,GAAejD,EAAQ,KAAK6C,CAAM,EAC7C/C,EAAc+C,EACPjD,CACT,CAEA,SAAS0C,EAAoBV,EAAe,CAC1C,OAAO,QAAQA,CAAa,EAAE,QAAQ,CAAC,CAACsB,EAAYC,CAAe,IAAM,CACvE,GAAM,CAAC,WAAAC,EAAY,OAAAC,EAAQ,SAAAC,CAAQ,EAAIH,EACjCI,EAAe,GAKrB,OAAO,eAAe5D,EAAwBuD,EAJ3BI,EACf,CAAE,KAAM,CAAE,OAAOnD,EAAKkD,EAAOzD,CAAQ,EAAE,KAAK,CAAG,EAAG,WAAAwD,EAAY,aAAAG,CAAa,EAC3E,CAAE,SAASX,EAAM,CAAE,OAAOzC,EAAKkD,EAAOzD,EAAU,GAAGgD,CAAI,EAAE,KAAK,CAAG,EAAG,WAAAQ,EAAY,aAAAG,CAAa,CAE7B,CACtE,CAAC,CACH,CACF,CC9JA,IAAMC,EAAgB,CAAC,EACjBC,EAAgBC,GAAoB,EAgB1CC,GAAmBC,EAAyBC,CAAa,EAEzD,SAASD,EAAwBE,KAAQC,EAAM,CAC7C,IAAMC,EAAWC,GAAe,CAAC,cAAeC,GAAsBJ,EAAK,GAAGC,CAAI,CAAC,CAAC,EACpF,cAAO,eAAgBC,EACrB,cAAe,CAAE,KAAM,CAAE,OAAOJ,CAAyB,EAAG,WAAY,EAAK,CAC/E,EACO,OAAO,OAAOI,CAAQ,CAC/B,CAEA,SAASG,EAAMH,EAAU,CACvB,IAAMI,EAAcR,EAAwBI,EAAS,KAAK,EAC1D,OAAAI,EAAY,QAAU,CAAC,GAAGJ,EAAS,OAAO,EACnCI,CACT,CAEA,SAASF,GAAsBJ,KAAQC,EAAM,CAC3C,OAAOD,GAAK,IACN,OAAO,IAAI,CAAE,IAAKA,CAAI,EAAG,GAAGC,CAAI,EAChCM,EAAeP,CAAG,EAAE,OAASA,EAAM,EAC3C,CAEA,SAASO,EAAeC,EAAQ,CAC9B,OAAOA,GAAQ,OAAUA,GAAQ,cAAgB,QAAUA,GAAW,EACxE,CAEA,SAASC,GAAUC,EAAMC,EAAMC,EAAkB,CAC/C,OAAOF,IAAS,QAAUE,EACtBD,GAAM,cAAgBb,GAA2Ba,GAAM,cAAgBD,EACvEC,GAAM,cAAgBD,CAC5B,CAEA,SAASG,EAAUH,EAAMI,EAAOF,EAAmB,GAAM,CACvD,OAAO,MAAM,QAAQE,CAAK,GAAKA,EAAM,OAAS,GAAK,CAACA,EAAM,KAAKC,GAAKN,GAAUC,EAAMK,EAAGH,CAAgB,CAAC,CAC1G,CAEA,SAASI,EAASF,EAAO,CACvB,OAAOA,GAAO,cAAgB,QAAU,CAAC,OAAO,MAAMA,CAAK,CAC7D,CAEA,SAASG,GAAiBC,EAAc,CACtC,IAAMC,EAAarB,EAAwBsB,GAAO,CAAC,EAC7CC,EAAc,CAClB,MAAO,gBACP,MAAO,mBACP,SAAU,6BACV,MAAO,qCACT,EAEA,OAAOF,EAAW,MAAM,IAAI,EACzB,OACC,OAAO,QAAQ,OAAO,0BAA0BA,CAAU,CAAC,EAC1D,KAAK,CAAC,CAACG,CAAI,EAAG,CAACC,CAAI,IAAMD,EAAK,cAAcC,CAAI,CAAC,EACjD,IAAI,CAAC,CAACC,EAAKC,CAAS,IAAM,CACzB,IAAMC,EAAc,CAACR,EAAa,KAAKS,GAAKA,IAAMH,CAAG,EAC/CI,EAAW,QAASH,EACpBI,EAAW,UAAWJ,EACtBK,EAAWN,KAAO,OAAO,UACzBO,EAAe,CAACD,GAAYN,KAAOH,EACnCW,EAASR,KAAOzB,EAAgB,YAAc,GAC9CkC,EAASL,GAAYF,EAAc,mBAAmBM,CAAM,GAAK,SACjEE,EAASL,GAAYH,EAAc,mBAAmBM,CAAM,GAAK,SACjEG,EAASL,GAAY,GAAGL,EAAU,IAAM,SAAW,QAAQ,cAEjE,OAAQ,GAAM,CACV,KAAKM,EAAc,OAAOK,EAAUZ,EAAKH,EAAYG,CAAG,CAAC,EACzD,KAAKM,EAAU,OAAOM,EAAUZ,EAAKW,CAAM,EAC3C,KAAKN,EAAU,OAAOO,EAAUZ,EAAKU,CAAM,EAC3C,KAAKN,EAAU,OAAOQ,EAAUZ,EAAKS,CAAM,EAC3C,QAAS,OAAOG,EAAUZ,EAAK,UAAU,CAC3C,CACF,CACF,CACF,CACJ,CAEA,SAASY,EAAUZ,EAAKY,EAAW,CACjC,MAAO,GAAGZ,CAAG,KAAKY,CAAS,GAC7B,CAEA,SAASvC,GAAmBwC,EAAMtC,EAAe,CAC/C,OAAO,KAAO,OAAO,IAAI,iBAAiB,EAC1C,OAAO,eAAe,OAAO,UAAW,OAAO,KAAM,CACnD,KAAM,CAAE,OAAOsC,EAAK,IAAI,CAAG,EAC3B,WAAY,GACZ,aAAc,EAAM,CAAC,EACvB,IAAMnB,EAAgB,2DAA2D,MAAM,GAAG,EAC1F,cAAO,iBAAiBmB,EAAM,CAC5B,OAAQ,CACN,KAAM,CAAE,OAAOA,EAAK,CAAG,EACvB,WAAY,EACd,EACA,YAAa,CACX,KAAM,CAAE,OAAOA,CAAM,EACrB,WAAY,EACd,EACA,OAAQ,CACN,MAAMrC,KAAQsC,EAAQ,CACpB,OAAOxC,EAAwBE,CAAG,EAAE,OAAO,GAAGsC,CAAM,CACtD,CACF,EACA,UAAW,CACT,MAAO,CAAE,KAAAC,EAAM,OAAAL,EAAQ,WAAAM,EAAa,GAAO,SAAAZ,EAAW,EAAM,EAAI,CAAC,EAAI,CACnE,GAAI9B,IAA0ByC,CAAI,EAChC,OAAO,QAAQ,MAAM,4BAA4BA,CAAI,mCAAmC,EAEtFA,GAAM,cAAgB,QAAUL,GAAQ,cAAgB,UAAYA,EAAO,OAAS,IACtFnC,EAAcwC,CAAI,EAAI,CAAC,OAAAL,EAAQ,WAAAM,EAAY,SAAAZ,CAAQ,EAEvD,CACF,EACA,KAAM,CACJ,KAAM,CAAE,OAAOX,GAAiBC,CAAY,CAAG,CACjD,EACA,KAAM,CACJ,KAAM,CACJ,OAAO,OAAO,KAAK,OAAO,0BAA0BpB,GAAyB,CAAC,EAAE,KAAM,CAAC2C,EAAEC,IAAMD,EAAE,cAAcC,CAAC,CAAE,EAC/G,IAAI3B,GAAK,CAAC,+BAA+B,KAAKA,CAAC,GAAKA,KAAKhB,EAAgB,GAAGgB,CAAC,YAAcA,CAAC,CACjG,CACF,EACA,UAAW,CACT,KAAM,CACJ,IAAM4B,EAAU,CAAC,GAAGC,GAAoB,CAAC,EACzC,cAAOD,EAAQ,GACR,OAAO,QAAQA,CAAO,EAC1B,KAAM,CAACF,EAAEC,IAAMD,EAAE,CAAC,EAAE,cAAcC,EAAE,CAAC,CAAC,CAAE,EACxC,OAAO,CAACG,EAAK,CAAClB,EAAGZ,CAAC,IAAM,CACvB,IAAM+B,EAAM/B,EAAE,cAAgB,SAAW,+BAAiC,KAAKA,EAAE,KAAK,oBAAoB,CAAC,IAC3G,MAAO,CAAC,GAAG8B,EAAK,oBAAoBlB,CAAC,GAAGmB,CAAG,EAAE,CAC/C,EAAG,CAAC,CAAC,CACT,CACF,EACA,MAAO,CACL,KAAM,CAAE,OAAOhD,EAAwBiD,EAAM,CAAC,CAAG,CACnD,EACA,aAAc,CACZ,MAAO,SAAS,CAAC,IAAAC,EAAK,iBAAAC,EAAkB,eAAAC,EAAgB,eAAAC,EAAgB,gBAAAC,CAAe,EAAI,CAAC,EAAG,CAC7F,OAAOtD,EAAwBuD,EAAa,CAAC,IAAAL,EAAK,iBAAAC,EAAkB,eAAAC,EAAgB,eAAAC,EAAgB,gBAAAC,CAAe,CAAC,CAAC,CACvH,CACF,EACA,OAAQ,CAAE,MAAOE,CAAa,CAChC,CAAC,EAEMjB,CACT,CAEA,SAASkB,GAASC,EAAUC,EAAW,CACrC,OAAO,IAAI,OAAOD,EAAS,QAAQ,gBAAiBf,GAAK,KAAKA,CAAC,EAAE,EAAGgB,CAAS,CAC/E,CAEA,SAASC,GAAUF,EAAU,CAC3B,OAAOA,EAAS,QAAQ,gBAAiBf,GAAK,KAAKA,CAAC,EAAE,CACxD,CAEA,SAASrB,IAAS,CAChB,OAAO,mWAAmW,QAAQ,UAAW,QAAQ,CACvY,CAEA,SAASwB,IAAsB,CAO7B,IAAMe,EAAQ,CACZ,SAAU,CAAC,IAAK,GAAG,EACnB,QAAS,CAAC,IAAK,GAAG,EAClB,kBAAmB,CAAC,SAAK,QAAG,EAC5B,YAAa,CAAC,SAAK,QAAG,EACtB,iBAAkB,CAAC,SAAK,QAAG,EAC3B,cAAe,CAAC,SAAK,QAAG,EACxB,oBAAqB,CAAC,SAAK,QAAG,EAC9B,cAAe,CAAC,SAAK,QAAG,EACxB,oBAAqB,CAAC,SAAK,QAAG,EAC9B,YAAa,CAAC,SAAK,QAAG,EACtB,iBAAkB,CAAC,SAAK,QAAG,EAC3B,kBAAmB,CAAC,SAAK,QAAG,EAC5B,OAlBa,CAACC,EAAOC,KACrBD,EAAQrD,EAAeqD,CAAK,EAC5BC,EAAMtD,EAAesD,CAAG,EACjB,CAACtD,EAAeqD,CAAK,EAAGC,EAAI,OAASA,EAAOD,CAAK,GAgBxD,OAAQ,CAAC,IAAK,GAAG,EACjB,WAAY,CAAC,OAAK,MAAG,EACrB,iBAAkB,CAAC,OAAK,MAAG,EAC3B,iBAAkB,CAAC,SAAK,QAAG,EAC3B,uBAAwB,CAAC,SAAK,QAAG,EACjC,OAAQ,CAAC,IAAK,GAAG,EACjB,eAAgB,CAAC,IAAK,GAAG,CAC3B,EACME,EAAeJ,GAAU,CAAC,GAAG,IAAI,IACrC,OAAO,OAAOC,CAAK,EAClB,OAAO5C,GAAK,MAAM,QAAQA,CAAC,CAAC,EAC5B,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EACpB,OAAA4C,EAAM,GAAK,OAAO,KAAKG,CAAY,MAAMA,CAAY,KAAM,GAAG,EACvDH,CACT,CCrNA,IAAMI,GAAoBC",
6
- "names": ["randomString", "uuid4", "randomStringGeneratorFactory", "randomStringGeneratorFactory", "hasCrypto", "checkBrowserCrypto", "getRandomValue", "randomNr", "min", "max", "range", "start", "len", "reMap", "_", "i", "map2Chrs", "v", "symbols", "symRE", "shuffle", "array", "ri", "UC", "LC", "allChars", "getChars2Use", "use", "acc", "key", "value", "uuid4", "strTest", "strFound", "numbers", "alphaSwap", "chars", "idx", "randomString", "includeUppercase", "includeNumbers", "includeSymbols", "startAlphabetic", "chrs2Use", "defaultInterpolator", "interpolateFactory", "interpolateFactory", "defaultReplacer", "str", "tokens", "interpolate", "processTokens", "invalidate", "key", "keyExists", "isStringOrNumber", "value", "replacement", "token", "isValid", "getReplacerLambda", "args", "replacementObject", "a", "replace", "convertTokensFromArrayValues", "tokenObject", "converted", "v", "i", "isMultiLineWithArrays", "regExpFromMultilineStringFactory_default", "createRegExp", "str", "args", "regExp", "err", "flags", "resolveFlags", "regexStr", "raw", "a", "v", "i", "line", "checkAndRun", "string", "fn", "or", "getStringValue", "format", "tokens", "defaultInterpolator", "ucFirst", "surroundWith", "start", "end", "isArrayOf", "toDashedNotation", "a", "toSnakeCase", "wordsFirstUp", "acc", "v", "toCamelcase", "l", "str", "i", "truncate", "at", "html", "wordBoundary", "subString", "endwith", "boundary", "trimAll", "keepLines", "lines", "line", "replaceWords", "replacements", "caseSensitive", "replacements2Array", "cando", "modifiers", "initial", "replacement", "re", "escapeRE", "indexOf", "findMe", "fromIndex", "isNumber", "index", "lastIndexOf", "beforeIndex", "insert", "value", "values", "valuesMaybeValue", "prefix", "strings", "append", "strings2Append", "quotGetters", "instance", "wrap", "quotingStyles", "extensions_default", "instanceCreator", "deprecatedRE", "initialstring", "customStringExtensions", "instance", "getTraps", "actualValue", "getStringValue", "history", "descriptorProps", "strings", "wrap", "append", "start", "end", "surroundWith", "tokens", "format", "str", "indexOf", "value", "values", "at", "insert", "lastIndexOf", "prefix", "caseSensitive", "replacements", "replaceWords", "html", "wordBoundary", "truncate", "nSteps", "undoSteps", "toCamelcase", "clone", "customMethods", "ucFirst", "toDashedNotation", "quotGetters", "toSnakeCase", "trimAll", "undoAll", "undoLast", "wordsFirstUp", "nwValue", "injectCustomMethods", "extensions", "target", "key", "canWrapNative", "wrapNative", "args", "result", "steps", "isNumber", "historyLen", "pushHistory", "methodName", "methodContainer", "enumerable", "method", "isGetter", "configurable", "customMethods", "quotingStyles", "defineQuotingStyles", "createExtendedCTOR", "CustomStringConstructor", "customMethods", "str", "args", "instance", "extensions_default", "resolveTemplateString", "clone", "newInstance", "getStringValue", "string", "checkType", "type", "item", "includeInstances", "isArrayOf", "value", "v", "isNumber", "getSWInformation", "notChainable", "firstLines", "decode", "plainValues", "keyA", "keyB", "key", "descriptr", "isChainable", "k", "isGetter", "isMethod", "isNative", "isPlainValue", "custom", "getter", "method", "native", "infoValue", "ctor", "tokens", "name", "enumerable", "a", "b", "qStyles", "defineQuotingStyles", "acc", "val", "uuid4", "len", "includeUppercase", "includeNumbers", "includeSymbols", "startAlphabetic", "randomString", "regExpFromMultilineStringFactory_default", "escapeRE", "reString", "modifiers", "escape4RE", "quots", "start", "end", "regExpValues", "defaultStringCTOR", "CustomStringConstructor"]
4
+ "sourcesContent": ["/* node:coverage disable */\r\n/* For StringWeaver tests we are not interested in coverage for this file */\r\nconst { randomString, uuid4 } = randomStringGeneratorFactory();\r\nexport { randomString as default, randomString, uuid4 };\r\n\r\nfunction randomStringGeneratorFactory() {\r\n const hasCrypto = checkBrowserCrypto();\r\n const getRandomValue = () => hasCrypto\r\n ? [...crypto.getRandomValues(new Uint32Array(1))].shift() / 2**32\r\n : Math.random();\r\n const randomNr = ({min = 0, max = Number.MAX_SAFE_INTEGER} = {}) =>\r\n Math.floor( getRandomValue() * (max - min + 1) + min );\r\n const range = (start = 0, len = 10, reMap) => (reMap || []) instanceof Function\r\n ? [...Array(len)].map((_, i) => start + i).map(reMap)\r\n : [...Array(len)].map((_, i) => start + i);\r\n const map2Chrs = v => String.fromCharCode(v);\r\n const symbols = `!?@#$%^&*=+_;-`.split(``);\r\n const symRE = RegExp(`[${symbols.map(v => `\\\\${v}`).join(``)}]`, `g`);\r\n const shuffle = array => {\r\n let i = array.length;\r\n while (i--) {\r\n const ri = randomNr( { max: i } );\r\n [array[i], array[ri]] = [array[ri], array[i]];\r\n }\r\n \r\n return array;\r\n };\r\n const UC = shuffle(range(65, 26, map2Chrs));\r\n const LC = shuffle(range(97, 26, map2Chrs));\r\n const UCLC = shuffle(UC.concat(LC));\r\n const allChars = { UCLC, UC, LC, Nrs: shuffle(range()), Sym: shuffle(symbols), };\r\n const getChars2Use = use => Object.entries(use)\r\n .reduce( (acc, [key, value]) => value ? [...acc, ...allChars[key]] : acc, LC );\r\n \r\n function checkBrowserCrypto() {\r\n try { return window && `crypto` in window }\r\n catch(_) { return false; }\r\n }\r\n \r\n function uuid4() {\r\n // Note: randomUUID only in secure context (https)\r\n return hasCrypto && crypto.randomUUID\r\n ? crypto.randomUUID()\r\n : [...new Uint8Array(16)]\r\n .map(_ => randomNr({max: 255}))\r\n .map( (v, i) => `${\r\n (i === 8 ? v & 0b00111111 | 0b10000000 : i === 6 ? v & 0b00001111 | 0b01000000 : v)\r\n .toString(16).padStart(2, `0`)}${~[3,5,7,9].indexOf(i) ? `-` : ``}` )\r\n .join(``);\r\n }\r\n \r\n function strTest(strFound, numbers, symbols) {\r\n return /[a-z]/i.test(strFound) && (\r\n numbers && symbols ? /\\d/.test(strFound) && symRE.test(strFound)\r\n : numbers ? /\\d/.test(strFound)\r\n : symbols ? symRE.test(strFound)\r\n : true);\r\n }\r\n \r\n function alphaSwap(strFound) {\r\n const chars = [...strFound];\r\n const idx = chars.findIndex(v => /[a-z]/i.test(v));\r\n [chars[0], chars[idx]] = [chars[idx], chars[0]];\r\n return chars.join(``);\r\n }\r\n \r\n function randomString( {len = 12, includeUppercase = true, includeNumbers, includeSymbols, startAlphabetic} = {} ) {\r\n len = len < 6 ? 6 : len;\r\n let chrs2Use = shuffle( getChars2Use( { UC: includeUppercase, Nrs: includeNumbers, Sym: includeSymbols } ) );\r\n \r\n while (chrs2Use.length < len) { chrs2Use = [...chrs2Use, ...shuffle(chrs2Use)]; }\r\n \r\n let strFound = chrs2Use.slice(0, len).join(``);\r\n \r\n if (!(includeNumbers || includeSymbols)) { return strFound; }\r\n \r\n for (let i = 0; i < chrs2Use.length; i += 1) {\r\n strFound = chrs2Use.slice(i, i + len).join(``);\r\n \r\n if (strTest(strFound, includeNumbers, includeSymbols)) {\r\n return startAlphabetic && !/^[a-z]/i.test(strFound) ? alphaSwap(strFound) : strFound;\r\n }\r\n }\r\n \r\n return randomString({len, includeUppercase, includeNumbers, includeSymbols, startAlphabetic});\r\n }\r\n \r\n return { randomString, uuid4 };\r\n}\r\n", "/* node:coverage disable */\r\n/* For StringWeaver tests we are not interested in coverage for this file */\r\n\r\nconst defaultInterpolator = interpolateFactory();\r\nexport {defaultInterpolator as default, interpolateFactory};\r\n\r\n/**\r\n * Factory function to create an interpolate function with a default replacer.\r\n * @param {string} defaultReplacer - Default value to use for missing tokens.\r\n * @returns {Function} - The interpolation function.\r\n */\r\nfunction interpolateFactory(defaultReplacer = \"\") {\r\n defaultReplacer = defaultReplacer?.constructor === String ? defaultReplacer : \"\";\r\n \r\n /**\r\n * Main interpolation function.\r\n * @param {string} str - The string with placeholders.\r\n * @param {...object} tokens - Objects containing replacement values.\r\n * @returns {string} - The interpolated string.\r\n */\r\n return function(str, ...tokens) {\r\n return interpolate(str, processTokens(tokens));\r\n }\r\n \r\n /**\r\n * Handle invalid keys by returning the default replacer or the key in braces.\r\n * @param {string} key - The placeholder key.\r\n * @param {boolean} keyExists - Flag indicating if the key exists in the token.\r\n * @returns {string} - The replacement value.\r\n */\r\n function invalidate(key, keyExists) {\r\n if (keyExists && defaultReplacer.length > 0) {\r\n return String(defaultReplacer);\r\n }\r\n \r\n return `{${key}}`;\r\n }\r\n \r\n /**\r\n * determine if [value] is a String or Number\r\n * @param {any} value\r\n * @returns {boolean}\r\n */\r\n function isStringOrNumber(value ) {\r\n return value?.constructor === String || value?.constructor === Number && !Number.isNaN(value);\r\n }\r\n \r\n /**\r\n * Get the replacement value for a key from the token.\r\n * @param {string} key - The placeholder key.\r\n * @param {object} token - The token object containing replacement values.\r\n * @returns {string} - The replacement value.\r\n */\r\n function replacement(key, token) {\r\n const isValid = key in token;\r\n return isValid && isStringOrNumber(token[key]) ? String(token[key]) : invalidate(key, isValid);\r\n }\r\n \r\n /**\r\n * Create a lambda function for replacing placeholders in the string.\r\n * @param {object<string, string>} token - The token object containing replacement values.\r\n * @returns {Function} - The replacer lambda function.\r\n */\r\n function getReplacerLambda(token) {\r\n return (...args) => {\r\n const replacementObject = args.find(a => a.key);\r\n return replacement((replacementObject ? replacementObject.key : `_`), token);\r\n };\r\n }\r\n \r\n /**\r\n * Replace placeholders in the string with values from the token.\r\n * @param {string} str - The string with placeholders.\r\n * @param {object} token - The token object containing replacement values.\r\n * @returns {string} - The interpolated string.\r\n */\r\n function replace(str, token) {\r\n return str.replace(/\\{(?<key>[a-z_\\d]+)}/gim, getReplacerLambda(token));\r\n }\r\n \r\n /**\r\n * Convert token object to array of token Objects\r\n * when it's values are arrays of values.\r\n * @param {object} tokenObject - The token object containing arrays of values.\r\n * @returns {object[]} - Array of token objects.\r\n */\r\n /* node:coverage disable (internal method, not covered by tests)*/\r\n function convertTokensFromArrayValues(tokenObject) {\r\n const converted = [];\r\n \r\n Object.entries(tokenObject).forEach(([key, value]) => {\r\n value.forEach((v, i) => (converted[i] ??= {}, converted[i][key] = v));\r\n });\r\n \r\n return converted;\r\n }\r\n \r\n /**\r\n * Check if single token and its values are arrays.\r\n * @param {object[]} tokens - The tokens to check.\r\n * @returns {boolean} - True if tokens contains one Object\r\n * and all it's values are of type Array.\r\n */\r\n function isMultiLineWithArrays(tokens) {\r\n return tokens.length === 1 && Object.values(tokens[0]).every(Array.isArray);\r\n }\r\n \r\n /**\r\n * Process tokens to handle multi-line formats.\r\n * @param {object[]} tokens - The tokens to process.\r\n * @returns {object[]} - Processed tokens.\r\n */\r\n function processTokens(tokens) {\r\n return isMultiLineWithArrays(tokens) ? convertTokensFromArrayValues(tokens[0]) : tokens;\r\n }\r\n \r\n /**\r\n * Interpolate the string with the given tokens.\r\n * @param {string} str - The string with placeholders.\r\n * @param {object[]} tokens - The tokens containing replacement values.\r\n * @returns {string} - The interpolated string.\r\n */\r\n function interpolate(str, tokens) {\r\n return !tokens?.length ? str : tokens\r\n .filter(token => token)\r\n .map(token => token?.constructor === Object ? replace(str, token) : ``)\r\n .join(``);\r\n }\r\n}\r\n", "/* node:coverage disable */\r\n/* For StringWeaver tests we are not interested in coverage for this file */\r\n\r\nexport default createRegExp\r\n\r\nfunction createRegExp(str, ...args) {\r\n args = !str.raw ? [args] : args;\r\n try {\r\n return regExp(str, ...args);\r\n } catch (err) {\r\n const flags = resolveFlags();\r\n const raw = str.raw || str; \r\n return `Error creating Regular Expression from string \"${raw}\" with flags ${flags}` +\r\n `\\nRegExp error message: \"${err.message}\"`;\r\n }\r\n}\r\n\r\nfunction resolveFlags(...args) {\r\n return args.length > 0\r\n ? Array.isArray(args.slice(-1))\r\n ? args.pop().join(``) : args.join(``) : ``;\r\n}\r\n\r\nfunction regExp(regexStr, ...args) {\r\n const flags = resolveFlags(...args);\r\n args = [];\r\n const raw = regexStr.raw || [regexStr];\r\n \r\n return new RegExp(\r\n (args.length &&\r\n raw.reduce( (a, v, i ) => a.concat(args[i-1] || ``).concat(v), ``) ||\r\n raw?.join(``))\r\n .split(`\\n`)\r\n .map( line => line.replace(/\\s|\\/\\/.*$/g, ``).trim().replace(/(@s!)/g, ` `) )\r\n .join(``), flags);\r\n}\r\n", "import {\r\n isArrayOf,\r\n isNumber,\r\n quotingStyles,\r\n getStringValue,\r\n escapeRE,\r\n customMethods,\r\n interpolate,\r\n clone } from \"./genericMethods.js\";\r\n\r\nexport {\r\n format,\r\n ucFirst,\r\n truncate,\r\n trimAll,\r\n replaceWords,\r\n indexOf,\r\n lastIndexOf,\r\n insert,\r\n append,\r\n isNumber,\r\n prefix,\r\n getStringValue,\r\n toCamelcase,\r\n wordsFirstUp,\r\n toDashedNotation,\r\n quotGetters,\r\n surroundWith,\r\n toSnakeCase,\r\n customMethods,\r\n clone,\r\n};\r\n\r\nfunction checkAndRun(string, fn, or) {\r\n string = getStringValue(string);\r\n return string.length > 0 ? fn(string) : or || string;\r\n}\r\n\r\nfunction ucFirst(string) {\r\n return checkAndRun(string, () => `${string[0].toUpperCase()}${string.slice(1)}`);\r\n}\r\n\r\nfunction format(string, ...tokens) {\r\n return checkAndRun(string, () => `${interpolate(string, ...tokens)}`);\r\n}\r\n\r\nfunction surroundWith(string, start, end) {\r\n if (!start && !end) {\r\n return string;\r\n }\r\n [start, end] = isArrayOf(String, [start, end ?? ``]) ? [start, end] : [``, ``];\r\n return `${start}${string}${end || start}`;\r\n}\r\n\r\nfunction toDashedNotation(string) {\r\n return checkAndRun(string, () =>\r\n string\r\n .replace(/\\s/g, '')\r\n .replace(/[A-Z]/g, a => `-${a.toLowerCase()}`)\r\n .replace(/-{2,}/g, `-`)\r\n .replace(/[^a-z-]/g, ``)\r\n .replace(/^-|-$/, ``)\r\n );\r\n}\r\n\r\nfunction toSnakeCase(string) {\r\n return checkAndRun(string, () =>\r\n string\r\n .replace(/\\s/g, '')\r\n .replace(/[A-Z]/g, a => `_${a.toLowerCase()}`)\r\n .replace(/_{2,}/g, `_`)\r\n .replace(/[^a-z_]/g, ``)\r\n .replace(/^_|_$/, ``)\r\n );\r\n}\r\n\r\nfunction wordsFirstUp(string) {\r\n return checkAndRun(string, () => [...string.toLowerCase()].slice(1).reduce( (acc, v) =>\r\n acc + ( !/\\p{L}|[-']/u.test(acc.at(-1)) ? v.toUpperCase() : v.toLowerCase() ),\r\n string[0].toUpperCase()\r\n ));\r\n}\r\n\r\nfunction toCamelcase(string) {\r\n return checkAndRun(string, () =>\r\n string.toLowerCase()\r\n .trim()\r\n .split(/[- ]/)\r\n .filter(l => l && l.length > 0)\r\n .map( (str, i) => i > 0 && `${ucFirst(str)}`|| str)\r\n .join(``)\r\n );\r\n}\r\n\r\nfunction getBoundary(string) {\r\n const match = [...string.matchAll(/\\p{Pe}|\\p{Z}/gu)].at(-1);\r\n return match?.index ?? string.length;\r\n}\r\n\r\nfunction truncate(string, {at, html = false, wordBoundary = false} = {} ) {\r\n html = html?.constructor === Boolean && html || false;\r\n wordBoundary = wordBoundary?.constructor === Boolean && wordBoundary || false;\r\n return checkAndRun(string, () => {\r\n if (string.length <= at) { return string; }\r\n\r\n const subString = string.slice(0, at - 1);\r\n const endwith = html ? \"&hellip;\" : `...`;\r\n const boundary = wordBoundary\r\n ? getBoundary(subString)\r\n : subString.length;\r\n\r\n return (wordBoundary\r\n ? subString.slice(0, boundary+1).trim()\r\n : subString) + endwith;\r\n }\r\n );\r\n}\r\n\r\nfunction trimAll(string, keepLines = false) {\r\n keepLines = keepLines?.constructor === Boolean && keepLines || false;\r\n return checkAndRun(string, () => {\r\n const lines = string.replace(/\\n/gm, `#LF#`)\r\n .split(/#LF#/)\r\n .map(line => line.trim().replace(/\\s{2,}/g, a => a[0]) );\r\n return keepLines\r\n ? lines.join(`#LF#`).replace(/#LF#/g, `\\n`).trim()\r\n : lines.filter(l => l.length > 0).join(`\\n`);\r\n });\r\n}\r\n\r\nfunction replaceWords(string, { replacements = {}, caseSensitive = false} = {}) {\r\n string = getStringValue(string);\r\n let replacements2Array = Object.entries(replacements).flat();\r\n const cando = isArrayOf(String, replacements2Array) && caseSensitive?.constructor === Boolean;\r\n const modifiers = `g${!caseSensitive ? 'i' : ''}`;\r\n\r\n if (cando) {\r\n replacements2Array = replacements2Array.map(v => getStringValue(v)).filter(v => replacements2Array.length > 0);\r\n\r\n if (replacements2Array.length) {\r\n while (replacements2Array.length) {\r\n const [initial, replacement] = [replacements2Array.shift(), replacements2Array.shift()];\r\n const re = escapeRE(initial, modifiers);\r\n string = string.replace(re, replacement);\r\n }\r\n }\r\n }\r\n\r\n return string;\r\n}\r\n\r\n// SEE https://youtu.be/99Zacm7SsWQ?t=2101\r\nfunction indexOf(string, findMe, fromIndex = 0) {\r\n string = getStringValue(string);\r\n fromIndex = isNumber(fromIndex) && fromIndex || 0;\r\n const index = string.indexOf(findMe, fromIndex || 0);\r\n return index < 0 ? undefined : index;\r\n}\r\n\r\nfunction lastIndexOf(string, findMe, beforeIndex = 0) {\r\n string = getStringValue(string);\r\n beforeIndex = isNumber(beforeIndex) && beforeIndex || string.length;\r\n const index = string.lastIndexOf(findMe, beforeIndex);\r\n return index < 0 ? undefined : index;\r\n}\r\n\r\nfunction insert(string, { value, values, at = 0 } = {}) {\r\n string = getStringValue(string);\r\n at = isNumber(at) && at || 0;\r\n const valuesMaybeValue = getStringValue(values);\r\n values = getStringValue(value).length\r\n ? value\r\n : valuesMaybeValue.length\r\n ? valuesMaybeValue\r\n : isArrayOf(String, values)\r\n ? values.map(v => getStringValue(v)).join(``)\r\n : [];\r\n\r\n return values.length <= 1\r\n ? string\r\n : string.length === 0\r\n ? `${values}${string}`\r\n : `${string.slice(0, at)}${values}${string.slice(at)}`;\r\n}\r\n\r\nfunction prefix(string, ...strings) {\r\n strings = isArrayOf(String, strings) && strings;\r\n return strings ? insert(getStringValue(string), {values: strings, at: 0}) : getStringValue(string);\r\n}\r\n\r\nfunction append(string, ...strings2Append) {\r\n strings2Append = isArrayOf(String, strings2Append) && strings2Append;\r\n\r\n if (strings2Append && strings2Append.length > 0) {\r\n return `${getStringValue(string)}`.concat(strings2Append.join(``))\r\n }\r\n\r\n return getStringValue(string);\r\n}\r\n\r\nfunction quotGetters(instance, wrap) {\r\n return {\r\n value: {\r\n get backtick() { return instance.enclose(...quotingStyles.backtick); },\r\n get bracket() { return instance.enclose(...quotingStyles.bracket); },\r\n get curlyDouble() { return instance.enclose(...quotingStyles.curlyDouble); },\r\n get curlyDoubleInward() { return instance.enclose(...quotingStyles.curlyDoubleInward); },\r\n get curlyDoubleEqual() { return instance.enclose(...quotingStyles.curlyDoubleEqual); },\r\n get curlyLHDoubleInward() { return instance.enclose(...quotingStyles.curlyLHDoubleInward); },\r\n get curlyLHSingle() { return instance.enclose(...quotingStyles.curlyLHSingle); },\r\n get curlyLHSingleInward() { return instance.enclose(...quotingStyles.curlyLHSingleInward); },\r\n get curlySingle() { return instance.enclose(...quotingStyles.curlySingle); },\r\n get curlySingleEqual() { return instance.enclose(...quotingStyles.curlySingleEqual); },\r\n get curlySingleInward() { return instance.enclose(...quotingStyles.curlySingleInward); },\r\n custom(start, end) { return instance.enclose(...[start, end ?? start]); },\r\n get double() { return instance.enclose(...quotingStyles.double); },\r\n get guillemets() { return instance.enclose(...quotingStyles.guillemets); },\r\n get guillemetsInward() { return instance.enclose(...quotingStyles.guillemetsInward); },\r\n get guillemetsSingle() { return instance.enclose(...quotingStyles.guillemetsSingle); },\r\n get guillemetsSingleInward() { return instance.enclose(...quotingStyles.guillemetsSingleInward); },\r\n get remove() { return wrap(`${instance.value.replace(quotingStyles.re, ``)}`); },\r\n get single() { return instance.enclose(...quotingStyles.single); },\r\n get squareBrackets() { return instance.enclose(...quotingStyles.squareBrackets); },\r\n },\r\n enumerable: false,\r\n configurable: false,\r\n };\r\n}\r\n", "import {\r\n format,\r\n ucFirst,\r\n truncate,\r\n trimAll,\r\n replaceWords,\r\n indexOf,\r\n lastIndexOf,\r\n insert,\r\n append,\r\n prefix,\r\n getStringValue,\r\n quotGetters,\r\n surroundWith,\r\n toCamelcase,\r\n wordsFirstUp,\r\n toDashedNotation,\r\n toSnakeCase,\r\n customMethods,\r\n isNumber,\r\n clone,\r\n} from \"./instanceMethods.js\";\r\n\r\nexport default instanceCreator;\r\n\r\nconst deprecatedRE = /symbol|anchor|big|blink|bold|fixed|fontsize|fontcolor|italics|link|small|strike|sup|sub/i\r\n\r\nfunction instanceCreator({initialstring} = {}) {\r\n let customStringExtensions = { };\r\n let instance = new Proxy(customStringExtensions, getTraps(customStringExtensions));\r\n let actualValue = getStringValue(initialstring);\r\n let history = [actualValue];\r\n const descriptorProps = {configurable: false, enumerable: false};\r\n \r\n Object.defineProperties( customStringExtensions, {\r\n append: { ...descriptorProps, value(...strings) { return wrap(append(actualValue, ...strings)); } },\r\n enclose: { ...descriptorProps, value(start, end) { return wrap(surroundWith(actualValue, start, end)); } },\r\n format: { ...descriptorProps, value(...tokens) { return wrap(format(actualValue, ...tokens)); } },\r\n indexOf: { ...descriptorProps, value(str) { return indexOf(actualValue, str); } },\r\n interpolate: { ...descriptorProps, value(...tokens) { return wrap(format(actualValue, ...tokens)); } },\r\n insert: { ...descriptorProps, value({ value, values, at } = {}) { \r\n return wrap(insert(actualValue, { value, values, at })); \r\n } \r\n },\r\n lastIndexOf: { ...descriptorProps, value(str) { return lastIndexOf(actualValue, str); } },\r\n prefix: { ...descriptorProps, value(...strings) { return wrap(prefix(actualValue, ...strings)); } },\r\n replaceWords: { ...descriptorProps, value({caseSensitive = false, replacements = {}} = {}) {\r\n return wrap(replaceWords(actualValue, { replacements: replacements ?? {}, caseSensitive }));\r\n } },\r\n toString: { ...descriptorProps, value() { return actualValue; } },\r\n truncate: { ...descriptorProps, value({at, html = false, wordBoundary = false} = {}) {\r\n return wrap(truncate(actualValue, {at, html, wordBoundary})); } },\r\n valueOf: { ...descriptorProps, value() { return actualValue; } },\r\n undoLast: { ...descriptorProps, value(nSteps) { return undoSteps(nSteps); } },\r\n\r\n camelCase: { ...descriptorProps, get() { return wrap(toCamelcase(getStringValue(actualValue))); } }, \r\n clone: { ...descriptorProps, get() { return clone(instance, customMethods); } },\r\n firstUp: { ...descriptorProps, get() { return wrap(ucFirst(getStringValue(actualValue))); } },\r\n history: { ...descriptorProps, get() { return history; }, set(value) { history = value; } },\r\n empty: { ...descriptorProps, get() { return actualValue.length < 1; } },\r\n notEmpty: { ...descriptorProps, get() { return actualValue.length < 1 ? undefined: instance; } },\r\n kebabCase: { ...descriptorProps, get() { return wrap(toDashedNotation(getStringValue(actualValue))); } },\r\n quote: quotGetters(instance, wrap),\r\n snakeCase: { ...descriptorProps, get() { return wrap(toSnakeCase(getStringValue(actualValue))); } },\r\n trimAll: { ...descriptorProps, get() { return wrap(trimAll(actualValue)); } },\r\n trimAllKeepLF: { ...descriptorProps, get() { return wrap(trimAll(actualValue, true)); } },\r\n undoAll: { ...descriptorProps, get() { return undoAll(); } },\r\n undo: { ...descriptorProps, get() { return undoLast(); } },\r\n wordsUCFirst: { ...descriptorProps, get() { return wrap(wordsFirstUp(getStringValue(actualValue))); } },\r\n value: { ...descriptorProps, \r\n get() { return actualValue; }, \r\n set(value) {\r\n const nwValue = getStringValue(value);\r\n if (nwValue.length) {\r\n actualValue = nwValue;\r\n history.push(nwValue); \r\n }\r\n }\r\n },\r\n });\r\n \r\n injectCustomMethods(customMethods);\r\n \r\n return instance;\r\n \r\n function getTraps(extensions) {\r\n return {\r\n get( target, key ) {\r\n return key in extensions\r\n ? extensions[key]\r\n : canWrapNative(String(key))\r\n ? wrapNative(key)\r\n : undefined;\r\n },\r\n };\r\n }\r\n \r\n function canWrapNative(key) {\r\n return !deprecatedRE.test(key)\r\n && key in String.prototype;\r\n }\r\n \r\n function wrapNative(key) {\r\n return actualValue[key] instanceof Function\r\n ? function(...args) {\r\n const result = actualValue[key](...args); \r\n return result?.constructor === String ? wrap(actualValue[key](...args)) : result; \r\n } : actualValue[key];\r\n }\r\n \r\n function undoAll() {\r\n while(history.length > 1) { history.pop(); }\r\n actualValue = history.at(-1);\r\n return wrap(actualValue, false);\r\n }\r\n \r\n function undoSteps(steps) {\r\n if (!isNumber(steps)) {\r\n return wrap(actualValue, false); \r\n }\r\n \r\n const historyLen = history.length;\r\n \r\n if (steps >= historyLen || steps < 1) {\r\n history = history.slice(0, 1);\r\n actualValue = history.at(-1); \r\n return wrap(history.at(-1), false); \r\n }\r\n \r\n history = history.slice(0, historyLen - steps);\r\n \r\n actualValue = history.at(-1);\r\n return wrap(actualValue, false);\r\n }\r\n \r\n function undoLast() {\r\n if (history.length === 1) {\r\n return wrap(history[0]);\r\n }\r\n \r\n history.pop();\r\n actualValue = history.at(-1);\r\n return wrap(actualValue, false);\r\n }\r\n \r\n function wrap(result, pushHistory = true) {\r\n const changed = actualValue !== result;\r\n changed && pushHistory && history.push(result);\r\n actualValue = result;\r\n return instance;\r\n }\r\n \r\n function injectCustomMethods(customMethods) {\r\n Object.entries(customMethods).forEach(([methodName, methodContainer]) => {\r\n const {enumerable, method, isGetter} = methodContainer;\r\n const configurable = false\r\n const descriptor = isGetter\r\n ? { get() { return wrap(method(instance).value); }, enumerable, configurable }\r\n : { value(...args) { return wrap(method(instance, ...args).value); }, enumerable, configurable };\r\n \r\n Object.defineProperty(customStringExtensions, methodName, descriptor);\r\n });\r\n }\r\n}\r\n", "import {default as randomString, uuid4} from \"./Factories/randomStringFactory.js\";\r\nimport interpolate from \"./Factories/interpolateFactory.js\";\r\nimport createRegExp from \"./Factories/regExpFromMultilineStringFactory.js\";\r\nimport createInstance from \"./extensions.js\";\r\nconst customMethods = {};\r\nconst quotingStyles = defineQuotingStyles();\r\n\r\nexport {\r\n customMethods,\r\n CustomStringConstructor,\r\n isNumber, \r\n isArrayOf,\r\n defineQuotingStyles,\r\n getStringValue,\r\n escapeRE,\r\n resolveTemplateString,\r\n clone,\r\n interpolate,\r\n quotingStyles,\r\n};\r\n\r\ncreateExtendedCTOR(CustomStringConstructor, customMethods);\r\n\r\nfunction CustomStringConstructor(str, ...args) {\r\n const instance = createInstance({initialstring: resolveTemplateString(str, ...args)});\r\n Object.defineProperty( instance, \r\n `constructor`, { get() { return CustomStringConstructor; }, enumerable: false}\r\n );\r\n return Object.freeze(instance);\r\n}\r\n\r\nfunction resolveTemplateString(str, ...args) {\r\n return str?.raw\r\n ? String.raw({ raw: str }, ...args)\r\n : getStringValue(str).length ? str : \"\";\r\n}\r\n\r\nfunction checkType(type, item, includeInstances) {\r\n return type === String && includeInstances\r\n ? item?.constructor !== CustomStringConstructor && item?.constructor !== type\r\n : item?.constructor !== type;\r\n}\r\n\r\nfunction isArrayOf(type, value, includeInstances = true) {\r\n return Array.isArray(value) && value.length > 0 && !value.find(v => checkType(type, v, includeInstances));\r\n}\r\n\r\nfunction clone(instance) {\r\n const newInstance = CustomStringConstructor(instance.value);\r\n newInstance.history = [...instance.history];\r\n return newInstance;\r\n}\r\n\r\nfunction getStringValue(string) {\r\n return string?.value || (string?.constructor === String && string) || ``;\r\n}\r\n\r\nfunction isNumber(value) {\r\n return value?.constructor === Number && !Number.isNaN(value);\r\n}\r\n\r\nfunction escapeRE(reString, modifiers) {\r\n return new RegExp(reString.replace(/\\p{S}|\\p{P}/gu, a => `\\\\${a}`), modifiers);\r\n}\r\n\r\nfunction escape4RE(reString) {\r\n return reString.replace(/\\p{S}|\\p{P}/gu, a => `\\\\${a}`);\r\n}\r\n\r\nfunction infoValue(key, infoValue) {\r\n return `${key} (${infoValue})`;\r\n}\r\n\r\nfunction getPlainValues() {\r\n return {\r\n value: `getter/setter`,\r\n clone: `chainable getter`,\r\n notEmpty: `chainable getter|undefined`,\r\n quote: `Object. See [constructor].quoteInfo`,\r\n };\r\n}\r\n\r\nfunction getSWInformation(notChainable) {\r\n const firstLines = CustomStringConstructor(decode());\r\n const plainValues = getPlainValues();\r\n \r\n return firstLines.split(/\\n/)\r\n .concat(\r\n Object.entries(Object.getOwnPropertyDescriptors(firstLines))\r\n .sort(([keyA], [keyB]) => keyA.localeCompare(keyB))\r\n .map(([key, descriptr]) => {\r\n const isChainable = !notChainable.find(k => k === key);\r\n const isGetter = 'get' in descriptr;\r\n const isMethod = 'value' in descriptr;\r\n const isNative = key in String.prototype;\r\n const isPlainValue = !isNative && key in plainValues;\r\n const custom = key in customMethods ? ` *custom*` : ``;\r\n const getter = isGetter && isChainable ? `chainable getter${custom}` : `getter`;\r\n const method = isMethod && isChainable ? `chainable method${custom}` : `method`;\r\n const native = isNative && `${descriptr.get ? `getter` : `method`} (override)`;\r\n \r\n switch (true) {\r\n case isPlainValue: return infoValue(key, plainValues[key]);\r\n case isNative: return infoValue(key, native);\r\n case isMethod: return infoValue(key, method);\r\n case isGetter: return infoValue(key, getter); \r\n }\r\n }\r\n )\r\n );\r\n}\r\n\r\nfunction decode() {\r\n return atob`Rm9yIHRoZSByZWNvcmQ6CltjbV0gY2hhaW5hYmxlIGdldHRlcnMvbWV0aG9kcyBtb2RpZnkgdGhlIGluc3RhbmNlIHN0cmluZwpbY21dIGluZGV4T2Ygb3ZlcnJpZGVzIHJldHVybnMgW3VuZGVmaW5lZF0gaWYgbm90aGluZyB3YXMgZm91bmQgKHNvIG9uZSBjYW4gdXNlIFtsYXN0SV1pbmRleE9mKFtzb21lIHN0cmluZyB2YWx1ZV0pID8/IDAKW2NtXSBpbmNsdWRlcyBpbmZvcm1hdGlvbiBmb3IgY3VzdG9tIG1ldGhvZHMvZ2V0dGVycyBpZiBhcHBsaWNhYmxl`.replace(/\\[cm]/g, `\\u2714`);\r\n}\r\n\r\nfunction defineQuotingStyles() {\r\n // see https://en.wikipedia.org/wiki/Quotation_mark\r\n const quots = {\r\n backtick: [\"`\", \"`\"],\r\n bracket: [`{`, `}`],\r\n curlyDoubleInward: [`\u201D`, `\u201C`],\r\n curlyDouble: [`\u201C`, `\u201D`],\r\n curlyDoubleEqual: [`\u201C`, `\u201C`],\r\n curlyLHDouble: [`\u201E`, `\u201D`],\r\n curlyLHDoubleInward: [`\u201E`, `\u201C`],\r\n curlyLHSingle: [`\u201A`, `\u2019`],\r\n curlyLHSingleInward: [`\u201A`, `\u2018`],\r\n curlySingle: [`\u201B`, `\u2019`],\r\n curlySingleEqual: [`\u201B`, `\u201B`],\r\n curlySingleInward: [`\u2019`, `\u201B`],\r\n double: [`\"`, `\"`],\r\n guillemets: [`\u00AB`, `\u00BB`],\r\n guillemetsInward: [`\u00BB`, `\u00AB`],\r\n guillemetsSingle: [`\u2039`, `\u203A`],\r\n guillemetsSingleInward: [`\u203A`, `\u2039`],\r\n single: [`'`, `'`],\r\n squareBrackets: [`[`, `]`],\r\n };\r\n const regExpValues = escape4RE([...new Set(\r\n Object.values(quots)\r\n .filter(v => Array.isArray(v))\r\n .flat())].join(``));\r\n quots.re = RegExp(`^[${regExpValues}]|[${regExpValues}]$`, \"g\");\r\n\r\n return quots;\r\n}\r\n\r\n/* this function is not (directly) tested */\r\n/* node:coverage disable */\r\nfunction createExtendedCTOR(ctor, customMethods) {\r\n Symbol.toSB = Symbol.for(`toStringBuilder`);\r\n Object.defineProperty(String.prototype, Symbol.toSB, { \r\n get() { return ctor(this); }, \r\n enumerable: false,\r\n configurable: false });\r\n const notChainable = `constructor,history,indexOf,toString,value,valueOf,empty`.split(`,`);\r\n Object.defineProperties(ctor, {\r\n create: {\r\n get() { return ctor(); },\r\n enumerable: false\r\n },\r\n constructor: {\r\n get() { return ctor; },\r\n enumerable: false,\r\n },\r\n format: {\r\n value(str, ...tokens) {\r\n return CustomStringConstructor(str).format(...tokens);\r\n }\r\n },\r\n addCustom: {\r\n value( { name, method, enumerable = false, isGetter = false } = {} ) {\r\n if (CustomStringConstructor``[name]) {\r\n console.error(`addCustom: the property \"${name}\" exists and can not be redefined`);\r\n return `addCustom: the property \"${name}\" exists and can not be redefined`;\r\n }\r\n \r\n if (name?.constructor === String && method?.constructor === Function && method.length > 0) {\r\n customMethods[name] = {method, enumerable, isGetter};\r\n return `addCustom: the ${isGetter ? `getter` : `method`} named \"${name}\" is added`;\r\n }\r\n }\r\n },\r\n info: {\r\n get() { return getSWInformation(notChainable); }\r\n },\r\n keys: {\r\n get() { \r\n return Object.keys(Object.getOwnPropertyDescriptors(CustomStringConstructor``)).sort( (a,b) => a.localeCompare(b) )\r\n .map(v => !/constructor|toString|valueOf/.test(v) && v in customMethods ? `${v} *custom*` : v); \r\n }\r\n },\r\n quoteInfo: {\r\n get() {\r\n const qStyles = {...defineQuotingStyles()};\r\n delete qStyles.re;\r\n return Object.entries(qStyles)\r\n .sort( (a,b) => a[0].localeCompare(b[0]) )\r\n .reduce((acc, [k, v]) => {\r\n const val = v.constructor === Function ? `(start:string[, end:string])` : ` (${v.join(` [instance value] `)})`;\r\n return [...acc, `[instance].quote.${k}${val}`];\r\n }, []);\r\n }\r\n },\r\n uuid4: {\r\n get() { return CustomStringConstructor(uuid4()); }\r\n },\r\n randomString: {\r\n value: function({len, includeUppercase, includeNumbers, includeSymbols, startAlphabetic} = {}) {\r\n return CustomStringConstructor(randomString({len, includeUppercase, includeNumbers, includeSymbols, startAlphabetic})); \r\n }\r\n },\r\n regExp: { value: createRegExp }\r\n });\r\n \r\n return ctor;\r\n}\r\n/* node:coverage enable */\r\n", "import { CustomStringConstructor } from \"./src/genericMethods.js\";\r\nconst defaultStringCTOR = CustomStringConstructor;\r\n\r\nexport {defaultStringCTOR as default, CustomStringConstructor};\r\n"],
5
+ "mappings": "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",
6
+ "names": ["randomString", "uuid4", "randomStringGeneratorFactory", "randomStringGeneratorFactory", "hasCrypto", "checkBrowserCrypto", "getRandomValue", "randomNr", "min", "max", "range", "start", "len", "reMap", "_", "i", "map2Chrs", "v", "symbols", "symRE", "shuffle", "array", "ri", "UC", "LC", "allChars", "getChars2Use", "use", "acc", "key", "value", "uuid4", "strTest", "strFound", "numbers", "alphaSwap", "chars", "idx", "randomString", "includeUppercase", "includeNumbers", "includeSymbols", "startAlphabetic", "chrs2Use", "defaultInterpolator", "interpolateFactory", "interpolateFactory", "defaultReplacer", "str", "tokens", "interpolate", "processTokens", "invalidate", "key", "keyExists", "isStringOrNumber", "value", "replacement", "token", "isValid", "getReplacerLambda", "args", "replacementObject", "a", "replace", "convertTokensFromArrayValues", "tokenObject", "converted", "v", "i", "isMultiLineWithArrays", "regExpFromMultilineStringFactory_default", "createRegExp", "str", "args", "regExp", "err", "flags", "resolveFlags", "regexStr", "raw", "a", "v", "i", "line", "checkAndRun", "string", "fn", "or", "getStringValue", "ucFirst", "format", "tokens", "defaultInterpolator", "surroundWith", "start", "end", "isArrayOf", "toDashedNotation", "a", "toSnakeCase", "wordsFirstUp", "acc", "v", "toCamelcase", "l", "str", "i", "getBoundary", "truncate", "at", "html", "wordBoundary", "subString", "endwith", "boundary", "trimAll", "keepLines", "lines", "line", "replaceWords", "replacements", "caseSensitive", "replacements2Array", "cando", "modifiers", "initial", "replacement", "re", "escapeRE", "indexOf", "findMe", "fromIndex", "isNumber", "index", "lastIndexOf", "beforeIndex", "insert", "value", "values", "valuesMaybeValue", "prefix", "strings", "append", "strings2Append", "quotGetters", "instance", "wrap", "quotingStyles", "extensions_default", "instanceCreator", "deprecatedRE", "initialstring", "customStringExtensions", "instance", "getTraps", "actualValue", "getStringValue", "history", "descriptorProps", "strings", "wrap", "append", "start", "end", "surroundWith", "tokens", "format", "str", "indexOf", "value", "values", "at", "insert", "lastIndexOf", "prefix", "caseSensitive", "replacements", "replaceWords", "html", "wordBoundary", "truncate", "nSteps", "undoSteps", "toCamelcase", "clone", "customMethods", "ucFirst", "toDashedNotation", "quotGetters", "toSnakeCase", "trimAll", "undoAll", "undoLast", "wordsFirstUp", "nwValue", "injectCustomMethods", "extensions", "target", "key", "canWrapNative", "wrapNative", "args", "result", "steps", "isNumber", "historyLen", "pushHistory", "methodName", "methodContainer", "enumerable", "method", "isGetter", "configurable", "customMethods", "quotingStyles", "defineQuotingStyles", "createExtendedCTOR", "CustomStringConstructor", "customMethods", "str", "args", "instance", "extensions_default", "resolveTemplateString", "getStringValue", "checkType", "type", "item", "includeInstances", "isArrayOf", "value", "v", "clone", "newInstance", "string", "isNumber", "escapeRE", "reString", "modifiers", "a", "escape4RE", "infoValue", "key", "getPlainValues", "getSWInformation", "notChainable", "firstLines", "decode", "plainValues", "keyA", "keyB", "descriptr", "isChainable", "k", "isGetter", "isMethod", "isNative", "isPlainValue", "custom", "getter", "method", "native", "defineQuotingStyles", "quots", "regExpValues", "ctor", "tokens", "name", "enumerable", "b", "qStyles", "acc", "val", "uuid4", "len", "includeUppercase", "includeNumbers", "includeSymbols", "startAlphabetic", "randomString", "regExpFromMultilineStringFactory_default", "defaultStringCTOR", "CustomStringConstructor"]
7
7
  }
package/README.md CHANGED
@@ -27,12 +27,12 @@ In html
27
27
  ```html
28
28
  <script type="module" src="[location of index.js or index.min.js]"></script>
29
29
  <!-- OR load minified directly from unpkg -->
30
- <script
30
+ <script
31
31
  type="module"
32
32
  src="https://app.unpkg.com/stringweaver@latest/files/Bundle/index.min.js">
33
33
  </script>
34
34
  ```
35
- In JS file (NodeJS or browser client file)
35
+ ### Import/use (NodeJS or browser client file)
36
36
  ```javascript
37
37
  // note: for NodeJS, make sure the project is of type "module"
38
38
  // import as $S
@@ -46,4 +46,4 @@ const myNextString = "** "[SB].append(myBrandNewString).toUpperCase().append(`!`
46
46
  ```
47
47
 
48
48
  ### Unit testing
49
- Use `npm test` to run all tests
49
+ Use `npm test` to run all tests (with coverage report)
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "stringweaver",
3
3
  "type": "module",
4
- "version": "1.1.9",
4
+ "version": "1.2.1",
5
5
  "private": false,
6
6
  "main": "./index.js",
7
7
  "sideEffects": false,
@@ -16,7 +16,7 @@
16
16
  "Classfree Object Oriented"
17
17
  ],
18
18
  "scripts": {
19
- "test": "node ./tests/UnitTests.js"
19
+ "test": "@node --test --experimental-test-coverage --test-reporter tap ./tests/UnitTests.js"
20
20
  },
21
21
  "author": "KooiInc",
22
22
  "license": "MIT",
@@ -1,3 +1,6 @@
1
+ /* node:coverage disable */
2
+ /* For StringWeaver tests we are not interested in coverage for this file */
3
+
1
4
  const defaultInterpolator = interpolateFactory();
2
5
  export {defaultInterpolator as default, interpolateFactory};
3
6
 
@@ -81,6 +84,7 @@ function interpolateFactory(defaultReplacer = "") {
81
84
  * @param {object} tokenObject - The token object containing arrays of values.
82
85
  * @returns {object[]} - Array of token objects.
83
86
  */
87
+ /* node:coverage disable (internal method, not covered by tests)*/
84
88
  function convertTokensFromArrayValues(tokenObject) {
85
89
  const converted = [];
86
90
 
@@ -1,3 +1,5 @@
1
+ /* node:coverage disable */
2
+ /* For StringWeaver tests we are not interested in coverage for this file */
1
3
  const { randomString, uuid4 } = randomStringGeneratorFactory();
2
4
  export { randomString as default, randomString, uuid4 };
3
5
 
@@ -1,4 +1,5 @@
1
- import {resolveTemplateString} from "../genericMethods.js";
1
+ /* node:coverage disable */
2
+ /* For StringWeaver tests we are not interested in coverage for this file */
2
3
 
3
4
  export default createRegExp
4
5
 
package/src/extensions.js CHANGED
@@ -45,7 +45,7 @@ function instanceCreator({initialstring} = {}) {
45
45
  lastIndexOf: { ...descriptorProps, value(str) { return lastIndexOf(actualValue, str); } },
46
46
  prefix: { ...descriptorProps, value(...strings) { return wrap(prefix(actualValue, ...strings)); } },
47
47
  replaceWords: { ...descriptorProps, value({caseSensitive = false, replacements = {}} = {}) {
48
- return wrap(replaceWords(actualValue, {replacements, caseSensitive}));
48
+ return wrap(replaceWords(actualValue, { replacements: replacements ?? {}, caseSensitive }));
49
49
  } },
50
50
  toString: { ...descriptorProps, value() { return actualValue; } },
51
51
  truncate: { ...descriptorProps, value({at, html = false, wordBoundary = false} = {}) {
@@ -137,6 +137,7 @@ function instanceCreator({initialstring} = {}) {
137
137
  if (history.length === 1) {
138
138
  return wrap(history[0]);
139
139
  }
140
+
140
141
  history.pop();
141
142
  actualValue = history.at(-1);
142
143
  return wrap(actualValue, false);
@@ -29,20 +29,10 @@ function CustomStringConstructor(str, ...args) {
29
29
  return Object.freeze(instance);
30
30
  }
31
31
 
32
- function clone(instance) {
33
- const newInstance = CustomStringConstructor(instance.value);
34
- newInstance.history = [...instance.history];
35
- return newInstance;
36
- }
37
-
38
32
  function resolveTemplateString(str, ...args) {
39
33
  return str?.raw
40
- ? String.raw({ raw: str }, ...args)
41
- : getStringValue(str).length ? str : "";
42
- }
43
-
44
- function getStringValue(string) {
45
- return string?.value || (string?.constructor === String && string) || ``;
34
+ ? String.raw({ raw: str }, ...args)
35
+ : getStringValue(str).length ? str : "";
46
36
  }
47
37
 
48
38
  function checkType(type, item, includeInstances) {
@@ -55,18 +45,44 @@ function isArrayOf(type, value, includeInstances = true) {
55
45
  return Array.isArray(value) && value.length > 0 && !value.find(v => checkType(type, v, includeInstances));
56
46
  }
57
47
 
48
+ function clone(instance) {
49
+ const newInstance = CustomStringConstructor(instance.value);
50
+ newInstance.history = [...instance.history];
51
+ return newInstance;
52
+ }
53
+
54
+ function getStringValue(string) {
55
+ return string?.value || (string?.constructor === String && string) || ``;
56
+ }
57
+
58
58
  function isNumber(value) {
59
59
  return value?.constructor === Number && !Number.isNaN(value);
60
60
  }
61
61
 
62
- function getSWInformation(notChainable) {
63
- const firstLines = CustomStringConstructor(decode());
64
- const plainValues = {
62
+ function escapeRE(reString, modifiers) {
63
+ return new RegExp(reString.replace(/\p{S}|\p{P}/gu, a => `\\${a}`), modifiers);
64
+ }
65
+
66
+ function escape4RE(reString) {
67
+ return reString.replace(/\p{S}|\p{P}/gu, a => `\\${a}`);
68
+ }
69
+
70
+ function infoValue(key, infoValue) {
71
+ return `${key} (${infoValue})`;
72
+ }
73
+
74
+ function getPlainValues() {
75
+ return {
65
76
  value: `getter/setter`,
66
77
  clone: `chainable getter`,
67
78
  notEmpty: `chainable getter|undefined`,
68
79
  quote: `Object. See [constructor].quoteInfo`,
69
80
  };
81
+ }
82
+
83
+ function getSWInformation(notChainable) {
84
+ const firstLines = CustomStringConstructor(decode());
85
+ const plainValues = getPlainValues();
70
86
 
71
87
  return firstLines.split(/\n/)
72
88
  .concat(
@@ -87,18 +103,51 @@ function getSWInformation(notChainable) {
87
103
  case isPlainValue: return infoValue(key, plainValues[key]);
88
104
  case isNative: return infoValue(key, native);
89
105
  case isMethod: return infoValue(key, method);
90
- case isGetter: return infoValue(key, getter);
91
- default: return infoValue(key, `property`);
92
- }
106
+ case isGetter: return infoValue(key, getter);
107
+ }
93
108
  }
94
109
  )
95
110
  );
96
111
  }
97
112
 
98
- function infoValue(key, infoValue) {
99
- return `${key} (${infoValue})`;
113
+ function decode() {
114
+ return atob`Rm9yIHRoZSByZWNvcmQ6CltjbV0gY2hhaW5hYmxlIGdldHRlcnMvbWV0aG9kcyBtb2RpZnkgdGhlIGluc3RhbmNlIHN0cmluZwpbY21dIGluZGV4T2Ygb3ZlcnJpZGVzIHJldHVybnMgW3VuZGVmaW5lZF0gaWYgbm90aGluZyB3YXMgZm91bmQgKHNvIG9uZSBjYW4gdXNlIFtsYXN0SV1pbmRleE9mKFtzb21lIHN0cmluZyB2YWx1ZV0pID8/IDAKW2NtXSBpbmNsdWRlcyBpbmZvcm1hdGlvbiBmb3IgY3VzdG9tIG1ldGhvZHMvZ2V0dGVycyBpZiBhcHBsaWNhYmxl`.replace(/\[cm]/g, `\u2714`);
115
+ }
116
+
117
+ function defineQuotingStyles() {
118
+ // see https://en.wikipedia.org/wiki/Quotation_mark
119
+ const quots = {
120
+ backtick: ["`", "`"],
121
+ bracket: [`{`, `}`],
122
+ curlyDoubleInward: [`”`, `“`],
123
+ curlyDouble: [`“`, `”`],
124
+ curlyDoubleEqual: [`“`, `“`],
125
+ curlyLHDouble: [`„`, `”`],
126
+ curlyLHDoubleInward: [`„`, `“`],
127
+ curlyLHSingle: [`‚`, `’`],
128
+ curlyLHSingleInward: [`‚`, `‘`],
129
+ curlySingle: [`‛`, `’`],
130
+ curlySingleEqual: [`‛`, `‛`],
131
+ curlySingleInward: [`’`, `‛`],
132
+ double: [`"`, `"`],
133
+ guillemets: [`«`, `»`],
134
+ guillemetsInward: [`»`, `«`],
135
+ guillemetsSingle: [`‹`, `›`],
136
+ guillemetsSingleInward: [`›`, `‹`],
137
+ single: [`'`, `'`],
138
+ squareBrackets: [`[`, `]`],
139
+ };
140
+ const regExpValues = escape4RE([...new Set(
141
+ Object.values(quots)
142
+ .filter(v => Array.isArray(v))
143
+ .flat())].join(``));
144
+ quots.re = RegExp(`^[${regExpValues}]|[${regExpValues}]$`, "g");
145
+
146
+ return quots;
100
147
  }
101
148
 
149
+ /* this function is not (directly) tested */
150
+ /* node:coverage disable */
102
151
  function createExtendedCTOR(ctor, customMethods) {
103
152
  Symbol.toSB = Symbol.for(`toStringBuilder`);
104
153
  Object.defineProperty(String.prototype, Symbol.toSB, {
@@ -123,10 +172,13 @@ function createExtendedCTOR(ctor, customMethods) {
123
172
  addCustom: {
124
173
  value( { name, method, enumerable = false, isGetter = false } = {} ) {
125
174
  if (CustomStringConstructor``[name]) {
126
- return console.error(`addCustom: the property "${name}" exists and can not be redefined`);
175
+ console.error(`addCustom: the property "${name}" exists and can not be redefined`);
176
+ return `addCustom: the property "${name}" exists and can not be redefined`;
127
177
  }
178
+
128
179
  if (name?.constructor === String && method?.constructor === Function && method.length > 0) {
129
180
  customMethods[name] = {method, enumerable, isGetter};
181
+ return `addCustom: the ${isGetter ? `getter` : `method`} named "${name}" is added`;
130
182
  }
131
183
  }
132
184
  },
@@ -164,52 +216,4 @@ function createExtendedCTOR(ctor, customMethods) {
164
216
 
165
217
  return ctor;
166
218
  }
167
-
168
- function escapeRE(reString, modifiers) {
169
- return new RegExp(reString.replace(/\p{S}|\p{P}/gu, a => `\\${a}`), modifiers);
170
- }
171
-
172
- function escape4RE(reString) {
173
- return reString.replace(/\p{S}|\p{P}/gu, a => `\\${a}`);
174
- }
175
-
176
- function decode() {
177
- return atob`Rm9yIHRoZSByZWNvcmQ6CltjbV0gY2hhaW5hYmxlIGdldHRlcnMvbWV0aG9kcyBtb2RpZnkgdGhlIGluc3RhbmNlIHN0cmluZwpbY21dIGluZGV4T2Ygb3ZlcnJpZGVzIHJldHVybnMgW3VuZGVmaW5lZF0gaWYgbm90aGluZyB3YXMgZm91bmQgKHNvIG9uZSBjYW4gdXNlIFtsYXN0SV1pbmRleE9mKFtzb21lIHN0cmluZyB2YWx1ZV0pID8/IDAKW2NtXSBpbmNsdWRlcyBpbmZvcm1hdGlvbiBmb3IgY3VzdG9tIG1ldGhvZHMvZ2V0dGVycyBpZiBhcHBsaWNhYmxl`.replace(/\[cm\]/g, `\u2714`);
178
- }
179
-
180
- function defineQuotingStyles() {
181
- // see https://en.wikipedia.org/wiki/Quotation_mark
182
- const custom = (start, end) => {
183
- start = getStringValue(start);
184
- end = getStringValue(end);
185
- return [getStringValue(start), end.length ? end : start];
186
- }
187
- const quots = {
188
- backtick: ["`", "`"],
189
- bracket: [`{`, `}`],
190
- curlyDoubleInward: [`”`, `“`],
191
- curlyDouble: [`“`, `”`],
192
- curlyDoubleEqual: [`“`, `“`],
193
- curlyLHDouble: [`„`, `”`],
194
- curlyLHDoubleInward: [`„`, `“`],
195
- curlyLHSingle: [`‚`, `’`],
196
- curlyLHSingleInward: [`‚`, `‘`],
197
- curlySingle: [`‛`, `’`],
198
- curlySingleEqual: [`‛`, `‛`],
199
- curlySingleInward: [`’`, `‛`],
200
- custom,
201
- double: [`"`, `"`],
202
- guillemets: [`«`, `»`],
203
- guillemetsInward: [`»`, `«`],
204
- guillemetsSingle: [`‹`, `›`],
205
- guillemetsSingleInward: [`›`, `‹`],
206
- single: [`'`, `'`],
207
- squareBrackets: [`[`, `]`],
208
- };
209
- const regExpValues = escape4RE([...new Set(
210
- Object.values(quots)
211
- .filter(v => Array.isArray(v))
212
- .flat())].join(``));
213
- quots.re = RegExp(`^[${regExpValues}]|[${regExpValues}]$`, "g");
214
- return quots;
215
- }
219
+ /* node:coverage enable */
@@ -36,12 +36,12 @@ function checkAndRun(string, fn, or) {
36
36
  return string.length > 0 ? fn(string) : or || string;
37
37
  }
38
38
 
39
- function format(string, ...tokens) {
40
- return checkAndRun(string, () => `${interpolate(string, ...tokens)}`);
39
+ function ucFirst(string) {
40
+ return checkAndRun(string, () => `${string[0].toUpperCase()}${string.slice(1)}`);
41
41
  }
42
42
 
43
- function ucFirst(string) {
44
- return checkAndRun(string, () => `${string[0].toUpperCase()}${string.slice(1)}`);
43
+ function format(string, ...tokens) {
44
+ return checkAndRun(string, () => `${interpolate(string, ...tokens)}`);
45
45
  }
46
46
 
47
47
  function surroundWith(string, start, end) {
@@ -53,7 +53,7 @@ function surroundWith(string, start, end) {
53
53
  }
54
54
 
55
55
  function toDashedNotation(string) {
56
- return checkAndRun(string, () =>
56
+ return checkAndRun(string, () =>
57
57
  string
58
58
  .replace(/\s/g, '')
59
59
  .replace(/[A-Z]/g, a => `-${a.toLowerCase()}`)
@@ -82,7 +82,7 @@ function wordsFirstUp(string) {
82
82
  }
83
83
 
84
84
  function toCamelcase(string) {
85
- return checkAndRun(string, () =>
85
+ return checkAndRun(string, () =>
86
86
  string.toLowerCase()
87
87
  .trim()
88
88
  .split(/[- ]/)
@@ -92,29 +92,37 @@ function toCamelcase(string) {
92
92
  );
93
93
  }
94
94
 
95
+ function getBoundary(string) {
96
+ const match = [...string.matchAll(/\p{Pe}|\p{Z}/gu)].at(-1);
97
+ return match?.index ?? string.length;
98
+ }
99
+
95
100
  function truncate(string, {at, html = false, wordBoundary = false} = {} ) {
101
+ html = html?.constructor === Boolean && html || false;
102
+ wordBoundary = wordBoundary?.constructor === Boolean && wordBoundary || false;
96
103
  return checkAndRun(string, () => {
97
104
  if (string.length <= at) { return string; }
98
-
105
+
99
106
  const subString = string.slice(0, at - 1);
100
107
  const endwith = html ? "&hellip;" : `...`;
101
- const boundary = wordBoundary
102
- ? [...subString.matchAll(/\p{Pe}|\p{Z}/gu)].at(-1)?.index ?? subString.length
108
+ const boundary = wordBoundary
109
+ ? getBoundary(subString)
103
110
  : subString.length;
104
-
111
+
105
112
  return (wordBoundary
106
113
  ? subString.slice(0, boundary+1).trim()
107
- : subString) + endwith;
114
+ : subString) + endwith;
108
115
  }
109
116
  );
110
117
  }
111
118
 
112
- function trimAll(string, keepLines) {
119
+ function trimAll(string, keepLines = false) {
120
+ keepLines = keepLines?.constructor === Boolean && keepLines || false;
113
121
  return checkAndRun(string, () => {
114
122
  const lines = string.replace(/\n/gm, `#LF#`)
115
123
  .split(/#LF#/)
116
124
  .map(line => line.trim().replace(/\s{2,}/g, a => a[0]) );
117
- return keepLines
125
+ return keepLines
118
126
  ? lines.join(`#LF#`).replace(/#LF#/g, `\n`).trim()
119
127
  : lines.filter(l => l.length > 0).join(`\n`);
120
128
  });
@@ -125,10 +133,10 @@ function replaceWords(string, { replacements = {}, caseSensitive = false} = {})
125
133
  let replacements2Array = Object.entries(replacements).flat();
126
134
  const cando = isArrayOf(String, replacements2Array) && caseSensitive?.constructor === Boolean;
127
135
  const modifiers = `g${!caseSensitive ? 'i' : ''}`;
128
-
136
+
129
137
  if (cando) {
130
138
  replacements2Array = replacements2Array.map(v => getStringValue(v)).filter(v => replacements2Array.length > 0);
131
-
139
+
132
140
  if (replacements2Array.length) {
133
141
  while (replacements2Array.length) {
134
142
  const [initial, replacement] = [replacements2Array.shift(), replacements2Array.shift()];
@@ -137,41 +145,41 @@ function replaceWords(string, { replacements = {}, caseSensitive = false} = {})
137
145
  }
138
146
  }
139
147
  }
140
-
148
+
141
149
  return string;
142
150
  }
143
151
 
144
152
  // SEE https://youtu.be/99Zacm7SsWQ?t=2101
145
- function indexOf(string, findMe, fromIndex) {
153
+ function indexOf(string, findMe, fromIndex = 0) {
146
154
  string = getStringValue(string);
147
- fromIndex = isNumber(fromIndex) ? fromIndex : 0;
155
+ fromIndex = isNumber(fromIndex) && fromIndex || 0;
148
156
  const index = string.indexOf(findMe, fromIndex || 0);
149
- return index < 0 ? undefined : index;
157
+ return index < 0 ? undefined : index;
150
158
  }
151
159
 
152
- function lastIndexOf(string, findMe, beforeIndex) {
160
+ function lastIndexOf(string, findMe, beforeIndex = 0) {
153
161
  string = getStringValue(string);
154
- beforeIndex = isNumber(beforeIndex) ? beforeIndex : string.length;
162
+ beforeIndex = isNumber(beforeIndex) && beforeIndex || string.length;
155
163
  const index = string.lastIndexOf(findMe, beforeIndex);
156
164
  return index < 0 ? undefined : index;
157
165
  }
158
166
 
159
167
  function insert(string, { value, values, at = 0 } = {}) {
160
168
  string = getStringValue(string);
161
- at = isNumber(at) ? at : 0;
169
+ at = isNumber(at) && at || 0;
162
170
  const valuesMaybeValue = getStringValue(values);
163
- values = getStringValue(value).length
171
+ values = getStringValue(value).length
164
172
  ? value
165
173
  : valuesMaybeValue.length
166
174
  ? valuesMaybeValue
167
- : isArrayOf(String, values)
168
- ? values.map(v => getStringValue(v)).join(``)
175
+ : isArrayOf(String, values)
176
+ ? values.map(v => getStringValue(v)).join(``)
169
177
  : [];
170
-
178
+
171
179
  return values.length <= 1
172
180
  ? string
173
- : string.length === 0
174
- ? `${values}${string}`
181
+ : string.length === 0
182
+ ? `${values}${string}`
175
183
  : `${string.slice(0, at)}${values}${string.slice(at)}`;
176
184
  }
177
185
 
@@ -182,16 +190,16 @@ function prefix(string, ...strings) {
182
190
 
183
191
  function append(string, ...strings2Append) {
184
192
  strings2Append = isArrayOf(String, strings2Append) && strings2Append;
185
-
193
+
186
194
  if (strings2Append && strings2Append.length > 0) {
187
195
  return `${getStringValue(string)}`.concat(strings2Append.join(``))
188
196
  }
189
-
197
+
190
198
  return getStringValue(string);
191
199
  }
192
200
 
193
201
  function quotGetters(instance, wrap) {
194
- return {
202
+ return {
195
203
  value: {
196
204
  get backtick() { return instance.enclose(...quotingStyles.backtick); },
197
205
  get bracket() { return instance.enclose(...quotingStyles.bracket); },
@@ -213,7 +221,7 @@ function quotGetters(instance, wrap) {
213
221
  get remove() { return wrap(`${instance.value.replace(quotingStyles.re, ``)}`); },
214
222
  get single() { return instance.enclose(...quotingStyles.single); },
215
223
  get squareBrackets() { return instance.enclose(...quotingStyles.squareBrackets); },
216
- },
224
+ },
217
225
  enumerable: false,
218
226
  configurable: false,
219
227
  };