devknife 1.0.0

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.
Files changed (52) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/LICENSE +21 -0
  3. package/README.md +217 -0
  4. package/dist/base64-CJAEMNK6.js +2 -0
  5. package/dist/base64-CJAEMNK6.js.map +1 -0
  6. package/dist/chunk-4LTWPAJW.js +2 -0
  7. package/dist/chunk-4LTWPAJW.js.map +1 -0
  8. package/dist/chunk-6UIJWUAN.js +2 -0
  9. package/dist/chunk-6UIJWUAN.js.map +1 -0
  10. package/dist/chunk-AYW5FKAL.js +2 -0
  11. package/dist/chunk-AYW5FKAL.js.map +1 -0
  12. package/dist/chunk-GTYGA6PU.js +2 -0
  13. package/dist/chunk-GTYGA6PU.js.map +1 -0
  14. package/dist/chunk-GZW2QEOC.js +2 -0
  15. package/dist/chunk-GZW2QEOC.js.map +1 -0
  16. package/dist/chunk-NW6U5UEX.js +2 -0
  17. package/dist/chunk-NW6U5UEX.js.map +1 -0
  18. package/dist/chunk-SDQ3PUQH.js +2 -0
  19. package/dist/chunk-SDQ3PUQH.js.map +1 -0
  20. package/dist/chunk-VPRHVS7Z.js +2 -0
  21. package/dist/chunk-VPRHVS7Z.js.map +1 -0
  22. package/dist/chunk-YBYCYSEC.js +2 -0
  23. package/dist/chunk-YBYCYSEC.js.map +1 -0
  24. package/dist/chunk-ZZLUWX3F.js +2 -0
  25. package/dist/chunk-ZZLUWX3F.js.map +1 -0
  26. package/dist/cli.cjs +1444 -0
  27. package/dist/cli.js +1421 -0
  28. package/dist/color-UNOPSQIT.js +2 -0
  29. package/dist/color-UNOPSQIT.js.map +1 -0
  30. package/dist/hash-52EWSWG4.js +2 -0
  31. package/dist/hash-52EWSWG4.js.map +1 -0
  32. package/dist/index.cjs +4 -0
  33. package/dist/index.cjs.map +1 -0
  34. package/dist/index.d.cts +285 -0
  35. package/dist/index.d.ts +285 -0
  36. package/dist/index.js +4 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/json-KEOS7PBI.js +2 -0
  39. package/dist/json-KEOS7PBI.js.map +1 -0
  40. package/dist/jwt-CKRHCFHP.js +2 -0
  41. package/dist/jwt-CKRHCFHP.js.map +1 -0
  42. package/dist/password-2Z5N7KS2.js +2 -0
  43. package/dist/password-2Z5N7KS2.js.map +1 -0
  44. package/dist/text-PAS3LRJD.js +2 -0
  45. package/dist/text-PAS3LRJD.js.map +1 -0
  46. package/dist/time-3XVRD5HD.js +2 -0
  47. package/dist/time-3XVRD5HD.js.map +1 -0
  48. package/dist/url-BRWDEVUS.js +2 -0
  49. package/dist/url-BRWDEVUS.js.map +1 -0
  50. package/dist/uuid-MZ4YSUFH.js +2 -0
  51. package/dist/uuid-MZ4YSUFH.js.map +1 -0
  52. package/package.json +86 -0
@@ -0,0 +1,2 @@
1
+ import{a,b,c,d,e,f,g,h,i,j}from"./chunk-AYW5FKAL.js";export{e as hexToHsl,a as hexToRgb,j as hslToCSS,f as hslToHex,d as hslToRgb,h as isLightColor,g as isValidHex,i as rgbToCSS,b as rgbToHex,c as rgbToHsl};
2
+ //# sourceMappingURL=color-UNOPSQIT.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,2 @@
1
+ import{a,b,c,d,e,f,g,h}from"./chunk-4LTWPAJW.js";export{g as getSupportedAlgorithms,a as hash,h as hashFile,f as isSupportedAlgorithm,b as md5,c as sha1,d as sha256,e as sha512};
2
+ //# sourceMappingURL=hash-52EWSWG4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
package/dist/index.cjs ADDED
@@ -0,0 +1,4 @@
1
+ "use strict";var rr=Object.create;var E=Object.defineProperty;var nr=Object.getOwnPropertyDescriptor;var or=Object.getOwnPropertyNames;var sr=Object.getPrototypeOf,ir=Object.prototype.hasOwnProperty;var l=(e,t)=>()=>(e&&(t=e(e=0)),t);var c=(e,t)=>{for(var r in t)E(e,r,{get:t[r],enumerable:!0})},ft=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of or(t))!ir.call(e,o)&&o!==r&&E(e,o,{get:()=>t[o],enumerable:!(n=nr(t,o))||n.enumerable});return e};var ar=(e,t,r)=>(r=e!=null?rr(sr(e)):{},ft(t||!e||!e.__esModule?E(r,"default",{value:e,enumerable:!0}):r,e)),ur=e=>ft(E({},"__esModule",{value:!0}),e);var T={};c(T,{getSupportedAlgorithms:()=>z,hash:()=>h,hashFile:()=>Z,isSupportedAlgorithm:()=>Y,md5:()=>V,sha1:()=>F,sha256:()=>q,sha512:()=>G});function h(e,t="sha256"){return(0,W.createHash)(t).update(e).digest("hex")}function V(e){return h(e,"md5")}function F(e){return h(e,"sha1")}function q(e){return h(e,"sha256")}function G(e){return h(e,"sha512")}function Y(e){return dt.includes(e)}function z(){return dt}function Z(e,t="sha256"){return(0,W.createHash)(t).update(e).digest("hex")}var W,dt,x=l(()=>{"use strict";W=require("crypto"),dt=["md5","sha1","sha256","sha512"]});var wt={};c(wt,{calculateEntropy:()=>A,estimateStrength:()=>Q,generatePassword:()=>K,randomBytes:()=>D.randomBytes});function b(e,t){return t?e.split("").filter(r=>!cr.includes(r)).join(""):e}function w(e){let t=new Uint32Array(1);return D.webcrypto.getRandomValues(t),t[0]%e}function K(e={}){let t={...lr,...e},r="";t.uppercase&&(r+=b(ht,t.excludeAmbiguous)),t.lowercase&&(r+=b(X,t.excludeAmbiguous)),t.numbers&&(r+=b(xt,t.excludeAmbiguous)),t.symbols&&(r+=bt),r.length===0&&(r=X);let n="";if(t.uppercase){let s=b(ht,t.excludeAmbiguous);n+=s[w(s.length)]}if(t.lowercase){let s=b(X,t.excludeAmbiguous);n+=s[w(s.length)]}if(t.numbers){let s=b(xt,t.excludeAmbiguous);n+=s[w(s.length)]}if(t.symbols){let s=bt;n+=s[w(s.length)]}let o=t.length-n.length;for(let s=0;s<o;s++)n+=r[w(r.length)];let i=n.split("");for(let s=i.length-1;s>0;s--){let u=w(s+1);[i[s],i[u]]=[i[u],i[s]]}return i.join("")}function A(e){if(e.length===0)return 0;let t=new Set(e.split("")).size;return Math.floor(e.length*Math.log2(t))}function Q(e){let t=A(e);return t<28?"weak":t<36?"fair":t<60?"strong":"very-strong"}var D,ht,X,xt,bt,cr,lr,ee=l(()=>{"use strict";D=require("crypto"),ht="ABCDEFGHIJKLMNOPQRSTUVWXYZ",X="abcdefghijklmnopqrstuvwxyz",xt="0123456789",bt="!@#$%^&*()_+-=[]{}|;:,.<>?",cr="Il1O0",lr={length:16,uppercase:!0,lowercase:!0,numbers:!0,symbols:!1,excludeAmbiguous:!1}});var yt={};c(yt,{generateUUID:()=>M,generateUUIDs:()=>ne,isValidUUID:()=>re,randomBytes:()=>te.randomBytes});function M(){let e=(0,te.randomBytes)(16);e[6]=e[6]&15|64,e[8]=e[8]&63|128;let t=Array.from(e,r=>r.toString(16).padStart(2,"0")).join("");return[t.slice(0,8),t.slice(8,12),t.slice(12,16),t.slice(16,20),t.slice(20,32)].join("-")}function re(e){return pr.test(e)}function ne(e){if(e<1)throw new Error("Count must be at least 1");return Array.from({length:e},()=>M())}var te,pr,oe=l(()=>{"use strict";te=require("crypto"),pr=/^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/});var pe={};c(pe,{decode:()=>v,decodeURLSafe:()=>le,encode:()=>U,encodeURLSafe:()=>ce,isBase64:()=>ue});function U(e){return Buffer.from(e,"utf-8").toString("base64")}function v(e){return Buffer.from(e,"base64").toString("utf-8")}function ue(e){return e.length===0||!/^[A-Za-z0-9+/]*={0,2}$/.test(e)?!1:e.length%4===0}function ce(e){return U(e).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function le(e){let t=e.replace(/-/g,"+").replace(/_/g,"/");for(;t.length%4!==0;)t+="=";return v(t)}var B=l(()=>{"use strict"});var xe={};c(xe,{decode:()=>me,decodeComponent:()=>de,encode:()=>ge,encodeComponent:()=>fe,isValidEncoded:()=>he});function ge(e){return encodeURIComponent(e)}function me(e){return decodeURIComponent(e)}function fe(e){return encodeURIComponent(e)}function de(e){return decodeURIComponent(e)}function he(e){try{return decodeURIComponent(e),!0}catch{return!1}}var R=l(()=>{"use strict"});var Ot={};c(Ot,{decode:()=>g,getExpiration:()=>Ie,getIssuer:()=>ye,getSubject:()=>Te,isExpired:()=>be,isValidJWT:()=>we});function Ht(e){let t=e.replace(/-/g,"+").replace(/_/g,"/");for(;t.length%4!==0;)t+="=";return Buffer.from(t,"base64").toString("utf-8")}function g(e){let t=e.split(".");if(t.length!==3)throw new Error("Invalid JWT: token must have 3 parts separated by dots");let[r,n,o]=t,i,s;try{i=JSON.parse(Ht(r))}catch{throw new Error("Invalid JWT: header is not valid JSON")}try{s=JSON.parse(Ht(n))}catch{throw new Error("Invalid JWT: payload is not valid JSON")}return{header:i,payload:s,signature:o}}function be(e){try{let{payload:t}=g(e);if(t.exp==null)return{expired:!1,expiresAt:null};let r=Math.floor(Date.now()/1e3);return{expired:t.exp<r,expiresAt:new Date(t.exp*1e3)}}catch{return{expired:!1,expiresAt:null}}}function we(e){if(e.split(".").length!==3)return!1;try{return g(e),!0}catch{return!1}}function ye(e){try{let{payload:t}=g(e);return t.iss!=null?t.iss:null}catch{return null}}function Te(e){try{let{payload:t}=g(e);return t.sub!=null?t.sub:null}catch{return null}}function Ie(e){try{let{payload:t}=g(e);return t.exp==null?null:new Date(t.exp*1e3)}catch{return null}}var Se=l(()=>{"use strict"});var Ue={};c(Ue,{flatten:()=>Me,format:()=>Ce,minify:()=>Ee,prettyStringify:()=>Ne,sortByKeys:()=>Ae,validate:()=>De});function Ce(e,t=2){let r=JSON.parse(e);return JSON.stringify(r,null,t)}function Ee(e){let t=JSON.parse(e);return JSON.stringify(t)}function De(e){try{return{valid:!0,data:JSON.parse(e)}}catch(t){return{valid:!1,error:t.message}}}function Ae(e,t=2){let r=JSON.parse(e),n={};for(let o of Object.keys(r).sort())n[o]=r[o];return JSON.stringify(n,null,t)}function Me(e){let t=JSON.parse(e);return JSON.stringify(t)}function Ne(e,t=2){return JSON.stringify(e,null,t)}var H=l(()=>{"use strict"});var I={};c(I,{camelCase:()=>O,constantCase:()=>Re,dotCase:()=>He,kebabCase:()=>ve,lowerCase:()=>Le,pascalCase:()=>Be,reverseCase:()=>Je,sentenceCase:()=>Pe,slugify:()=>$e,snakeCase:()=>P,titleCase:()=>Oe,upperCase:()=>je});function O(e){return e.replace(/[-_\s]+(.)?/g,(t,r)=>r?r.toUpperCase():"").replace(/^[A-Z]/,t=>t.toLowerCase())}function P(e){return e.replace(/([A-Z])/g,"_$1").replace(/[-\s]+/g,"_").replace(/^_/,"").toLowerCase()}function ve(e){return e.replace(/([A-Z])/g,"-$1").replace(/[_\s]+/g,"-").replace(/^-/,"").toLowerCase()}function Be(e){let t=O(e);return t.charAt(0).toUpperCase()+t.slice(1)}function Re(e){return P(e).toUpperCase()}function He(e){return e.replace(/([A-Z])/g,".$1").replace(/[-_\s]+/g,".").replace(/^\.|\.+$/g,"").toLowerCase()}function Oe(e){return e.split(/[-_\s]+/).map(t=>t.charAt(0).toUpperCase()+t.slice(1).toLowerCase()).join(" ")}function Pe(e){let t=e.replace(/[-_\s]+/g," ").trim();return t.charAt(0).toUpperCase()+t.slice(1).toLowerCase()}function je(e){return e.toUpperCase()}function Le(e){return e.toLowerCase()}function Je(e){return e.split("").map(t=>t===t.toUpperCase()?t.toLowerCase():t.toUpperCase()).join("")}function $e(e){return e.toLowerCase().trim().replace(/[^\w\s-]/g,"").replace(/[-_\s]+/g,"-").replace(/^-+|-+$/g,"")}var y=l(()=>{"use strict"});var Ge={};c(Ge,{hexToHsl:()=>ke,hexToRgb:()=>S,hslToCSS:()=>qe,hslToHex:()=>_e,hslToRgb:()=>J,isLightColor:()=>Ve,isValidHex:()=>We,rgbToCSS:()=>Fe,rgbToHex:()=>j,rgbToHsl:()=>L});function S(e){let t=e.replace("#","");if(t.length!==3&&t.length!==6)throw new Error("Invalid HEX color: must be 3 or 6 characters");let r=t.length===3?t.split("").map(s=>s+s).join(""):t,n=parseInt(r.slice(0,2),16),o=parseInt(r.slice(2,4),16),i=parseInt(r.slice(4,6),16);if(isNaN(n)||isNaN(o)||isNaN(i))throw new Error("Invalid HEX color: contains non-hex characters");return{r:n,g:o,b:i}}function j(e,t,r){let n=i=>Math.max(0,Math.min(255,Math.round(i))),o=i=>n(i).toString(16).padStart(2,"0");return`#${o(e)}${o(t)}${o(r)}`}function L(e,t,r){let n=e/255,o=t/255,i=r/255,s=Math.max(n,o,i),u=Math.min(n,o,i),f=(s+u)/2,a=0,d=0;if(s!==u){let m=s-u;switch(d=f>.5?m/(2-s-u):m/(s+u),s){case n:a=((o-i)/m+(o<i?6:0))/6;break;case o:a=((i-n)/m+2)/6;break;case i:a=((n-o)/m+4)/6;break}}return{h:Math.round(a*360),s:Math.round(d*100),l:Math.round(f*100)}}function J(e,t,r){let n=t/100,o=r/100;if(n===0){let a=Math.round(o*255);return{r:a,g:a,b:a}}let i=(a,d,m)=>{let p=m;return p<0&&(p+=1),p>1&&(p-=1),p<1/6?a+(d-a)*6*p:p<1/2?d:p<2/3?a+(d-a)*(2/3-p)*6:a},s=o<.5?o*(1+n):o+n-o*n,u=2*o-s,f=e/360;return{r:Math.round(i(u,s,f+1/3)*255),g:Math.round(i(u,s,f)*255),b:Math.round(i(u,s,f-1/3)*255)}}function ke(e){let{r:t,g:r,b:n}=S(e);return L(t,r,n)}function _e(e,t,r){let{r:n,g:o,b:i}=J(e,t,r);return j(n,o,i)}function We(e){return/^#?([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/.test(e)}function Ve(e){let{r:t,g:r,b:n}=S(e);return(.299*t+.587*r+.114*n)/255>.5}function Fe(e,t,r){return`rgb(${e}, ${t}, ${r})`}function qe(e,t,r){return`hsl(${e}, ${t}%, ${r}%)`}var $=l(()=>{"use strict"});var at={};c(at,{epochToIso:()=>Ye,epochToLocale:()=>Ze,formatDate:()=>ot,getDaysBetween:()=>nt,getWeekNumber:()=>st,isLeapYear:()=>it,isValidIsoDate:()=>rt,isoToEpoch:()=>ze,msToSeconds:()=>Qe,nowEpoch:()=>Xe,nowIso:()=>Ke,secondsToMs:()=>et,timeAgo:()=>tt});function Ye(e){return new Date(e*1e3).toISOString()}function ze(e){let t=new Date(e).getTime();if(isNaN(t))throw new Error("Invalid ISO date string");return Math.floor(t/1e3)}function Ze(e,t){return new Date(e*1e3).toLocaleString("en-US",{timeZone:t,year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit",second:"2-digit",timeZoneName:"short"})}function Xe(){return Math.floor(Date.now()/1e3)}function Ke(){return new Date().toISOString()}function Qe(e){return Math.floor(e/1e3)}function et(e){return e*1e3}function tt(e){let r=Math.floor(Date.now()/1e3)-e;if(r<0)return"in the future";let n=[["year",31536e3],["month",2592e3],["week",604800],["day",86400],["hour",3600],["minute",60],["second",1]];for(let[o,i]of n){let s=Math.floor(r/i);if(s>=1)return`${s} ${o}${s>1?"s":""} ago`}return"just now"}function rt(e){let t=new Date(e);return!isNaN(t.getTime())}function nt(e,t){let r=new Date(e).getTime(),n=new Date(t).getTime();if(isNaN(r)||isNaN(n))throw new Error("Invalid date string");return Math.abs(Math.floor((n-r)/(1e3*60*60*24)))}function ot(e,t){let r=new Date(e);if(isNaN(r.getTime()))throw new Error("Invalid date string");return t.replace("YYYY",r.getFullYear().toString()).replace("MM",String(r.getMonth()+1).padStart(2,"0")).replace("DD",String(r.getDate()).padStart(2,"0")).replace("HH",String(r.getHours()).padStart(2,"0")).replace("mm",String(r.getMinutes()).padStart(2,"0")).replace("ss",String(r.getSeconds()).padStart(2,"0"))}function st(e){let t=new Date(e);if(isNaN(t.getTime()))throw new Error("Invalid date string");let r=new Date(Date.UTC(t.getFullYear(),t.getMonth(),t.getDate())),n=r.getUTCDay()||7;r.setUTCDate(r.getUTCDate()+4-n);let o=new Date(Date.UTC(r.getUTCFullYear(),0,1));return Math.ceil(((r.getTime()-o.getTime())/864e5+1)/7)}function it(e){return e%4===0&&e%100!==0||e%400===0}var k=l(()=>{"use strict"});var vr={};c(vr,{base64:()=>Cr,base64Decode:()=>v,base64DecodeURLSafe:()=>le,base64Encode:()=>U,base64EncodeURLSafe:()=>ce,binaryToDecimal:()=>ct,binaryToHex:()=>Jt,calculateEntropy:()=>A,camelCase:()=>O,color:()=>Nr,constantCase:()=>Re,decimalToBinary:()=>ut,decimalToHex:()=>lt,decimalToOctal:()=>Pt,dotCase:()=>He,epochToIso:()=>Ye,epochToLocale:()=>Ze,estimateStrength:()=>Q,formatBytes:()=>Ft,formatDate:()=>ot,fromBase:()=>kt,generateMAC:()=>Qt,generateNanoID:()=>se,generateNanoIDs:()=>Et,generatePassword:()=>K,generateUUID:()=>M,generateUUIDs:()=>ne,getDaysBetween:()=>nt,getHostname:()=>Zt,getLocalIPs:()=>mt,getLocalIPv4:()=>Gt,getSupportedAlgorithms:()=>z,getWeekNumber:()=>st,hash:()=>Tr,hashFile:()=>Z,hexToBinary:()=>Lt,hexToDecimal:()=>pt,hexToHsl:()=>ke,hexToRgb:()=>S,hslToCSS:()=>qe,hslToHex:()=>_e,hslToRgb:()=>J,htmlDecode:()=>vt,htmlEncode:()=>Ut,htmlEncodeAttribute:()=>Bt,isBase64:()=>ue,isBinary:()=>_t,isHex:()=>Wt,isLeapYear:()=>it,isLightColor:()=>Ve,isNanoIDValid:()=>Ct,isOctal:()=>Vt,isPrivateIP:()=>Yt,isReservedIP:()=>zt,isSupportedAlgorithm:()=>Y,isValidEncoded:()=>he,isValidHex:()=>We,isValidIP:()=>qt,isValidIPv4:()=>C,isValidIPv6:()=>gt,isValidIsoDate:()=>rt,isValidJWT:()=>we,isValidMAC:()=>Kt,isValidUUID:()=>re,isoToEpoch:()=>ze,json:()=>Ar,jsonFlatten:()=>Me,jsonFormat:()=>Ce,jsonMinify:()=>Ee,jsonSortByKeys:()=>Ae,jsonValidate:()=>De,jwt:()=>Dr,jwtDecode:()=>g,jwtGetExpiration:()=>Ie,jwtGetIssuer:()=>ye,jwtGetSubject:()=>Te,jwtIsExpired:()=>be,kebabCase:()=>ve,loremParagraph:()=>ae,loremParagraphs:()=>Mt,loremSentence:()=>ie,loremTitle:()=>Nt,loremWord:()=>N,lowerCase:()=>Le,macToHex:()=>tr,md5:()=>V,msToSeconds:()=>Qe,normalizeMAC:()=>er,nowEpoch:()=>Xe,nowIso:()=>Ke,octalToDecimal:()=>jt,pascalCase:()=>Be,password:()=>Sr,prettyStringify:()=>Ne,reverseCase:()=>Je,rgbToCSS:()=>Fe,rgbToHex:()=>j,rgbToHsl:()=>L,secondsToMs:()=>et,sentenceCase:()=>Pe,sha1:()=>F,sha256:()=>q,sha512:()=>G,slugify:()=>$e,snakeCase:()=>P,stripTags:()=>Rt,text:()=>Mr,time:()=>Ur,timeAgo:()=>tt,titleCase:()=>Oe,toBase:()=>$t,upperCase:()=>je,url:()=>Er,urlDecode:()=>me,urlDecodeComponent:()=>de,urlEncode:()=>ge,urlEncodeComponent:()=>fe,uuid:()=>Ir});module.exports=ur(vr);x();ee();oe();var Tt=require("crypto"),It="-_0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ",St=21;function gr(e){let t=new Uint32Array(1);return Tt.webcrypto.getRandomValues(t),t[0]%e}function se(e={}){let t=e.size??St,r=e.alphabet??It;if(r.length===0)throw new Error("Alphabet must not be empty");let n="";for(let o=0;o<t;o++)n+=r[gr(r.length)];return n}function Ct(e,t={}){let r=t.size??St,n=t.alphabet??It;return e.length!==r?!1:e.split("").every(o=>n.includes(o))}function Et(e,t={}){if(e<1)throw new Error("Count must be at least 1");return Array.from({length:e},()=>se(t))}var Dt=["lorem","ipsum","dolor","sit","amet","consectetur","adipiscing","elit","sed","do","eiusmod","tempor","incididunt","ut","labore","et","dolore","magna","aliqua","enim","ad","minim","veniam","quis","nostrud","exercitation","ullamco","laboris","nisi","aliquip","ex","ea","commodo","consequat","duis","aute","irure","in","reprehenderit","voluptate","velit","esse","cillum","fugiat","nulla","pariatur","excepteur","sint","occaecat","cupidatat","non","proident","sunt","culpa","qui","officia","deserunt","mollit","anim","id","est","laborum","perspiciatis","unde","omnis","iste","natus","error","voluptatem","accusantium","doloremque","laudantium","totam","rem","aperiam","eaque","ipsa","quae","ab","illo","inventore","veritatis","quasi","architecto","beatae","vitae","dicta","explicabo","nemo","ipsam","voluptas","aspernatur","aut","odit","fugit","consequuntur","magni","dolores","eos","ratione","sequi","nesciunt"];function mr(e){return Math.floor(Math.random()*e)}function At(e){return e.charAt(0).toUpperCase()+e.slice(1)}function N(e=1){let t=[];for(let r=0;r<e;r++)t.push(Dt[mr(Dt.length)]);return t.join(" ")}function ie(e){let t=e??8+Math.floor(Math.random()*8),r=N(t);return At(r)+"."}function ae(e){let t=e??4+Math.floor(Math.random()*4),r=[];for(let n=0;n<t;n++)r.push(ie());return r.join(" ")}function Mt(e=1,t=`
2
+
3
+ `){let r=[];for(let n=0;n<e;n++)r.push(ae());return r.join(t)}function Nt(e){let t=e??3+Math.floor(Math.random()*4);return N(t).split(" ").map(n=>At(n)).join(" ")}B();R();var fr={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","/":"&#x2F;","`":"&#x60;","=":"&#x3D;"},dr={"&amp;":"&","&lt;":"<","&gt;":">","&quot;":'"',"&#39;":"'","&#x27;":"'","&#x2F;":"/","&#x60;":"`","&#x3D;":"=","&apos;":"'"},hr=/[&<>"'`=/]/g,xr=/&(?:amp|lt|gt|quot|#39|#x27|#x2F|#x60|#x3D|apos);/g;function Ut(e){return e.replace(hr,t=>fr[t])}function vt(e){return e.replace(xr,t=>dr[t])}function Bt(e){return e.replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/'/g,"&#39;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function Rt(e){return e.replace(/<[^>]*>/g,"")}Se();H();y();$();k();function ut(e){if(!Number.isInteger(e))throw new Error("Input must be an integer");return e.toString(2)}function ct(e){if(!/^[01]+$/.test(e))throw new Error("Invalid binary string");return parseInt(e,2)}function lt(e){if(!Number.isInteger(e))throw new Error("Input must be an integer");return e.toString(16)}function pt(e){if(!/^[0-9a-fA-F]+$/.test(e))throw new Error("Invalid hexadecimal string");return parseInt(e,16)}function Pt(e){if(!Number.isInteger(e))throw new Error("Input must be an integer");return parseInt(e.toString(8),10)}function jt(e){if(!/^[0-7]+$/.test(e))throw new Error("Invalid octal string");return parseInt(e,8)}function Lt(e){let t=pt(e);return ut(t)}function Jt(e){let t=ct(e);return lt(t)}function $t(e,t){if(t<2||t>36)throw new Error("Base must be between 2 and 36");if(!Number.isInteger(e))throw new Error("Input must be an integer");return e.toString(t)}function kt(e,t){if(t<2||t>36)throw new Error("Base must be between 2 and 36");return parseInt(e,t)}function _t(e){return/^[01]+$/.test(e)}function Wt(e){return/^[0-9a-fA-F]+$/.test(e)}function Vt(e){return/^[0-7]+$/.test(e)}function Ft(e,t=2){if(e===0)return"0 Bytes";if(e<0)throw new Error("Bytes cannot be negative");let r=1024,n=["Bytes","KB","MB","GB","TB","PB","EB","ZB","YB"],o=Math.min(Math.floor(Math.log(e)/Math.log(r)),n.length-1),i=n[o];return`${parseFloat((e/Math.pow(r,o)).toFixed(t))} ${i}`}var _=ar(require("os"),1),br=/^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/;function C(e){return br.test(e)}var wr=/^(?:[0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$/;function gt(e){if(e.includes("::")){let t=e.split("::");if(t.length!==2)return!1;let r=t[0].split(":").filter(Boolean),n=t[1].split(":").filter(Boolean);return r.length+n.length<=7&&r.length+n.length>=1}return wr.test(e)}function qt(e){return C(e)||gt(e)}function mt(){let e=_.networkInterfaces(),t=[];for(let r of Object.keys(e)){let n=e[r];if(n!==void 0)for(let o of n)o.family==="IPv4"&&!o.internal&&t.push(o.address)}return t}function Gt(){return mt()[0]??null}function Yt(e){if(!C(e))return!1;let t=e.split(".").map(Number);return t[0]===10||t[0]===172&&t[1]>=16&&t[1]<=31||t[0]===192&&t[1]===168||t[0]===127}function zt(e){if(!C(e))return!1;let t=e.split(".").map(Number);return t[0]===0||t[0]===127||t[0]===169&&t[1]===254||t[0]>=224}function Zt(){return _.hostname()}var Xt=require("crypto"),yr=/^([0-9A-Fa-f]{2}[:-]){5}[0-9A-Fa-f]{2}$/;function Kt(e){return yr.test(e)}function Qt(e=":"){let t=Array.from((0,Xt.randomBytes)(6),r=>r.toString(16).padStart(2,"0").toUpperCase());return t[0]=(parseInt(t[0],16)&254|2).toString(16).padStart(2,"0").toUpperCase(),t.join(e)}function er(e,t=":"){let r=e.replace(/[-:]/g,"").toUpperCase();if(r.length!==12)throw new Error("Invalid MAC address length");return r.match(/.{2}/g).join(t)}function tr(e){let t=e.replace(/[-:]/g,"").toLowerCase();if(t.length!==12)throw new Error("Invalid MAC address");return`0x${t}`}var Tr={md5:e=>Promise.resolve().then(()=>(x(),T)).then(t=>t.md5(e)),sha1:e=>Promise.resolve().then(()=>(x(),T)).then(t=>t.sha1(e)),sha256:e=>Promise.resolve().then(()=>(x(),T)).then(t=>t.sha256(e)),sha512:e=>Promise.resolve().then(()=>(x(),T)).then(t=>t.sha512(e))},Ir={v4:()=>Promise.resolve().then(()=>(oe(),yt)).then(e=>e.generateUUID())},Sr={generate:e=>Promise.resolve().then(()=>(ee(),wt)).then(t=>t.generatePassword(e))},Cr={encode:e=>Promise.resolve().then(()=>(B(),pe)).then(t=>t.encode(e)),decode:e=>Promise.resolve().then(()=>(B(),pe)).then(t=>t.decode(e))},Er={encode:e=>Promise.resolve().then(()=>(R(),xe)).then(t=>t.encode(e)),decode:e=>Promise.resolve().then(()=>(R(),xe)).then(t=>t.decode(e))},Dr={decode:e=>Promise.resolve().then(()=>(Se(),Ot)).then(t=>t.decode(e))},Ar={format:e=>Promise.resolve().then(()=>(H(),Ue)).then(t=>t.format(e)),minify:e=>Promise.resolve().then(()=>(H(),Ue)).then(t=>t.minify(e))},Mr={camelCase:e=>Promise.resolve().then(()=>(y(),I)).then(t=>t.camelCase(e)),snakeCase:e=>Promise.resolve().then(()=>(y(),I)).then(t=>t.snakeCase(e)),kebabCase:e=>Promise.resolve().then(()=>(y(),I)).then(t=>t.kebabCase(e)),pascalCase:e=>Promise.resolve().then(()=>(y(),I)).then(t=>t.pascalCase(e))},Nr={hexToRgb:e=>Promise.resolve().then(()=>($(),Ge)).then(t=>t.hexToRgb(e)),rgbToHex:(e,t,r)=>Promise.resolve().then(()=>($(),Ge)).then(n=>n.rgbToHex(e,t,r))},Ur={epochToIso:e=>Promise.resolve().then(()=>(k(),at)).then(t=>t.epochToIso(e)),isoToEpoch:e=>Promise.resolve().then(()=>(k(),at)).then(t=>t.isoToEpoch(e))};0&&(module.exports={base64,base64Decode,base64DecodeURLSafe,base64Encode,base64EncodeURLSafe,binaryToDecimal,binaryToHex,calculateEntropy,camelCase,color,constantCase,decimalToBinary,decimalToHex,decimalToOctal,dotCase,epochToIso,epochToLocale,estimateStrength,formatBytes,formatDate,fromBase,generateMAC,generateNanoID,generateNanoIDs,generatePassword,generateUUID,generateUUIDs,getDaysBetween,getHostname,getLocalIPs,getLocalIPv4,getSupportedAlgorithms,getWeekNumber,hash,hashFile,hexToBinary,hexToDecimal,hexToHsl,hexToRgb,hslToCSS,hslToHex,hslToRgb,htmlDecode,htmlEncode,htmlEncodeAttribute,isBase64,isBinary,isHex,isLeapYear,isLightColor,isNanoIDValid,isOctal,isPrivateIP,isReservedIP,isSupportedAlgorithm,isValidEncoded,isValidHex,isValidIP,isValidIPv4,isValidIPv6,isValidIsoDate,isValidJWT,isValidMAC,isValidUUID,isoToEpoch,json,jsonFlatten,jsonFormat,jsonMinify,jsonSortByKeys,jsonValidate,jwt,jwtDecode,jwtGetExpiration,jwtGetIssuer,jwtGetSubject,jwtIsExpired,kebabCase,loremParagraph,loremParagraphs,loremSentence,loremTitle,loremWord,lowerCase,macToHex,md5,msToSeconds,normalizeMAC,nowEpoch,nowIso,octalToDecimal,pascalCase,password,prettyStringify,reverseCase,rgbToCSS,rgbToHex,rgbToHsl,secondsToMs,sentenceCase,sha1,sha256,sha512,slugify,snakeCase,stripTags,text,time,timeAgo,titleCase,toBase,upperCase,url,urlDecode,urlDecodeComponent,urlEncode,urlEncodeComponent,uuid});
4
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/tools/crypto/hash.ts","../src/tools/crypto/password.ts","../src/tools/generators/uuid.ts","../src/tools/encoders/base64.ts","../src/tools/encoders/url.ts","../src/tools/encoders/jwt.ts","../src/tools/formatters/json.ts","../src/tools/formatters/text.ts","../src/tools/converters/color.ts","../src/tools/converters/time.ts","../src/index.ts","../src/tools/index.ts","../src/tools/generators/nanoid.ts","../src/tools/generators/lorem.ts","../src/tools/encoders/html.ts","../src/tools/converters/number.ts","../src/tools/network/ip.ts","../src/tools/network/mac.ts"],"sourcesContent":["/**\n * Hash generators: MD5, SHA-1, SHA-256, SHA-512\n * Zero-dependency, uses only node:crypto\n */\n\nimport { createHash } from 'node:crypto';\n\nexport type HashAlgorithm = 'md5' | 'sha1' | 'sha256' | 'sha512';\n\nconst SUPPORTED_ALGORITHMS: readonly HashAlgorithm[] = ['md5', 'sha1', 'sha256', 'sha512'] as const;\n\nexport function hash(input: string, algorithm: HashAlgorithm = 'sha256'): string {\n return createHash(algorithm).update(input).digest('hex');\n}\n\nexport function md5(input: string): string {\n return hash(input, 'md5');\n}\n\nexport function sha1(input: string): string {\n return hash(input, 'sha1');\n}\n\nexport function sha256(input: string): string {\n return hash(input, 'sha256');\n}\n\nexport function sha512(input: string): string {\n return hash(input, 'sha512');\n}\n\nexport function isSupportedAlgorithm(algo: string): algo is HashAlgorithm {\n return (SUPPORTED_ALGORITHMS as readonly string[]).includes(algo);\n}\n\nexport function getSupportedAlgorithms(): readonly HashAlgorithm[] {\n return SUPPORTED_ALGORITHMS;\n}\n\nexport function hashFile(content: string | Buffer, algorithm: HashAlgorithm = 'sha256'): string {\n return createHash(algorithm).update(content).digest('hex');\n}\n","/**\n * Secure password generator.\n * Zero-dependency, uses only node:crypto for secure randomness.\n */\n\nimport { randomBytes, webcrypto } from 'node:crypto';\n\nexport interface PasswordOptions {\n length?: number;\n uppercase?: boolean;\n lowercase?: boolean;\n numbers?: boolean;\n symbols?: boolean;\n excludeAmbiguous?: boolean;\n}\n\nconst UPPERCASE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';\nconst LOWERCASE = 'abcdefghijklmnopqrstuvwxyz';\nconst NUMBERS = '0123456789';\nconst SYMBOLS = '!@#$%^&*()_+-=[]{}|;:,.<>?';\nconst AMBIGUOUS = 'Il1O0';\n\nconst DEFAULT_OPTIONS: Required<PasswordOptions> = {\n length: 16,\n uppercase: true,\n lowercase: true,\n numbers: true,\n symbols: false,\n excludeAmbiguous: false,\n};\n\nfunction filterAmbiguous(chars: string, exclude: boolean): string {\n if (!exclude) return chars;\n return chars\n .split('')\n .filter((c) => !AMBIGUOUS.includes(c))\n .join('');\n}\n\nfunction secureRandomIndex(max: number): number {\n const array = new Uint32Array(1);\n webcrypto.getRandomValues(array);\n return array[0]! % max;\n}\n\nexport function generatePassword(options: PasswordOptions = {}): string {\n const opts: Required<PasswordOptions> = { ...DEFAULT_OPTIONS, ...options };\n\n let charset = '';\n\n if (opts.uppercase) charset += filterAmbiguous(UPPERCASE, opts.excludeAmbiguous);\n if (opts.lowercase) charset += filterAmbiguous(LOWERCASE, opts.excludeAmbiguous);\n if (opts.numbers) charset += filterAmbiguous(NUMBERS, opts.excludeAmbiguous);\n if (opts.symbols) charset += SYMBOLS;\n\n if (charset.length === 0) {\n charset = LOWERCASE;\n }\n\n let password = '';\n\n // Ensure at least one character from each required set\n if (opts.uppercase) {\n const pool = filterAmbiguous(UPPERCASE, opts.excludeAmbiguous);\n password += pool[secureRandomIndex(pool.length)]!;\n }\n if (opts.lowercase) {\n const pool = filterAmbiguous(LOWERCASE, opts.excludeAmbiguous);\n password += pool[secureRandomIndex(pool.length)]!;\n }\n if (opts.numbers) {\n const pool = filterAmbiguous(NUMBERS, opts.excludeAmbiguous);\n password += pool[secureRandomIndex(pool.length)]!;\n }\n if (opts.symbols) {\n const pool = SYMBOLS;\n password += pool[secureRandomIndex(pool.length)]!;\n }\n\n // Fill remaining length\n const remaining = opts.length - password.length;\n for (let i = 0; i < remaining; i++) {\n password += charset[secureRandomIndex(charset.length)]!;\n }\n\n // Shuffle the password\n const arr = password.split('');\n for (let i = arr.length - 1; i > 0; i--) {\n const j = secureRandomIndex(i + 1);\n [arr[i], arr[j]] = [arr[j]!, arr[i]!];\n }\n\n return arr.join('');\n}\n\nexport function calculateEntropy(password: string): number {\n if (password.length === 0) return 0;\n const uniqueChars = new Set(password.split('')).size;\n return Math.floor(password.length * Math.log2(uniqueChars));\n}\n\nexport function estimateStrength(password: string): 'weak' | 'fair' | 'strong' | 'very-strong' {\n const entropy = calculateEntropy(password);\n if (entropy < 28) return 'weak';\n if (entropy < 36) return 'fair';\n if (entropy < 60) return 'strong';\n return 'very-strong';\n}\n\n// Re-export randomBytes for testing\nexport { randomBytes };\n","/**\n * UUID v4 generator.\n * Zero-dependency, uses node:crypto for secure randomness.\n */\n\nimport { randomBytes } from 'node:crypto';\n\nconst UUID_V4_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/;\n\nexport function generateUUID(): string {\n const bytes = randomBytes(16);\n bytes[6] = (bytes[6]! & 0x0f) | 0x40; // version 4\n bytes[8] = (bytes[8]! & 0x3f) | 0x80; // variant 1\n\n const hex = Array.from(bytes, (b) => b!.toString(16).padStart(2, '0')).join('');\n\n return [\n hex.slice(0, 8),\n hex.slice(8, 12),\n hex.slice(12, 16),\n hex.slice(16, 20),\n hex.slice(20, 32),\n ].join('-');\n}\n\nexport function isValidUUID(id: string): boolean {\n return UUID_V4_REGEX.test(id);\n}\n\nexport function generateUUIDs(count: number): string[] {\n if (count < 1) throw new Error('Count must be at least 1');\n return Array.from({ length: count }, () => generateUUID());\n}\n\nexport { randomBytes };\n","/**\n * Base64 encode/decode.\n * Zero-dependency, uses Node Buffer.\n */\n\nexport function encode(input: string): string {\n return Buffer.from(input, 'utf-8').toString('base64');\n}\n\nexport function decode(input: string): string {\n return Buffer.from(input, 'base64').toString('utf-8');\n}\n\nexport function isBase64(str: string): boolean {\n if (str.length === 0) return false;\n const base64Regex = /^[A-Za-z0-9+/]*={0,2}$/;\n if (!base64Regex.test(str)) return false;\n return str.length % 4 === 0;\n}\n\nexport function encodeURLSafe(input: string): string {\n return encode(input).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/, '');\n}\n\nexport function decodeURLSafe(input: string): string {\n let base64 = input.replace(/-/g, '+').replace(/_/g, '/');\n while (base64.length % 4 !== 0) {\n base64 += '=';\n }\n return decode(base64);\n}\n","/**\n * URL encode/decode.\n * Zero-dependency, uses Node built-in encodeURIComponent/decodeURIComponent.\n */\n\nexport function encode(input: string): string {\n return encodeURIComponent(input);\n}\n\nexport function decode(input: string): string {\n return decodeURIComponent(input);\n}\n\nexport function encodeComponent(input: string): string {\n return encodeURIComponent(input);\n}\n\nexport function decodeComponent(input: string): string {\n return decodeURIComponent(input);\n}\n\nexport function isValidEncoded(str: string): boolean {\n try {\n decodeURIComponent(str);\n return true;\n } catch {\n return false;\n }\n}\n","/**\n * JWT decoder (header/payload parsing).\n * Zero-dependency, uses Node Buffer.\n */\n\nexport interface JWTHeader {\n alg?: string;\n typ?: string;\n [key: string]: unknown;\n}\n\nexport interface JWTPayload {\n sub?: string;\n iss?: string;\n aud?: string | string[];\n exp?: number;\n nbf?: number;\n iat?: number;\n jti?: string;\n [key: string]: unknown;\n}\n\nexport interface JWTDecodeResult {\n header: JWTHeader;\n payload: JWTPayload;\n signature: string;\n}\n\nexport interface JWTExpired {\n expired: boolean;\n expiresAt: Date | null;\n}\n\nfunction base64UrlDecode(str: string): string {\n let base64 = str.replace(/-/g, '+').replace(/_/g, '/');\n while (base64.length % 4 !== 0) {\n base64 += '=';\n }\n return Buffer.from(base64, 'base64').toString('utf-8');\n}\n\nexport function decode(token: string): JWTDecodeResult {\n const parts = token.split('.');\n if (parts.length !== 3) {\n throw new Error('Invalid JWT: token must have 3 parts separated by dots');\n }\n\n const [headerB64, payloadB64, signature] = parts;\n\n let header: JWTHeader;\n let payload: JWTPayload;\n\n try {\n header = JSON.parse(base64UrlDecode(headerB64!)) as JWTHeader;\n } catch {\n throw new Error('Invalid JWT: header is not valid JSON');\n }\n\n try {\n payload = JSON.parse(base64UrlDecode(payloadB64!)) as JWTPayload;\n } catch {\n throw new Error('Invalid JWT: payload is not valid JSON');\n }\n\n return {\n header,\n payload,\n signature: signature as string,\n };\n}\n\nexport function isExpired(token: string): JWTExpired {\n try {\n const { payload } = decode(token);\n if (payload.exp == null) {\n return { expired: false, expiresAt: null };\n }\n const now = Math.floor(Date.now() / 1000);\n const expired = payload.exp < now;\n return {\n expired,\n expiresAt: new Date(payload.exp * 1000),\n };\n } catch {\n return { expired: false, expiresAt: null };\n }\n}\n\nexport function isValidJWT(token: string): boolean {\n if (token.split('.').length !== 3) return false;\n try {\n decode(token);\n return true;\n } catch {\n return false;\n }\n}\n\nexport function getIssuer(token: string): string | null {\n try {\n const { payload } = decode(token);\n return payload.iss != null ? (payload.iss as string) : null;\n } catch {\n return null;\n }\n}\n\nexport function getSubject(token: string): string | null {\n try {\n const { payload } = decode(token);\n return payload.sub != null ? (payload.sub as string) : null;\n } catch {\n return null;\n }\n}\n\nexport function getExpiration(token: string): Date | null {\n try {\n const { payload } = decode(token);\n if (payload.exp == null) return null;\n return new Date(payload.exp * 1000);\n } catch {\n return null;\n }\n}\n","/**\n * JSON prettify / minify.\n * Zero-dependency.\n */\n\nexport function format(input: string, indent: number = 2): string {\n const parsed = JSON.parse(input);\n return JSON.stringify(parsed, null, indent);\n}\n\nexport function minify(input: string): string {\n const parsed = JSON.parse(input);\n return JSON.stringify(parsed);\n}\n\nexport function validate(input: string): { valid: boolean; error?: string; data?: unknown } {\n try {\n const data = JSON.parse(input);\n return { valid: true, data };\n } catch (err) {\n const message = (err as Error).message;\n return { valid: false, error: message };\n }\n}\n\nexport function sortByKeys(input: string, indent: number = 2): string {\n const parsed = JSON.parse(input) as Record<string, unknown>;\n const sorted: Record<string, unknown> = {};\n for (const key of Object.keys(parsed).sort()) {\n sorted[key] = parsed[key];\n }\n return JSON.stringify(sorted, null, indent);\n}\n\nexport function flatten(input: string): string {\n const parsed = JSON.parse(input);\n return JSON.stringify(parsed);\n}\n\nexport function prettyStringify(obj: unknown, indent: number = 2): string {\n return JSON.stringify(obj, null, indent);\n}\n","/**\n * String case converter.\n * Zero-dependency.\n */\n\nexport function camelCase(input: string): string {\n return input\n .replace(/[-_\\s]+(.)?/g, (_, c) => (c ? c.toUpperCase() : ''))\n .replace(/^[A-Z]/, (c) => c.toLowerCase());\n}\n\nexport function snakeCase(input: string): string {\n return input\n .replace(/([A-Z])/g, '_$1')\n .replace(/[-\\s]+/g, '_')\n .replace(/^_/, '')\n .toLowerCase();\n}\n\nexport function kebabCase(input: string): string {\n return input\n .replace(/([A-Z])/g, '-$1')\n .replace(/[_\\s]+/g, '-')\n .replace(/^-/, '')\n .toLowerCase();\n}\n\nexport function pascalCase(input: string): string {\n const camel = camelCase(input);\n return camel.charAt(0).toUpperCase() + camel.slice(1);\n}\n\nexport function constantCase(input: string): string {\n return snakeCase(input).toUpperCase();\n}\n\nexport function dotCase(input: string): string {\n return input\n .replace(/([A-Z])/g, '.$1')\n .replace(/[-_\\s]+/g, '.')\n .replace(/^\\.|\\.+$/g, '')\n .toLowerCase();\n}\n\nexport function titleCase(input: string): string {\n return input\n .split(/[-_\\s]+/)\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join(' ');\n}\n\nexport function sentenceCase(input: string): string {\n const result = input.replace(/[-_\\s]+/g, ' ').trim();\n return result.charAt(0).toUpperCase() + result.slice(1).toLowerCase();\n}\n\nexport function upperCase(input: string): string {\n return input.toUpperCase();\n}\n\nexport function lowerCase(input: string): string {\n return input.toLowerCase();\n}\n\nexport function reverseCase(input: string): string {\n return input\n .split('')\n .map((c) => (c === c.toUpperCase() ? c.toLowerCase() : c.toUpperCase()))\n .join('');\n}\n\nexport function slugify(input: string): string {\n return input\n .toLowerCase()\n .trim()\n .replace(/[^\\w\\s-]/g, '')\n .replace(/[-_\\s]+/g, '-')\n .replace(/^-+|-+$/g, '');\n}\n","/**\n * Color conversions: HEX <-> RGB <-> HSL.\n * Zero-dependency.\n */\n\nexport interface RGB {\n r: number;\n g: number;\n b: number;\n}\n\nexport interface HSL {\n h: number;\n s: number;\n l: number;\n}\n\nexport function hexToRgb(hex: string): RGB {\n const clean = hex.replace('#', '');\n if (clean.length !== 3 && clean.length !== 6) {\n throw new Error('Invalid HEX color: must be 3 or 6 characters');\n }\n const full = clean.length === 3\n ? clean.split('').map((c) => c + c).join('')\n : clean;\n const r = parseInt(full.slice(0, 2), 16);\n const g = parseInt(full.slice(2, 4), 16);\n const b = parseInt(full.slice(4, 6), 16);\n if (isNaN(r) || isNaN(g) || isNaN(b)) {\n throw new Error('Invalid HEX color: contains non-hex characters');\n }\n return { r, g, b };\n}\n\nexport function rgbToHex(r: number, g: number, b: number): string {\n const clamp = (n: number) => Math.max(0, Math.min(255, Math.round(n)));\n const toHex = (n: number) => clamp(n).toString(16).padStart(2, '0');\n return `#${toHex(r)}${toHex(g)}${toHex(b)}`;\n}\n\nexport function rgbToHsl(r: number, g: number, b: number): HSL {\n const rn = r / 255;\n const gn = g / 255;\n const bn = b / 255;\n const max = Math.max(rn, gn, bn);\n const min = Math.min(rn, gn, bn);\n const l = (max + min) / 2;\n let h = 0;\n let s = 0;\n\n if (max !== min) {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case rn:\n h = ((gn - bn) / d + (gn < bn ? 6 : 0)) / 6;\n break;\n case gn:\n h = ((bn - rn) / d + 2) / 6;\n break;\n case bn:\n h = ((rn - gn) / d + 4) / 6;\n break;\n }\n }\n\n return {\n h: Math.round(h * 360),\n s: Math.round(s * 100),\n l: Math.round(l * 100),\n };\n}\n\nexport function hslToRgb(h: number, s: number, l: number): RGB {\n const sn = s / 100;\n const ln = l / 100;\n\n if (sn === 0) {\n const val = Math.round(ln * 255);\n return { r: val, g: val, b: val };\n }\n\n const hue2rgb = (p: number, q: number, t: number): number => {\n let tn = t;\n if (tn < 0) tn += 1;\n if (tn > 1) tn -= 1;\n if (tn < 1 / 6) return p + (q - p) * 6 * tn;\n if (tn < 1 / 2) return q;\n if (tn < 2 / 3) return p + (q - p) * (2 / 3 - tn) * 6;\n return p;\n };\n\n const q = ln < 0.5 ? ln * (1 + sn) : ln + sn - ln * sn;\n const p = 2 * ln - q;\n const hNorm = h / 360;\n\n return {\n r: Math.round(hue2rgb(p, q, hNorm + 1 / 3) * 255),\n g: Math.round(hue2rgb(p, q, hNorm) * 255),\n b: Math.round(hue2rgb(p, q, hNorm - 1 / 3) * 255),\n };\n}\n\nexport function hexToHsl(hex: string): HSL {\n const { r, g, b } = hexToRgb(hex);\n return rgbToHsl(r, g, b);\n}\n\nexport function hslToHex(h: number, s: number, l: number): string {\n const { r, g, b } = hslToRgb(h, s, l);\n return rgbToHex(r, g, b);\n}\n\nexport function isValidHex(hex: string): boolean {\n return /^#?([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/.test(hex);\n}\n\nexport function isLightColor(hex: string): boolean {\n const { r, g, b } = hexToRgb(hex);\n const luminance = (0.299 * r + 0.587 * g + 0.114 * b) / 255;\n return luminance > 0.5;\n}\n\nexport function rgbToCSS(r: number, g: number, b: number): string {\n return `rgb(${r}, ${g}, ${b})`;\n}\n\nexport function hslToCSS(h: number, s: number, l: number): string {\n return `hsl(${h}, ${s}%, ${l}%)`;\n}\n","/**\n * Time conversions: Epoch <-> ISO <-> relative.\n * Zero-dependency.\n */\n\nexport function epochToIso(epoch: number): string {\n return new Date(epoch * 1000).toISOString();\n}\n\nexport function isoToEpoch(iso: string): number {\n const ms = new Date(iso).getTime();\n if (isNaN(ms)) {\n throw new Error('Invalid ISO date string');\n }\n return Math.floor(ms / 1000);\n}\n\nexport function epochToLocale(epoch: number, timezone?: string): string {\n const date = new Date(epoch * 1000);\n return date.toLocaleString('en-US', {\n timeZone: timezone,\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit',\n timeZoneName: 'short',\n });\n}\n\nexport function nowEpoch(): number {\n return Math.floor(Date.now() / 1000);\n}\n\nexport function nowIso(): string {\n return new Date().toISOString();\n}\n\nexport function msToSeconds(ms: number): number {\n return Math.floor(ms / 1000);\n}\n\nexport function secondsToMs(seconds: number): number {\n return seconds * 1000;\n}\n\nexport function timeAgo(epoch: number): string {\n const now = Math.floor(Date.now() / 1000);\n const diff = now - epoch;\n\n if (diff < 0) return 'in the future';\n\n const intervals: [string, number][] = [\n ['year', 31536000],\n ['month', 2592000],\n ['week', 604800],\n ['day', 86400],\n ['hour', 3600],\n ['minute', 60],\n ['second', 1],\n ];\n\n for (const [label, seconds] of intervals) {\n const count = Math.floor(diff / seconds);\n if (count >= 1) {\n return `${count} ${label}${count > 1 ? 's' : ''} ago`;\n }\n }\n\n return 'just now';\n}\n\nexport function isValidIsoDate(str: string): boolean {\n const date = new Date(str);\n return !isNaN(date.getTime());\n}\n\nexport function getDaysBetween(date1: string, date2: string): number {\n const d1 = new Date(date1).getTime();\n const d2 = new Date(date2).getTime();\n if (isNaN(d1) || isNaN(d2)) {\n throw new Error('Invalid date string');\n }\n return Math.abs(Math.floor((d2 - d1) / (1000 * 60 * 60 * 24)));\n}\n\nexport function formatDate(iso: string, format: string): string {\n const date = new Date(iso);\n if (isNaN(date.getTime())) throw new Error('Invalid date string');\n\n return format\n .replace('YYYY', date.getFullYear().toString())\n .replace('MM', String(date.getMonth() + 1).padStart(2, '0'))\n .replace('DD', String(date.getDate()).padStart(2, '0'))\n .replace('HH', String(date.getHours()).padStart(2, '0'))\n .replace('mm', String(date.getMinutes()).padStart(2, '0'))\n .replace('ss', String(date.getSeconds()).padStart(2, '0'));\n}\n\nexport function getWeekNumber(iso: string): number {\n const date = new Date(iso);\n if (isNaN(date.getTime())) throw new Error('Invalid date string');\n const d = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));\n const dayNum = d.getUTCDay() || 7;\n d.setUTCDate(d.getUTCDate() + 4 - dayNum);\n const yearStart = new Date(Date.UTC(d.getUTCFullYear(), 0, 1));\n return Math.ceil(((d.getTime() - yearStart.getTime()) / 86400000 + 1) / 7);\n}\n\nexport function isLeapYear(year: number): boolean {\n return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n}\n","/**\n * devknife - Library Entry Point\n * The ultimate zero-dependency, 50-in-1 developer Swiss Army knife.\n *\n * @example\n * import { generateUUID, rgbToHex, base64Encode } from 'devknife';\n */\n\n// Re-export everything from tools\nexport * from './tools/index.js';\n\n// Crypto - grouped exports\nexport const hash = {\n md5: (input: string) => import('./tools/crypto/hash.js').then(m => m.md5(input)),\n sha1: (input: string) => import('./tools/crypto/hash.js').then(m => m.sha1(input)),\n sha256: (input: string) => import('./tools/crypto/hash.js').then(m => m.sha256(input)),\n sha512: (input: string) => import('./tools/crypto/hash.js').then(m => m.sha512(input)),\n};\n\n// Generators - grouped exports\nexport const uuid = {\n v4: () => import('./tools/generators/uuid.js').then(m => m.generateUUID()),\n};\n\nexport const password = {\n generate: (options?: import('./tools/crypto/password.js').PasswordOptions) =>\n import('./tools/crypto/password.js').then(m => m.generatePassword(options)),\n};\n\n// Encoders - grouped exports\nexport const base64 = {\n encode: (input: string) => import('./tools/encoders/base64.js').then(m => m.encode(input)),\n decode: (input: string) => import('./tools/encoders/base64.js').then(m => m.decode(input)),\n};\n\nexport const url = {\n encode: (input: string) => import('./tools/encoders/url.js').then(m => m.encode(input)),\n decode: (input: string) => import('./tools/encoders/url.js').then(m => m.decode(input)),\n};\n\nexport const jwt = {\n decode: (token: string) => import('./tools/encoders/jwt.js').then(m => m.decode(token)),\n};\n\nexport const json = {\n format: (input: string) => import('./tools/formatters/json.js').then(m => m.format(input)),\n minify: (input: string) => import('./tools/formatters/json.js').then(m => m.minify(input)),\n};\n\n// Formatters - grouped exports\nexport const text = {\n camelCase: (input: string) => import('./tools/formatters/text.js').then(m => m.camelCase(input)),\n snakeCase: (input: string) => import('./tools/formatters/text.js').then(m => m.snakeCase(input)),\n kebabCase: (input: string) => import('./tools/formatters/text.js').then(m => m.kebabCase(input)),\n pascalCase: (input: string) => import('./tools/formatters/text.js').then(m => m.pascalCase(input)),\n};\n\n// Converters - grouped exports\nexport const color = {\n hexToRgb: (hex: string) => import('./tools/converters/color.js').then(m => m.hexToRgb(hex)),\n rgbToHex: (r: number, g: number, b: number) => import('./tools/converters/color.js').then(m => m.rgbToHex(r, g, b)),\n};\n\nexport const time = {\n epochToIso: (epoch: number) => import('./tools/converters/time.js').then(m => m.epochToIso(epoch)),\n isoToEpoch: (iso: string) => import('./tools/converters/time.js').then(m => m.isoToEpoch(iso)),\n};\n","/**\n * devknife - Tools index\n * Re-exports all tool modules.\n */\n\n// Crypto\nexport { hash, md5, sha1, sha256, sha512, isSupportedAlgorithm, getSupportedAlgorithms, hashFile } from './crypto/hash.js';\nexport type { HashAlgorithm } from './crypto/hash.js';\nexport { generatePassword, calculateEntropy, estimateStrength } from './crypto/password.js';\nexport type { PasswordOptions } from './crypto/password.js';\n\n// Generators\nexport { generateUUID, isValidUUID, generateUUIDs } from './generators/uuid.js';\nexport { generateNanoID, isNanoIDValid, generateNanoIDs } from './generators/nanoid.js';\nexport type { NanoIDOptions } from './generators/nanoid.js';\nexport { word as loremWord, sentence as loremSentence, paragraph as loremParagraph, paragraphs as loremParagraphs, title as loremTitle } from './generators/lorem.js';\n\n// Encoders\nexport { encode as base64Encode, decode as base64Decode, isBase64, encodeURLSafe as base64EncodeURLSafe, decodeURLSafe as base64DecodeURLSafe } from './encoders/base64.js';\nexport { encode as urlEncode, decode as urlDecode, encodeComponent as urlEncodeComponent, decodeComponent as urlDecodeComponent, isValidEncoded } from './encoders/url.js';\nexport { encode as htmlEncode, decode as htmlDecode, encodeAttribute as htmlEncodeAttribute, stripTags } from './encoders/html.js';\nexport { decode as jwtDecode, isExpired as jwtIsExpired, isValidJWT, getIssuer as jwtGetIssuer, getSubject as jwtGetSubject, getExpiration as jwtGetExpiration } from './encoders/jwt.js';\nexport type { JWTHeader, JWTPayload, JWTDecodeResult, JWTExpired } from './encoders/jwt.js';\n\n// Formatters\nexport { format as jsonFormat, minify as jsonMinify, validate as jsonValidate, sortByKeys as jsonSortByKeys, flatten as jsonFlatten, prettyStringify } from './formatters/json.js';\nexport { camelCase, snakeCase, kebabCase, pascalCase, constantCase, dotCase, titleCase, sentenceCase, upperCase, lowerCase, reverseCase, slugify } from './formatters/text.js';\n\n// Converters\nexport { hexToRgb, rgbToHex, rgbToHsl, hslToRgb, hexToHsl, hslToHex, isValidHex, isLightColor, rgbToCSS, hslToCSS } from './converters/color.js';\nexport type { RGB, HSL } from './converters/color.js';\nexport { epochToIso, isoToEpoch, epochToLocale, nowEpoch, nowIso, msToSeconds, secondsToMs, timeAgo, isValidIsoDate, getDaysBetween, formatDate, getWeekNumber, isLeapYear } from './converters/time.js';\nexport { decimalToBinary, binaryToDecimal, decimalToHex, hexToDecimal, decimalToOctal, octalToDecimal, hexToBinary, binaryToHex, toBase, fromBase, isBinary, isHex, isOctal, formatBytes } from './converters/number.js';\n\n// Network\nexport { isValidIPv4, isValidIPv6, isValidIP, getLocalIPs, getLocalIPv4, isPrivateIP, isReservedIP, getHostname } from './network/ip.js';\nexport { isValidMAC, generateMAC, normalizeMAC, macToHex } from './network/mac.js';\n","/**\n * Zero-dependency NanoID-like generator.\n * Uses node:crypto for secure randomness.\n */\n\nimport { webcrypto } from 'node:crypto';\n\nconst DEFAULT_ALPHABET = '-_0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\nconst DEFAULT_SIZE = 21;\n\nfunction secureRandom(max: number): number {\n const array = new Uint32Array(1);\n webcrypto.getRandomValues(array);\n return array[0]! % max;\n}\n\nexport interface NanoIDOptions {\n size?: number;\n alphabet?: string;\n}\n\nexport function generateNanoID(options: NanoIDOptions = {}): string {\n const size = options.size ?? DEFAULT_SIZE;\n const alphabet = options.alphabet ?? DEFAULT_ALPHABET;\n\n if (alphabet.length === 0) {\n throw new Error('Alphabet must not be empty');\n }\n\n let id = '';\n for (let i = 0; i < size; i++) {\n id += alphabet[secureRandom(alphabet.length)]!;\n }\n return id;\n}\n\nexport function isNanoIDValid(id: string, options: NanoIDOptions = {}): boolean {\n const size = options.size ?? DEFAULT_SIZE;\n const alphabet = options.alphabet ?? DEFAULT_ALPHABET;\n if (id.length !== size) return false;\n return id.split('').every((c) => alphabet.includes(c));\n}\n\nexport function generateNanoIDs(count: number, options: NanoIDOptions = {}): string[] {\n if (count < 1) throw new Error('Count must be at least 1');\n return Array.from({ length: count }, () => generateNanoID(options));\n}\n","/**\n * Lorem Ipsum text generator.\n * Zero-dependency.\n */\n\nconst LOREM_WORDS = [\n 'lorem', 'ipsum', 'dolor', 'sit', 'amet', 'consectetur', 'adipiscing', 'elit',\n 'sed', 'do', 'eiusmod', 'tempor', 'incididunt', 'ut', 'labore', 'et', 'dolore',\n 'magna', 'aliqua', 'enim', 'ad', 'minim', 'veniam', 'quis', 'nostrud',\n 'exercitation', 'ullamco', 'laboris', 'nisi', 'aliquip', 'ex', 'ea', 'commodo',\n 'consequat', 'duis', 'aute', 'irure', 'in', 'reprehenderit', 'voluptate',\n 'velit', 'esse', 'cillum', 'fugiat', 'nulla', 'pariatur', 'excepteur', 'sint',\n 'occaecat', 'cupidatat', 'non', 'proident', 'sunt', 'culpa', 'qui', 'officia',\n 'deserunt', 'mollit', 'anim', 'id', 'est', 'laborum', 'perspiciatis', 'unde',\n 'omnis', 'iste', 'natus', 'error', 'voluptatem', 'accusantium', 'doloremque',\n 'laudantium', 'totam', 'rem', 'aperiam', 'eaque', 'ipsa', 'quae', 'ab', 'illo',\n 'inventore', 'veritatis', 'quasi', 'architecto', 'beatae', 'vitae', 'dicta',\n 'explicabo', 'nemo', 'ipsam', 'voluptas', 'aspernatur', 'aut', 'odit',\n 'fugit', 'consequuntur', 'magni', 'dolores', 'eos', 'ratione', 'sequi', 'nesciunt',\n];\n\nfunction randomIndex(max: number): number {\n return Math.floor(Math.random() * max);\n}\n\nfunction capitalize(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\nexport function word(count: number = 1): string {\n const words: string[] = [];\n for (let i = 0; i < count; i++) {\n words.push(LOREM_WORDS[randomIndex(LOREM_WORDS.length)]!);\n }\n return words.join(' ');\n}\n\nexport function sentence(wordCount?: number): string {\n const count = wordCount ?? (8 + Math.floor(Math.random() * 8));\n const words = word(count);\n return capitalize(words) + '.';\n}\n\nexport function paragraph(sentenceCount?: number): string {\n const count = sentenceCount ?? (4 + Math.floor(Math.random() * 4));\n const sentences: string[] = [];\n for (let i = 0; i < count; i++) {\n sentences.push(sentence());\n }\n return sentences.join(' ');\n}\n\nexport function paragraphs(count: number = 1, separator: string = '\\n\\n'): string {\n const result: string[] = [];\n for (let i = 0; i < count; i++) {\n result.push(paragraph());\n }\n return result.join(separator);\n}\n\nexport function title(wordCount?: number): string {\n const count = wordCount ?? (3 + Math.floor(Math.random() * 4));\n const words = word(count);\n return words\n .split(' ')\n .map((w) => capitalize(w))\n .join(' ');\n}\n","/**\n * HTML entity encode/decode.\n * Zero-dependency.\n */\n\nconst ENTITY_MAP: Record<string, string> = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#39;',\n '/': '&#x2F;',\n '`': '&#x60;',\n '=': '&#x3D;',\n};\n\nconst DECODE_MAP: Record<string, string> = {\n '&amp;': '&',\n '&lt;': '<',\n '&gt;': '>',\n '&quot;': '\"',\n '&#39;': \"'\",\n '&#x27;': \"'\",\n '&#x2F;': '/',\n '&#x60;': '`',\n '&#x3D;': '=',\n '&apos;': \"'\",\n};\n\nconst ENTITY_REGEX = /[&<>\"'`=/]/g;\nconst DECODE_REGEX = /&(?:amp|lt|gt|quot|#39|#x27|#x2F|#x60|#x3D|apos);/g;\n\nexport function encode(input: string): string {\n return input.replace(ENTITY_REGEX, (char) => ENTITY_MAP[char] as string);\n}\n\nexport function decode(input: string): string {\n return input.replace(DECODE_REGEX, (entity) => DECODE_MAP[entity] as string);\n}\n\nexport function encodeAttribute(input: string): string {\n return input\n .replace(/&/g, '&amp;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#39;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;');\n}\n\nexport function stripTags(input: string): string {\n return input.replace(/<[^>]*>/g, '');\n}\n","/**\n * Number base conversions: Binary/Hex/Octal/Decimal.\n * Zero-dependency.\n */\n\nexport function decimalToBinary(decimal: number): string {\n if (!Number.isInteger(decimal)) throw new Error('Input must be an integer');\n return decimal.toString(2);\n}\n\nexport function binaryToDecimal(binary: string): number {\n if (!/^[01]+$/.test(binary)) throw new Error('Invalid binary string');\n return parseInt(binary, 2);\n}\n\nexport function decimalToHex(decimal: number): string {\n if (!Number.isInteger(decimal)) throw new Error('Input must be an integer');\n return decimal.toString(16);\n}\n\nexport function hexToDecimal(hex: string): number {\n if (!/^[0-9a-fA-F]+$/.test(hex)) throw new Error('Invalid hexadecimal string');\n return parseInt(hex, 16);\n}\n\nexport function decimalToOctal(decimal: number): number {\n if (!Number.isInteger(decimal)) throw new Error('Input must be an integer');\n return parseInt(decimal.toString(8), 10);\n}\n\nexport function octalToDecimal(octal: string): number {\n if (!/^[0-7]+$/.test(octal)) throw new Error('Invalid octal string');\n return parseInt(octal, 8);\n}\n\nexport function hexToBinary(hex: string): string {\n const decimal = hexToDecimal(hex);\n return decimalToBinary(decimal);\n}\n\nexport function binaryToHex(binary: string): string {\n const decimal = binaryToDecimal(binary);\n return decimalToHex(decimal);\n}\n\nexport function toBase(num: number, base: number): string {\n if (base < 2 || base > 36) throw new Error('Base must be between 2 and 36');\n if (!Number.isInteger(num)) throw new Error('Input must be an integer');\n return num.toString(base);\n}\n\nexport function fromBase(str: string, base: number): number {\n if (base < 2 || base > 36) throw new Error('Base must be between 2 and 36');\n return parseInt(str, base);\n}\n\nexport function isBinary(str: string): boolean {\n return /^[01]+$/.test(str);\n}\n\nexport function isHex(str: string): boolean {\n return /^[0-9a-fA-F]+$/.test(str);\n}\n\nexport function isOctal(str: string): boolean {\n return /^[0-7]+$/.test(str);\n}\n\nexport function formatBytes(bytes: number, decimals: number = 2): string {\n if (bytes === 0) return '0 Bytes';\n if (bytes < 0) throw new Error('Bytes cannot be negative');\n const k = 1024;\n const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n const i = Math.min(Math.floor(Math.log(bytes) / Math.log(k)), sizes.length - 1);\n const sizeStr = sizes[i]!;\n return `${parseFloat((bytes / Math.pow(k, i)).toFixed(decimals))} ${sizeStr}`;\n}\n","/**\n * IP address utilities.\n * Zero-dependency for validation; os module for local IPs.\n */\n\nimport * as os from 'node:os';\n\nconst IPv4_REGEX = /^(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$/;\n\nexport function isValidIPv4(ip: string): boolean {\n return IPv4_REGEX.test(ip);\n}\n\nconst IPv6_REGEX = /^(?:[0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$/;\n\nexport function isValidIPv6(ip: string): boolean {\n // Also handle :: shorthand\n if (ip.includes('::')) {\n const parts = ip.split('::');\n if (parts.length !== 2) return false;\n const left = parts[0]!.split(':').filter(Boolean);\n const right = parts[1]!.split(':').filter(Boolean);\n return left.length + right.length <= 7 && left.length + right.length >= 1;\n }\n return IPv6_REGEX.test(ip);\n}\n\nexport function isValidIP(ip: string): boolean {\n return isValidIPv4(ip) || isValidIPv6(ip);\n}\n\nexport function getLocalIPs(): string[] {\n const interfaces = os.networkInterfaces();\n const ips: string[] = [];\n for (const name of Object.keys(interfaces)) {\n const iface = interfaces[name];\n if (iface === undefined) continue;\n for (const addr of iface) {\n if (addr.family === 'IPv4' && !addr.internal) {\n ips.push(addr.address);\n }\n }\n }\n return ips;\n}\n\nexport function getLocalIPv4(): string | null {\n const ips = getLocalIPs();\n return ips[0] ?? null;\n}\n\nexport function isPrivateIP(ip: string): boolean {\n if (!isValidIPv4(ip)) return false;\n const parts = ip.split('.').map(Number);\n return (\n (parts[0] === 10) ||\n (parts[0] === 172 && parts[1]! >= 16 && parts[1]! <= 31) ||\n (parts[0] === 192 && parts[1] === 168) ||\n (parts[0] === 127)\n );\n}\n\nexport function isReservedIP(ip: string): boolean {\n if (!isValidIPv4(ip)) return false;\n const parts = ip.split('.').map(Number);\n if (parts[0] === 0) return true;\n if (parts[0] === 127) return true;\n if (parts[0] === 169 && parts[1] === 254) return true;\n if (parts[0]! >= 224) return true;\n return false;\n}\n\nexport function getHostname(): string {\n return os.hostname();\n}\n","/**\n * MAC address generator and validator.\n * Zero-dependency.\n */\n\nimport { randomBytes } from 'node:crypto';\n\nconst MAC_REGEX = /^([0-9A-Fa-f]{2}[:-]){5}[0-9A-Fa-f]{2}$/;\n\nexport function isValidMAC(mac: string): boolean {\n return MAC_REGEX.test(mac);\n}\n\nexport function generateMAC(separator: string = ':'): string {\n const bytes = Array.from(randomBytes(6), (b) => b!.toString(16).padStart(2, '0').toUpperCase());\n // Set locally administered bit, unicast\n bytes[0] = ((parseInt(bytes[0]!, 16) & 0xfe) | 0x02).toString(16).padStart(2, '0').toUpperCase();\n return bytes.join(separator);\n}\n\nexport function normalizeMAC(mac: string, separator: string = ':'): string {\n const clean = mac.replace(/[-:]/g, '').toUpperCase();\n if (clean.length !== 12) throw new Error('Invalid MAC address length');\n return clean.match(/.{2}/g)!.join(separator);\n}\n\nexport function macToHex(mac: string): string {\n const clean = mac.replace(/[-:]/g, '').toLowerCase();\n if (clean.length !== 12) throw new Error('Invalid MAC address');\n return `0x${clean}`;\n}\n\nexport { randomBytes };\n"],"mappings":"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","names":["hash_exports","__export","getSupportedAlgorithms","hash","hashFile","isSupportedAlgorithm","md5","sha1","sha256","sha512","input","algorithm","algo","SUPPORTED_ALGORITHMS","content","import_node_crypto","init_hash","__esmMin","password_exports","__export","calculateEntropy","estimateStrength","generatePassword","filterAmbiguous","chars","exclude","c","AMBIGUOUS","secureRandomIndex","max","array","options","opts","DEFAULT_OPTIONS","charset","UPPERCASE","LOWERCASE","NUMBERS","SYMBOLS","password","pool","remaining","i","arr","j","uniqueChars","entropy","import_node_crypto","init_password","__esmMin","uuid_exports","__export","generateUUID","generateUUIDs","isValidUUID","bytes","hex","b","id","UUID_V4_REGEX","count","import_node_crypto","init_uuid","__esmMin","base64_exports","__export","decode","decodeURLSafe","encode","encodeURLSafe","isBase64","input","str","base64","init_base64","__esmMin","url_exports","__export","decode","decodeComponent","encode","encodeComponent","isValidEncoded","input","str","init_url","__esmMin","jwt_exports","__export","decode","getExpiration","getIssuer","getSubject","isExpired","isValidJWT","base64UrlDecode","str","base64","token","parts","headerB64","payloadB64","signature","header","payload","now","init_jwt","__esmMin","json_exports","__export","flatten","format","minify","prettyStringify","sortByKeys","validate","input","indent","parsed","err","sorted","key","obj","init_json","__esmMin","text_exports","__export","camelCase","constantCase","dotCase","kebabCase","lowerCase","pascalCase","reverseCase","sentenceCase","slugify","snakeCase","titleCase","upperCase","input","_","c","camel","word","result","init_text","__esmMin","color_exports","__export","hexToHsl","hexToRgb","hslToCSS","hslToHex","hslToRgb","isLightColor","isValidHex","rgbToCSS","rgbToHex","rgbToHsl","hex","clean","full","c","r","g","b","clamp","n","toHex","rn","gn","bn","max","min","l","h","s","d","sn","ln","val","hue2rgb","p","q","t","tn","hNorm","init_color","__esmMin","time_exports","__export","epochToIso","epochToLocale","formatDate","getDaysBetween","getWeekNumber","isLeapYear","isValidIsoDate","isoToEpoch","msToSeconds","nowEpoch","nowIso","secondsToMs","timeAgo","epoch","iso","ms","timezone","seconds","diff","intervals","label","count","str","date","date1","date2","d1","d2","format","d","dayNum","yearStart","year","init_time","__esmMin","index_exports","__export","base64","decode","decodeURLSafe","encode","encodeURLSafe","binaryToDecimal","binaryToHex","calculateEntropy","camelCase","color","constantCase","decimalToBinary","decimalToHex","decimalToOctal","dotCase","epochToIso","epochToLocale","estimateStrength","formatBytes","formatDate","fromBase","generateMAC","generateNanoID","generateNanoIDs","generatePassword","generateUUID","generateUUIDs","getDaysBetween","getHostname","getLocalIPs","getLocalIPv4","getSupportedAlgorithms","getWeekNumber","hash","hashFile","hexToBinary","hexToDecimal","hexToHsl","hexToRgb","hslToCSS","hslToHex","hslToRgb","encodeAttribute","isBase64","isBinary","isHex","isLeapYear","isLightColor","isNanoIDValid","isOctal","isPrivateIP","isReservedIP","isSupportedAlgorithm","isValidEncoded","isValidHex","isValidIP","isValidIPv4","isValidIPv6","isValidIsoDate","isValidJWT","isValidMAC","isValidUUID","isoToEpoch","json","flatten","format","minify","sortByKeys","validate","jwt","getExpiration","getIssuer","getSubject","isExpired","kebabCase","paragraph","paragraphs","sentence","title","word","lowerCase","macToHex","md5","msToSeconds","normalizeMAC","nowEpoch","nowIso","octalToDecimal","pascalCase","password","prettyStringify","reverseCase","rgbToCSS","rgbToHex","rgbToHsl","secondsToMs","sentenceCase","sha1","sha256","sha512","slugify","snakeCase","stripTags","text","time","timeAgo","titleCase","toBase","upperCase","url","decodeComponent","encodeComponent","uuid","__toCommonJS","init_hash","init_password","init_uuid","import_node_crypto","DEFAULT_ALPHABET","DEFAULT_SIZE","secureRandom","max","array","generateNanoID","options","size","alphabet","id","i","isNanoIDValid","c","generateNanoIDs","count","LOREM_WORDS","randomIndex","max","capitalize","str","word","count","words","i","sentence","wordCount","paragraph","sentenceCount","sentences","paragraphs","separator","result","title","w","init_base64","init_url","ENTITY_MAP","DECODE_MAP","ENTITY_REGEX","DECODE_REGEX","encode","input","char","decode","entity","encodeAttribute","stripTags","init_jwt","init_json","init_text","init_color","init_time","decimalToBinary","decimal","binaryToDecimal","binary","decimalToHex","hexToDecimal","hex","decimalToOctal","octalToDecimal","octal","hexToBinary","binaryToHex","toBase","num","base","fromBase","str","isBinary","isHex","isOctal","formatBytes","bytes","decimals","k","sizes","i","sizeStr","os","IPv4_REGEX","isValidIPv4","ip","IPv6_REGEX","isValidIPv6","parts","left","right","isValidIP","getLocalIPs","interfaces","ips","name","iface","addr","getLocalIPv4","isPrivateIP","isReservedIP","getHostname","import_node_crypto","MAC_REGEX","isValidMAC","mac","generateMAC","separator","bytes","b","normalizeMAC","clean","macToHex","hash","input","m","uuid","password","options","base64","url","jwt","token","json","text","color","hex","r","g","b","time","epoch","iso"]}
@@ -0,0 +1,285 @@
1
+ /**
2
+ * Secure password generator.
3
+ * Zero-dependency, uses only node:crypto for secure randomness.
4
+ */
5
+
6
+ interface PasswordOptions {
7
+ length?: number;
8
+ uppercase?: boolean;
9
+ lowercase?: boolean;
10
+ numbers?: boolean;
11
+ symbols?: boolean;
12
+ excludeAmbiguous?: boolean;
13
+ }
14
+ declare function generatePassword(options?: PasswordOptions): string;
15
+ declare function calculateEntropy(password: string): number;
16
+ declare function estimateStrength(password: string): 'weak' | 'fair' | 'strong' | 'very-strong';
17
+
18
+ /**
19
+ * Hash generators: MD5, SHA-1, SHA-256, SHA-512
20
+ * Zero-dependency, uses only node:crypto
21
+ */
22
+ type HashAlgorithm = 'md5' | 'sha1' | 'sha256' | 'sha512';
23
+ declare function md5(input: string): string;
24
+ declare function sha1(input: string): string;
25
+ declare function sha256(input: string): string;
26
+ declare function sha512(input: string): string;
27
+ declare function isSupportedAlgorithm(algo: string): algo is HashAlgorithm;
28
+ declare function getSupportedAlgorithms(): readonly HashAlgorithm[];
29
+ declare function hashFile(content: string | Buffer, algorithm?: HashAlgorithm): string;
30
+
31
+ /**
32
+ * UUID v4 generator.
33
+ * Zero-dependency, uses node:crypto for secure randomness.
34
+ */
35
+
36
+ declare function generateUUID(): string;
37
+ declare function isValidUUID(id: string): boolean;
38
+ declare function generateUUIDs(count: number): string[];
39
+
40
+ /**
41
+ * Zero-dependency NanoID-like generator.
42
+ * Uses node:crypto for secure randomness.
43
+ */
44
+ interface NanoIDOptions {
45
+ size?: number;
46
+ alphabet?: string;
47
+ }
48
+ declare function generateNanoID(options?: NanoIDOptions): string;
49
+ declare function isNanoIDValid(id: string, options?: NanoIDOptions): boolean;
50
+ declare function generateNanoIDs(count: number, options?: NanoIDOptions): string[];
51
+
52
+ /**
53
+ * Lorem Ipsum text generator.
54
+ * Zero-dependency.
55
+ */
56
+ declare function word(count?: number): string;
57
+ declare function sentence(wordCount?: number): string;
58
+ declare function paragraph(sentenceCount?: number): string;
59
+ declare function paragraphs(count?: number, separator?: string): string;
60
+ declare function title(wordCount?: number): string;
61
+
62
+ /**
63
+ * Base64 encode/decode.
64
+ * Zero-dependency, uses Node Buffer.
65
+ */
66
+ declare function encode$2(input: string): string;
67
+ declare function decode$3(input: string): string;
68
+ declare function isBase64(str: string): boolean;
69
+ declare function encodeURLSafe(input: string): string;
70
+ declare function decodeURLSafe(input: string): string;
71
+
72
+ /**
73
+ * URL encode/decode.
74
+ * Zero-dependency, uses Node built-in encodeURIComponent/decodeURIComponent.
75
+ */
76
+ declare function encode$1(input: string): string;
77
+ declare function decode$2(input: string): string;
78
+ declare function encodeComponent(input: string): string;
79
+ declare function decodeComponent(input: string): string;
80
+ declare function isValidEncoded(str: string): boolean;
81
+
82
+ /**
83
+ * HTML entity encode/decode.
84
+ * Zero-dependency.
85
+ */
86
+ declare function encode(input: string): string;
87
+ declare function decode$1(input: string): string;
88
+ declare function encodeAttribute(input: string): string;
89
+ declare function stripTags(input: string): string;
90
+
91
+ /**
92
+ * JWT decoder (header/payload parsing).
93
+ * Zero-dependency, uses Node Buffer.
94
+ */
95
+ interface JWTHeader {
96
+ alg?: string;
97
+ typ?: string;
98
+ [key: string]: unknown;
99
+ }
100
+ interface JWTPayload {
101
+ sub?: string;
102
+ iss?: string;
103
+ aud?: string | string[];
104
+ exp?: number;
105
+ nbf?: number;
106
+ iat?: number;
107
+ jti?: string;
108
+ [key: string]: unknown;
109
+ }
110
+ interface JWTDecodeResult {
111
+ header: JWTHeader;
112
+ payload: JWTPayload;
113
+ signature: string;
114
+ }
115
+ interface JWTExpired {
116
+ expired: boolean;
117
+ expiresAt: Date | null;
118
+ }
119
+ declare function decode(token: string): JWTDecodeResult;
120
+ declare function isExpired(token: string): JWTExpired;
121
+ declare function isValidJWT(token: string): boolean;
122
+ declare function getIssuer(token: string): string | null;
123
+ declare function getSubject(token: string): string | null;
124
+ declare function getExpiration(token: string): Date | null;
125
+
126
+ /**
127
+ * JSON prettify / minify.
128
+ * Zero-dependency.
129
+ */
130
+ declare function format(input: string, indent?: number): string;
131
+ declare function minify(input: string): string;
132
+ declare function validate(input: string): {
133
+ valid: boolean;
134
+ error?: string;
135
+ data?: unknown;
136
+ };
137
+ declare function sortByKeys(input: string, indent?: number): string;
138
+ declare function flatten(input: string): string;
139
+ declare function prettyStringify(obj: unknown, indent?: number): string;
140
+
141
+ /**
142
+ * String case converter.
143
+ * Zero-dependency.
144
+ */
145
+ declare function camelCase(input: string): string;
146
+ declare function snakeCase(input: string): string;
147
+ declare function kebabCase(input: string): string;
148
+ declare function pascalCase(input: string): string;
149
+ declare function constantCase(input: string): string;
150
+ declare function dotCase(input: string): string;
151
+ declare function titleCase(input: string): string;
152
+ declare function sentenceCase(input: string): string;
153
+ declare function upperCase(input: string): string;
154
+ declare function lowerCase(input: string): string;
155
+ declare function reverseCase(input: string): string;
156
+ declare function slugify(input: string): string;
157
+
158
+ /**
159
+ * Color conversions: HEX <-> RGB <-> HSL.
160
+ * Zero-dependency.
161
+ */
162
+ interface RGB {
163
+ r: number;
164
+ g: number;
165
+ b: number;
166
+ }
167
+ interface HSL {
168
+ h: number;
169
+ s: number;
170
+ l: number;
171
+ }
172
+ declare function hexToRgb(hex: string): RGB;
173
+ declare function rgbToHex(r: number, g: number, b: number): string;
174
+ declare function rgbToHsl(r: number, g: number, b: number): HSL;
175
+ declare function hslToRgb(h: number, s: number, l: number): RGB;
176
+ declare function hexToHsl(hex: string): HSL;
177
+ declare function hslToHex(h: number, s: number, l: number): string;
178
+ declare function isValidHex(hex: string): boolean;
179
+ declare function isLightColor(hex: string): boolean;
180
+ declare function rgbToCSS(r: number, g: number, b: number): string;
181
+ declare function hslToCSS(h: number, s: number, l: number): string;
182
+
183
+ /**
184
+ * Time conversions: Epoch <-> ISO <-> relative.
185
+ * Zero-dependency.
186
+ */
187
+ declare function epochToIso(epoch: number): string;
188
+ declare function isoToEpoch(iso: string): number;
189
+ declare function epochToLocale(epoch: number, timezone?: string): string;
190
+ declare function nowEpoch(): number;
191
+ declare function nowIso(): string;
192
+ declare function msToSeconds(ms: number): number;
193
+ declare function secondsToMs(seconds: number): number;
194
+ declare function timeAgo(epoch: number): string;
195
+ declare function isValidIsoDate(str: string): boolean;
196
+ declare function getDaysBetween(date1: string, date2: string): number;
197
+ declare function formatDate(iso: string, format: string): string;
198
+ declare function getWeekNumber(iso: string): number;
199
+ declare function isLeapYear(year: number): boolean;
200
+
201
+ /**
202
+ * Number base conversions: Binary/Hex/Octal/Decimal.
203
+ * Zero-dependency.
204
+ */
205
+ declare function decimalToBinary(decimal: number): string;
206
+ declare function binaryToDecimal(binary: string): number;
207
+ declare function decimalToHex(decimal: number): string;
208
+ declare function hexToDecimal(hex: string): number;
209
+ declare function decimalToOctal(decimal: number): number;
210
+ declare function octalToDecimal(octal: string): number;
211
+ declare function hexToBinary(hex: string): string;
212
+ declare function binaryToHex(binary: string): string;
213
+ declare function toBase(num: number, base: number): string;
214
+ declare function fromBase(str: string, base: number): number;
215
+ declare function isBinary(str: string): boolean;
216
+ declare function isHex(str: string): boolean;
217
+ declare function isOctal(str: string): boolean;
218
+ declare function formatBytes(bytes: number, decimals?: number): string;
219
+
220
+ /**
221
+ * IP address utilities.
222
+ * Zero-dependency for validation; os module for local IPs.
223
+ */
224
+ declare function isValidIPv4(ip: string): boolean;
225
+ declare function isValidIPv6(ip: string): boolean;
226
+ declare function isValidIP(ip: string): boolean;
227
+ declare function getLocalIPs(): string[];
228
+ declare function getLocalIPv4(): string | null;
229
+ declare function isPrivateIP(ip: string): boolean;
230
+ declare function isReservedIP(ip: string): boolean;
231
+ declare function getHostname(): string;
232
+
233
+ /**
234
+ * MAC address generator and validator.
235
+ * Zero-dependency.
236
+ */
237
+
238
+ declare function isValidMAC(mac: string): boolean;
239
+ declare function generateMAC(separator?: string): string;
240
+ declare function normalizeMAC(mac: string, separator?: string): string;
241
+ declare function macToHex(mac: string): string;
242
+
243
+ declare const hash: {
244
+ md5: (input: string) => Promise<string>;
245
+ sha1: (input: string) => Promise<string>;
246
+ sha256: (input: string) => Promise<string>;
247
+ sha512: (input: string) => Promise<string>;
248
+ };
249
+ declare const uuid: {
250
+ v4: () => Promise<string>;
251
+ };
252
+ declare const password: {
253
+ generate: (options?: PasswordOptions) => Promise<string>;
254
+ };
255
+ declare const base64: {
256
+ encode: (input: string) => Promise<string>;
257
+ decode: (input: string) => Promise<string>;
258
+ };
259
+ declare const url: {
260
+ encode: (input: string) => Promise<string>;
261
+ decode: (input: string) => Promise<string>;
262
+ };
263
+ declare const jwt: {
264
+ decode: (token: string) => Promise<JWTDecodeResult>;
265
+ };
266
+ declare const json: {
267
+ format: (input: string) => Promise<string>;
268
+ minify: (input: string) => Promise<string>;
269
+ };
270
+ declare const text: {
271
+ camelCase: (input: string) => Promise<string>;
272
+ snakeCase: (input: string) => Promise<string>;
273
+ kebabCase: (input: string) => Promise<string>;
274
+ pascalCase: (input: string) => Promise<string>;
275
+ };
276
+ declare const color: {
277
+ hexToRgb: (hex: string) => Promise<RGB>;
278
+ rgbToHex: (r: number, g: number, b: number) => Promise<string>;
279
+ };
280
+ declare const time: {
281
+ epochToIso: (epoch: number) => Promise<string>;
282
+ isoToEpoch: (iso: string) => Promise<number>;
283
+ };
284
+
285
+ export { type HSL, type HashAlgorithm, type JWTDecodeResult, type JWTExpired, type JWTHeader, type JWTPayload, type NanoIDOptions, type PasswordOptions, type RGB, base64, decode$3 as base64Decode, decodeURLSafe as base64DecodeURLSafe, encode$2 as base64Encode, encodeURLSafe as base64EncodeURLSafe, binaryToDecimal, binaryToHex, calculateEntropy, camelCase, color, constantCase, decimalToBinary, decimalToHex, decimalToOctal, dotCase, epochToIso, epochToLocale, estimateStrength, formatBytes, formatDate, fromBase, generateMAC, generateNanoID, generateNanoIDs, generatePassword, generateUUID, generateUUIDs, getDaysBetween, getHostname, getLocalIPs, getLocalIPv4, getSupportedAlgorithms, getWeekNumber, hash, hashFile, hexToBinary, hexToDecimal, hexToHsl, hexToRgb, hslToCSS, hslToHex, hslToRgb, decode$1 as htmlDecode, encode as htmlEncode, encodeAttribute as htmlEncodeAttribute, isBase64, isBinary, isHex, isLeapYear, isLightColor, isNanoIDValid, isOctal, isPrivateIP, isReservedIP, isSupportedAlgorithm, isValidEncoded, isValidHex, isValidIP, isValidIPv4, isValidIPv6, isValidIsoDate, isValidJWT, isValidMAC, isValidUUID, isoToEpoch, json, flatten as jsonFlatten, format as jsonFormat, minify as jsonMinify, sortByKeys as jsonSortByKeys, validate as jsonValidate, jwt, decode as jwtDecode, getExpiration as jwtGetExpiration, getIssuer as jwtGetIssuer, getSubject as jwtGetSubject, isExpired as jwtIsExpired, kebabCase, paragraph as loremParagraph, paragraphs as loremParagraphs, sentence as loremSentence, title as loremTitle, word as loremWord, lowerCase, macToHex, md5, msToSeconds, normalizeMAC, nowEpoch, nowIso, octalToDecimal, pascalCase, password, prettyStringify, reverseCase, rgbToCSS, rgbToHex, rgbToHsl, secondsToMs, sentenceCase, sha1, sha256, sha512, slugify, snakeCase, stripTags, text, time, timeAgo, titleCase, toBase, upperCase, url, decode$2 as urlDecode, decodeComponent as urlDecodeComponent, encode$1 as urlEncode, encodeComponent as urlEncodeComponent, uuid };