From fbc3717b7915565ac8594b23f8f3637b89539ef9 Mon Sep 17 00:00:00 2001 From: Dong Nguyen Date: Wed, 12 Oct 2022 17:45:51 +0700 Subject: [PATCH] v11.1.1 - Remove crypto dependent parts - remove sha256, sha512 from v11.1.0 - use regular method for randoming string/id - Keep support node 14 as before --- .github/workflows/ci-test.yml | 5 ++-- README.md | 25 ------------------ dist/bella.esm.js | 4 +-- dist/bella.esm.js.map | 8 +++--- dist/bella.js | 4 +-- dist/bella.js.map | 8 +++--- package.json | 11 ++------ src/main.js | 1 - src/utils/crypto.js | 20 --------------- src/utils/crypto.test.js | 48 ----------------------------------- src/utils/random.js | 27 ++------------------ 11 files changed, 18 insertions(+), 143 deletions(-) delete mode 100644 src/utils/crypto.js delete mode 100644 src/utils/crypto.test.js diff --git a/.github/workflows/ci-test.yml b/.github/workflows/ci-test.yml index 5f1b91e..7207fc6 100755 --- a/.github/workflows/ci-test.yml +++ b/.github/workflows/ci-test.yml @@ -8,11 +8,11 @@ on: [push, pull_request] jobs: test: - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 strategy: matrix: - node_version: [15.x, 16.x, 17.x, 18.x] + node_version: [14.x, 15.x, 16.x, 17.x, 18.x] steps: - uses: actions/checkout@v2 @@ -29,7 +29,6 @@ jobs: - name: run npm scripts run: | - npm i -g standard npm install npm run lint npm run test diff --git a/README.md b/README.md index 4acb1c0..32377e2 100755 --- a/README.md +++ b/README.md @@ -21,7 +21,6 @@ You may be interested in [BellaPy](https://github.com/ndaidong/bellapy) too. * [Array utils](#array-utils): [`pick`](#pickarray-arr--number-count--1), [`sort`](#sortarray-arr--function-compare), [`sortBy`](#sortbyarray-arr-number-order-string-property), [`shuffle`](#shufflearray-arr), [`unique`](#uniquearray-arr) * [Functional utils](#functional-utils): [`curry`](#curryfn), [`compose`](#composef1-f2-fn), [`pipe`](#pipef1-f2-fn), [`maybe`](#maybeanything-val) * [Date utils](#date-utils): [`formatDateString`](#formatdatestringdate--timestamp--string-locale--object-options), [`formatTimeAgo`](#formattimeagodate--timestamp--string-locale--string-justnow) - * [Crypto utils](#crypto-utils): [`sha256`](#sha256), [`sha512`](#sha512) * [Random utils](#random-utils): [`randint`](#randintnumber-min--number-max), [`genid`](#genidnumber-length--string-prefix) * [Test](#test) @@ -489,28 +488,6 @@ Please refer the following resources for more info: - [Intl.Locale](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale) -### Crypto utils - -#### `sha256()` - -Generate signature for a text using SHA-256 Cryptographic Hash Algorithm. - -```js -import { sha256 } from 'bellajs' - -sha256(text) // => hashed string 64 hex characters, 256-bit (16-byte) -``` - -#### `sha512()` - -Generate signature for a text using SHA-512 Cryptographic Hash Algorithm. - -```js -import { sha512 } from 'bellajs' - -sha512(text) // => hashed string 128 hex characters, 512-bit (32-byte) -``` - ### Random utils #### `randint([Number min [, Number max]])` @@ -537,8 +514,6 @@ genid(5) // => random 5 chars genid(5, 'X_') // => X_{random 3 chars} ``` -When `length` > 128, only first 99 characters are being generated using `crypto.getRandomValues()`, the rest will be calculated with `Math.random()`. - ## Test ```bash diff --git a/dist/bella.esm.js b/dist/bella.esm.js index 3289bc7..d9a45f7 100644 --- a/dist/bella.esm.js +++ b/dist/bella.esm.js @@ -1,2 +1,2 @@ -// bellajs@11.1.0 https://github.com/ndaidong/bellajs - built with esbuild at 2022-10-12T09:56:19.003Z -var g=t=>({}).toString.call(t),z=t=>Number.isInteger(t),p=t=>Array.isArray(t),a=t=>String(t)===t,h=t=>Number(t)===t,B=t=>Boolean(t)===t,E=t=>g(t)==="[object Null]",D=t=>g(t)==="[object Undefined]",N=t=>D(t)||E(t),R=t=>g(t)==="[object Function]",l=t=>g(t)==="[object Object]"&&!p(t),A=t=>t instanceof Date&&!isNaN(t.valueOf()),V=t=>g(t).match(/^\[object HTML\w*Element]$/)!==null,G=t=>{let e=/^[a-z]+$/i;return a(t)&&e.test(t)},K=t=>{let e=/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;return a(t)&&e.test(t)},W=t=>!t||N(t)||a(t)&&t===""||p(t)&&t.length===0||l(t)&&Object.keys(t).length===0,x=(t,e)=>!t||!e?!1:Object.prototype.hasOwnProperty.call(t,e);var f=t=>{let e=h(t)?String(t):t;if(!a(e))throw new Error("InvalidInput: String required.");return e},X=(t,e=140)=>{let r=f(t);if(r.length<=e)return r;let n=r.substring(0,e).trim(),s=n.split(" ");return s.length>1?(s.pop(),s.map(i=>i.trim()).join(" ")+"..."):n.substring(0,e-3)+"..."},Y=t=>f(t).replace(/(<([^>]+)>)/ig,"").trim(),Z=t=>f(t).replace(/&/g,"&").replace(//g,">").replace(/"/g,"""),v=t=>f(t).replace(/"/g,'"').replace(/</g,"<").replace(/>/g,">").replace(/&/g,"&"),U=t=>{let e=f(t).toLowerCase();return e.length>1?e.charAt(0).toUpperCase()+e.slice(1):e.toUpperCase()},tt=t=>f(t).split(" ").map(e=>U(e)).join(" "),y=(t,e,r)=>{let o=f(t),n=h(e)?String(e):e,s=h(r)?String(r):r;if(a(n)&&a(s))o=o.split(n).join(s);else if(p(n)&&a(s))n.forEach(c=>{o=y(o,c,s)});else if(p(n)&&p(s)&&n.length===s.length){let c=n.length;if(c>0)for(let i=0;i{let t={a:"á|à|ả|ã|ạ|ă|ắ|ặ|ằ|ẳ|ẵ|â|ấ|ầ|ẩ|ẫ|ậ|ä|æ",c:"ç",d:"đ|ð",e:"é|è|ẻ|ẽ|ẹ|ê|ế|ề|ể|ễ|ệ|ë",i:"í|ì|ỉ|ĩ|ị|ï|î",n:"ñ",o:"ó|ò|ỏ|õ|ọ|ô|ố|ồ|ổ|ỗ|ộ|ơ|ớ|ờ|ở|ỡ|ợ|ö|ø",s:"ß",u:"ú|ù|ủ|ũ|ụ|ư|ứ|ừ|ử|ữ|ự|û",y:"ý|ỳ|ỷ|ỹ|ỵ|ÿ"},e={...t};return Object.keys(t).forEach(r=>{let o=r.toUpperCase();e[o]=t[r].toUpperCase()}),e},L=t=>{let e=f(t),r=(n,s)=>{e=y(e,n,s)},o=C();for(let n in o)x(o,n)&&o[n].split("|").forEach(c=>r(c,n));return e},et=(t,e="-")=>L(t).trim().toLowerCase().replace(/\W+/g," ").replace(/\s+/g," ").replace(/\s/g,e);var b=crypto;var w=window.TextEncoder,ot=window.TextDecoder;var d=b.webcrypto?b.webcrypto:b,it=(t=0,e=1e6)=>{let r=new Uint8Array(1);d.getRandomValues(r);let o="0."+r[0].toString();return Math.floor(o*(e-t+1))+t},_=(t=32,e="")=>{let r=e;for(let o=0;o9&&n>.3&&n<.7?c.toUpperCase():c}return r.substring(0,t)},M=(t=32,e="")=>{let r=e,o=d.getRandomValues(new Uint16Array(t));for(let n=0;n.3&&c<.7?i.toUpperCase():i}return r.substring(0,t)},ut=(t=32,e="")=>t<=128?M(t,e):`${M(99,e)}${_(t-99)}`;var O=async(t,e)=>{let r=new w().encode(t),o=await d.subtle.digest(e,r);return[...new Uint8Array(o)].map(s=>s.toString(16).padStart(2,"0")).join("")},ft=async(t="")=>await O(t,"SHA-256"),mt=async(t="")=>await O(t,"SHA-512");var I=()=>({dateStyle:"medium",timeStyle:"long"}),P=()=>({second:1e3,minute:60,hour:60,day:24,week:7,month:4,year:12}),k=t=>{try{return new Intl.Locale(t).language!==""}catch{return!1}},ht=(...t)=>{let e=t[0],r=k(t[1])?t[1]:"en",o=I(),n=t.length>=3?t[2]:t.length===1?o:l(t[1])?t[1]:o;return new Intl.DateTimeFormat(r,n).format(new Date(e))},bt=(t,e="en",r="just now")=>{let o=new Date(t),n=Date.now()-o,s=P();if(n<=s.second)return r;let c="second";for(let u in s){if(n{let e=t.length,r=(o,n)=>o>0?(...s)=>r(o-s.length,[...n,...s]):t(...n);return r(e,[])};var St=(...t)=>t.reduce((e,r)=>o=>e(r(o)));var At=(...t)=>t.reduce((e,r)=>o=>r(e(o)));var m=(t,e,r,o={})=>{let{writable:n=!1,configurable:s=!1,enumerable:c=!1}=o;Object.defineProperty(t,e,{value:r,writable:n,configurable:s,enumerable:c})};var S=t=>{let e=t,r=()=>e==null,o=()=>e,n=u=>S(e||u()),s=u=>S(u(e)===!0?e:null),c=u=>S(r()?null:u(e)),i=Object.create({});return m(i,"__value__",e,{enumerable:!0}),m(i,"__type__","Maybe",{enumerable:!0}),m(i,"isNil",r),m(i,"value",o),m(i,"map",c),m(i,"if",s),m(i,"else",n),i};var j=(t,e=null)=>{let r=e||new Set;if(r.has(t))return t;if(r.add(t),A(t))return new Date(t.valueOf());let o=s=>{let c=Object.create({});for(let i in s)x(s,i)&&(c[i]=j(s[i],r));return c},n=s=>[...s].map(c=>p(c)?n(c):l(c)?o(c):j(c,r));return p(t)?n(t):l(t)?o(t):t},F=(t,e,r=!1,o=[])=>{for(let n in t)if(!(o.length>0&&o.includes(n))&&(!r||r&&x(e,n))){let s=t[n],c=e[n];l(c)&&l(s)||p(c)&&p(s)?e[n]=F(s,e[n],r,o):e[n]=j(s)}return e},Nt=(t=[])=>[...new Set(t)],H=(t,e)=>t>e?1:t{let r=[...t],o=e||H;return r.sort(o),r},Ut=(t=[],e=1,r="")=>!a(r)||!x(t[0],r)?t:$(t,(o,n)=>o[r]>n[r]?e:o[r]{let e=[...t],r=[],o=e.length;for(;o>0;){let n=Math.floor(Math.random()*o);r.push(e.splice(n,1)[0]),o--}return r},Ct=(t=[],e=1)=>{let r=q(t),o=Math.max(1,e),n=Math.min(o,r.length-1);return r.splice(0,n)};export{w as TextEncoder,j as clone,St as compose,F as copies,d as crypto,yt as curry,Z as escapeHTML,ht as formatDateString,bt as formatTimeAgo,ut as genid,x as hasProperty,p as isArray,B as isBoolean,A as isDate,V as isElement,K as isEmail,W as isEmpty,R as isFunction,z as isInteger,G as isLetter,N as isNil,E as isNull,h as isNumber,l as isObject,a as isString,D as isUndefined,S as maybe,Ct as pick,At as pipe,it as randint,y as replaceAll,ft as sha256,mt as sha512,q as shuffle,et as slugify,$ as sort,Ut as sortBy,L as stripAccent,Y as stripTags,X as truncate,U as ucfirst,tt as ucwords,v as unescapeHTML,Nt as unique}; +// bellajs@11.1.1 https://github.com/ndaidong/bellajs - built with esbuild at 2022-10-12T10:45:38.055Z +var g=t=>({}).toString.call(t),U=t=>Number.isInteger(t),p=t=>Array.isArray(t),l=t=>String(t)===t,h=t=>Number(t)===t,k=t=>Boolean(t)===t,S=t=>g(t)==="[object Null]",M=t=>g(t)==="[object Undefined]",O=t=>M(t)||S(t),F=t=>g(t)==="[object Function]",a=t=>g(t)==="[object Object]"&&!p(t),w=t=>t instanceof Date&&!isNaN(t.valueOf()),q=t=>g(t).match(/^\[object HTML\w*Element]$/)!==null,z=t=>{let e=/^[a-z]+$/i;return l(t)&&e.test(t)},B=t=>{let e=/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;return l(t)&&e.test(t)},H=t=>!t||O(t)||l(t)&&t===""||p(t)&&t.length===0||a(t)&&Object.keys(t).length===0,x=(t,e)=>!t||!e?!1:Object.prototype.hasOwnProperty.call(t,e);var f=t=>{let e=h(t)?String(t):t;if(!l(e))throw new Error("InvalidInput: String required.");return e},R=(t,e=140)=>{let r=f(t);if(r.length<=e)return r;let n=r.substring(0,e).trim(),s=n.split(" ");return s.length>1?(s.pop(),s.map(i=>i.trim()).join(" ")+"..."):n.substring(0,e-3)+"..."},V=t=>f(t).replace(/(<([^>]+)>)/ig,"").trim(),W=t=>f(t).replace(/&/g,"&").replace(//g,">").replace(/"/g,"""),G=t=>f(t).replace(/"/g,'"').replace(/</g,"<").replace(/>/g,">").replace(/&/g,"&"),A=t=>{let e=f(t).toLowerCase();return e.length>1?e.charAt(0).toUpperCase()+e.slice(1):e.toUpperCase()},J=t=>f(t).split(" ").map(e=>A(e)).join(" "),b=(t,e,r)=>{let o=f(t),n=h(e)?String(e):e,s=h(r)?String(r):r;if(l(n)&&l(s))o=o.split(n).join(s);else if(p(n)&&l(s))n.forEach(c=>{o=b(o,c,s)});else if(p(n)&&p(s)&&n.length===s.length){let c=n.length;if(c>0)for(let i=0;i{let t={a:"á|à|ả|ã|ạ|ă|ắ|ặ|ằ|ẳ|ẵ|â|ấ|ầ|ẩ|ẫ|ậ|ä|æ",c:"ç",d:"đ|ð",e:"é|è|ẻ|ẽ|ẹ|ê|ế|ề|ể|ễ|ệ|ë",i:"í|ì|ỉ|ĩ|ị|ï|î",n:"ñ",o:"ó|ò|ỏ|õ|ọ|ô|ố|ồ|ổ|ỗ|ộ|ơ|ớ|ờ|ở|ỡ|ợ|ö|ø",s:"ß",u:"ú|ù|ủ|ũ|ụ|ư|ứ|ừ|ử|ữ|ự|û",y:"ý|ỳ|ỷ|ỹ|ỵ|ÿ"},e={...t};return Object.keys(t).forEach(r=>{let o=r.toUpperCase();e[o]=t[r].toUpperCase()}),e},D=t=>{let e=f(t),r=(n,s)=>{e=b(e,n,s)},o=N();for(let n in o)x(o,n)&&o[n].split("|").forEach(c=>r(c,n));return e},Q=(t,e="-")=>D(t).trim().toLowerCase().replace(/\W+/g," ").replace(/\s+/g," ").replace(/\s/g,e);var Y=(t=0,e=1e6)=>Math.floor(Math.random()*(e-t+1))+t,Z=(t=32,e="")=>{let r=e;for(let o=0;o9&&n>.3&&n<.7?c.toUpperCase():c}return r.substring(0,t)};var L=()=>({dateStyle:"medium",timeStyle:"long"}),_=()=>({second:1e3,minute:60,hour:60,day:24,week:7,month:4,year:12}),C=t=>{try{return new Intl.Locale(t).language!==""}catch{return!1}},et=(...t)=>{let e=t[0],r=C(t[1])?t[1]:"en",o=L(),n=t.length>=3?t[2]:t.length===1?o:a(t[1])?t[1]:o;return new Intl.DateTimeFormat(r,n).format(new Date(e))},rt=(t,e="en",r="just now")=>{let o=new Date(t),n=Date.now()-o,s=_();if(n<=s.second)return r;let c="second";for(let u in s){if(n{let e=t.length,r=(o,n)=>o>0?(...s)=>r(o-s.length,[...n,...s]):t(...n);return r(e,[])};var ct=(...t)=>t.reduce((e,r)=>o=>e(r(o)));var ut=(...t)=>t.reduce((e,r)=>o=>r(e(o)));var m=(t,e,r,o={})=>{let{writable:n=!1,configurable:s=!1,enumerable:c=!1}=o;Object.defineProperty(t,e,{value:r,writable:n,configurable:s,enumerable:c})};var d=t=>{let e=t,r=()=>e==null,o=()=>e,n=u=>d(e||u()),s=u=>d(u(e)===!0?e:null),c=u=>d(r()?null:u(e)),i=Object.create({});return m(i,"__value__",e,{enumerable:!0}),m(i,"__type__","Maybe",{enumerable:!0}),m(i,"isNil",r),m(i,"value",o),m(i,"map",c),m(i,"if",s),m(i,"else",n),i};var y=(t,e=null)=>{let r=e||new Set;if(r.has(t))return t;if(r.add(t),w(t))return new Date(t.valueOf());let o=s=>{let c=Object.create({});for(let i in s)x(s,i)&&(c[i]=y(s[i],r));return c},n=s=>[...s].map(c=>p(c)?n(c):a(c)?o(c):y(c,r));return p(t)?n(t):a(t)?o(t):t},E=(t,e,r=!1,o=[])=>{for(let n in t)if(!(o.length>0&&o.includes(n))&&(!r||r&&x(e,n))){let s=t[n],c=e[n];a(c)&&a(s)||p(c)&&p(s)?e[n]=E(s,e[n],r,o):e[n]=y(s)}return e},xt=(t=[])=>[...new Set(t)],T=(t,e)=>t>e?1:t{let r=[...t],o=e||T;return r.sort(o),r},gt=(t=[],e=1,r="")=>!l(r)||!x(t[0],r)?t:I(t,(o,n)=>o[r]>n[r]?e:o[r]{let e=[...t],r=[],o=e.length;for(;o>0;){let n=Math.floor(Math.random()*o);r.push(e.splice(n,1)[0]),o--}return r},ht=(t=[],e=1)=>{let r=P(t),o=Math.max(1,e),n=Math.min(o,r.length-1);return r.splice(0,n)};export{y as clone,ct as compose,E as copies,ot as curry,W as escapeHTML,et as formatDateString,rt as formatTimeAgo,Z as genid,x as hasProperty,p as isArray,k as isBoolean,w as isDate,q as isElement,B as isEmail,H as isEmpty,F as isFunction,U as isInteger,z as isLetter,O as isNil,S as isNull,h as isNumber,a as isObject,l as isString,M as isUndefined,d as maybe,ht as pick,ut as pipe,Y as randint,b as replaceAll,P as shuffle,Q as slugify,I as sort,gt as sortBy,D as stripAccent,V as stripTags,R as truncate,A as ucfirst,J as ucwords,G as unescapeHTML,xt as unique}; diff --git a/dist/bella.esm.js.map b/dist/bella.esm.js.map index 64f9348..b4fdf7e 100644 --- a/dist/bella.esm.js.map +++ b/dist/bella.esm.js.map @@ -1,7 +1,7 @@ { "version": 3, - "sources": ["../src/utils/detection.js", "../src/utils/string.js", "../src/browser/crypto.js", "../src/browser/txtutil.js", "../src/utils/random.js", "../src/utils/crypto.js", "../src/utils/date.js", "../src/utils/curry.js", "../src/utils/compose.js", "../src/utils/pipe.js", "../src/utils/defineProp.js", "../src/utils/maybe.js", "../src/main.js"], - "sourcesContent": ["// utils / detection\n\nconst ob2Str = (val) => {\n return {}.toString.call(val)\n}\n\nexport const isInteger = (val) => {\n return Number.isInteger(val)\n}\n\nexport const isArray = (val) => {\n return Array.isArray(val)\n}\n\nexport const isString = (val) => {\n return String(val) === val\n}\n\nexport const isNumber = (val) => {\n return Number(val) === val\n}\n\nexport const isBoolean = (val) => {\n return Boolean(val) === val\n}\n\nexport const isNull = (val) => {\n return ob2Str(val) === '[object Null]'\n}\n\nexport const isUndefined = (val) => {\n return ob2Str(val) === '[object Undefined]'\n}\n\nexport const isNil = (val) => {\n return isUndefined(val) || isNull(val)\n}\n\nexport const isFunction = (val) => {\n return ob2Str(val) === '[object Function]'\n}\n\nexport const isObject = (val) => {\n return ob2Str(val) === '[object Object]' && !isArray(val)\n}\n\nexport const isDate = (val) => {\n return val instanceof Date && !isNaN(val.valueOf())\n}\n\nexport const isElement = (v) => {\n return ob2Str(v).match(/^\\[object HTML\\w*Element]$/) !== null\n}\n\nexport const isLetter = (val) => {\n const re = /^[a-z]+$/i\n return isString(val) && re.test(val)\n}\n\nexport const isEmail = (val) => {\n const re = /^([\\w-]+(?:\\.[\\w-]+)*)@((?:[\\w-]+\\.)*\\w[\\w-]{0,66})\\.([a-z]{2,6}(?:\\.[a-z]{2})?)$/i\n return isString(val) && re.test(val)\n}\n\nexport const isEmpty = (val) => {\n return !val || isNil(val) ||\n (isString(val) && val === '') ||\n (isArray(val) && val.length === 0) ||\n (isObject(val) && Object.keys(val).length === 0)\n}\n\nexport const hasProperty = (ob, k) => {\n if (!ob || !k) {\n return false\n }\n return Object.prototype.hasOwnProperty.call(ob, k)\n}\n", "// utils / string\n\nimport {\n isArray,\n isString,\n isNumber,\n hasProperty\n} from './detection.js'\n\nconst toString = (input) => {\n const s = isNumber(input) ? String(input) : input\n if (!isString(s)) {\n throw new Error('InvalidInput: String required.')\n }\n return s\n}\n\nexport const truncate = (s, len = 140) => {\n const txt = toString(s)\n const txtlen = txt.length\n if (txtlen <= len) {\n return txt\n }\n const subtxt = txt.substring(0, len).trim()\n const subtxtArr = subtxt.split(' ')\n const subtxtLen = subtxtArr.length\n if (subtxtLen > 1) {\n subtxtArr.pop()\n return subtxtArr.map(word => word.trim()).join(' ') + '...'\n }\n return subtxt.substring(0, len - 3) + '...'\n}\n\nexport const stripTags = (s) => {\n return toString(s).replace(/(<([^>]+)>)/ig, '').trim()\n}\n\nexport const escapeHTML = (s) => {\n return toString(s)\n .replace(/&/g, '&')\n .replace(//g, '>')\n .replace(/\"/g, '"')\n}\n\nexport const unescapeHTML = (s) => {\n return toString(s)\n .replace(/"/g, '\"')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/&/g, '&')\n}\n\nexport const ucfirst = (s) => {\n const x = toString(s).toLowerCase()\n return x.length > 1 ? x.charAt(0).toUpperCase() + x.slice(1) : x.toUpperCase()\n}\n\nexport const ucwords = (s) => {\n return toString(s).split(' ').map((w) => {\n return ucfirst(w)\n }).join(' ')\n}\n\nexport const replaceAll = (s, alpha, beta) => {\n let x = toString(s)\n const a = isNumber(alpha) ? String(alpha) : alpha\n const b = isNumber(beta) ? String(beta) : beta\n\n if (isString(a) && isString(b)) {\n const aa = x.split(a)\n x = aa.join(b)\n } else if (isArray(a) && isString(b)) {\n a.forEach((v) => {\n x = replaceAll(x, v, b)\n })\n } else if (isArray(a) && isArray(b) && a.length === b.length) {\n const k = a.length\n if (k > 0) {\n for (let i = 0; i < k; i++) {\n const aaa = a[i]\n const bb = b[i]\n x = replaceAll(x, aaa, bb)\n }\n }\n }\n return x\n}\n\nconst getCharMap = () => {\n const lmap = {\n a: 'á|à|ả|ã|ạ|ă|ắ|ặ|ằ|ẳ|ẵ|â|ấ|ầ|ẩ|ẫ|ậ|ä|æ',\n c: 'ç',\n d: 'đ|ð',\n e: 'é|è|ẻ|ẽ|ẹ|ê|ế|ề|ể|ễ|ệ|ë',\n i: 'í|ì|ỉ|ĩ|ị|ï|î',\n n: 'ñ',\n o: 'ó|ò|ỏ|õ|ọ|ô|ố|ồ|ổ|ỗ|ộ|ơ|ớ|ờ|ở|ỡ|ợ|ö|ø',\n s: 'ß',\n u: 'ú|ù|ủ|ũ|ụ|ư|ứ|ừ|ử|ữ|ự|û',\n y: 'ý|ỳ|ỷ|ỹ|ỵ|ÿ'\n }\n\n const map = {\n ...lmap\n }\n Object.keys(lmap).forEach((k) => {\n const K = k.toUpperCase()\n map[K] = lmap[k].toUpperCase()\n })\n\n return map\n}\n\nexport const stripAccent = (s) => {\n let x = toString(s)\n\n const updateS = (ai, key) => {\n x = replaceAll(x, ai, key)\n }\n\n const map = getCharMap()\n for (const key in map) {\n if (hasProperty(map, key)) {\n const a = map[key].split('|')\n a.forEach((item) => {\n return updateS(item, key)\n })\n }\n }\n return x\n}\n\nexport const slugify = (s, delimiter = '-') => {\n return stripAccent(s)\n .trim()\n .toLowerCase()\n .replace(/\\W+/g, ' ')\n .replace(/\\s+/g, ' ')\n .replace(/\\s/g, delimiter)\n}\n", "/* global crypto */\n\nexport default crypto\n", "export const TextEncoder = window.TextEncoder\nexport const TextDecoder = window.TextDecoder\n", "// utils / random\nimport ncrypto from 'node:crypto'\nexport { TextEncoder } from 'node:util'\n\nexport const crypto = ncrypto.webcrypto ? ncrypto.webcrypto : ncrypto\n\nexport const randint = (min = 0, max = 1e6) => {\n const byteArray = new Uint8Array(1)\n crypto.getRandomValues(byteArray)\n const floatNum = '0.' + byteArray[0].toString()\n return Math.floor(floatNum * (max - min + 1)) + min\n}\n\nconst mathGen = (len = 32, prefix = '') => {\n let s = prefix\n for (let i = 0; i < len; i++) {\n const r = Math.random()\n const k = Math.floor(r * 36)\n const c = k.toString(36)\n s += (k > 9 && r > 0.3 && r < 0.7) ? c.toUpperCase() : c\n }\n return s.substring(0, len)\n}\n\nconst cryptoGen = (len = 32, prefix = '') => {\n let s = prefix\n const nums = crypto.getRandomValues(new Uint16Array(len))\n for (let i = 0; i < nums.length; i++) {\n const n = nums[i].toString(36)\n const r = Math.random()\n const c = n.charAt(Math.floor(r * n.length))\n s += (r > 0.3 && r < 0.7) ? c.toUpperCase() : c\n }\n return s.substring(0, len)\n}\n\nexport const genid = (len = 32, prefix = '') => {\n return len <= 128 ? cryptoGen(len, prefix) : `${cryptoGen(99, prefix)}${mathGen(len - 99)}`\n}\n", "// utils / cryptography\n\nimport { TextEncoder, crypto } from './random.js'\n\nconst sha = async (message, algorithm) => {\n const enc = new TextEncoder().encode(message)\n const buff = await crypto.subtle.digest(algorithm, enc)\n const hex = [...new Uint8Array(buff)].map(b => b.toString(16).padStart(2, '0')).join('')\n return hex\n}\n\nexport const sha256 = async (txt = '') => {\n const hash = await sha(txt, 'SHA-256')\n return hash\n}\n\nexport const sha512 = async (txt = '') => {\n const hash = await sha(txt, 'SHA-512')\n return hash\n}\n", "// utils / date\n\nimport {\n isObject\n} from './detection.js'\n\nconst getDateFormat = () => {\n return {\n dateStyle: 'medium',\n timeStyle: 'long'\n }\n}\n\nconst getTimeConvers = () => {\n return {\n second: 1000,\n minute: 60,\n hour: 60,\n day: 24,\n week: 7,\n month: 4,\n year: 12\n }\n}\n\nconst isValidLocal = (hl) => {\n try {\n const locale = new Intl.Locale(hl)\n return locale.language !== ''\n } catch (err) {\n return false\n }\n}\n\nexport const formatDateString = (...args) => {\n const input = args[0]\n const lang = isValidLocal(args[1]) ? args[1] : 'en'\n const dfmt = getDateFormat()\n const opt = args.length >= 3\n ? args[2]\n : args.length === 1\n ? dfmt\n : isObject(args[1])\n ? args[1]\n : dfmt\n const dtf = new Intl.DateTimeFormat(lang, opt)\n return dtf.format(new Date(input))\n}\n\nexport const formatTimeAgo = (input, lang = 'en', justnow = 'just now') => {\n const t = new Date(input)\n let delta = Date.now() - t\n const tcv = getTimeConvers()\n if (delta <= tcv.second) {\n return justnow\n }\n let unit = 'second'\n for (const key in tcv) {\n if (delta < tcv[key]) {\n break\n } else {\n unit = key\n delta /= tcv[key]\n }\n }\n delta = Math.floor(delta)\n const rel = new Intl.RelativeTimeFormat(lang)\n return rel.format(-delta, unit)\n}\n", "// utils / curry\n\nexport const curry = (fn) => {\n const totalArguments = fn.length\n const next = (argumentLength, rest) => {\n if (argumentLength > 0) {\n return (...args) => {\n return next(argumentLength - args.length, [...rest, ...args])\n }\n }\n return fn(...rest)\n }\n return next(totalArguments, [])\n}\n", "// utils / compose\n\nexport const compose = (...fns) => {\n return fns.reduce((f, g) => (x) => f(g(x)))\n}\n", "// utils / pipe\n\nexport const pipe = (...fns) => {\n return fns.reduce((f, g) => (x) => g(f(x)))\n}\n", "// utils / defineProp\n\nexport const defineProp = (ob, key, val, config = {}) => {\n const {\n writable = false,\n configurable = false,\n enumerable = false\n } = config\n Object.defineProperty(ob, key, {\n value: val,\n writable,\n configurable,\n enumerable\n })\n}\n", "// utils / maybe\n\nimport {\n defineProp\n} from './defineProp.js'\n\nexport const maybe = (val) => {\n const __val = val\n const isNil = () => {\n return __val === null || __val === undefined\n }\n const value = () => {\n return __val\n }\n const getElse = (fn) => {\n return maybe(__val || fn())\n }\n const filter = (fn) => {\n return maybe(fn(__val) === true ? __val : null)\n }\n const map = (fn) => {\n return maybe(isNil() ? null : fn(__val))\n }\n const output = Object.create({})\n defineProp(output, '__value__', __val, { enumerable: true })\n defineProp(output, '__type__', 'Maybe', { enumerable: true })\n defineProp(output, 'isNil', isNil)\n defineProp(output, 'value', value)\n defineProp(output, 'map', map)\n defineProp(output, 'if', filter)\n defineProp(output, 'else', getElse)\n return output\n}\n", "/**\n * bellajs\n * @ndaidong\n**/\n\nimport {\n isObject,\n isArray,\n isDate,\n isString,\n hasProperty\n} from './utils/detection.js'\n\nexport const clone = (val, history = null) => {\n const stack = history || new Set()\n\n if (stack.has(val)) {\n return val\n }\n\n stack.add(val)\n\n if (isDate(val)) {\n return new Date(val.valueOf())\n }\n\n const copyObject = (o) => {\n const oo = Object.create({})\n for (const k in o) {\n if (hasProperty(o, k)) {\n oo[k] = clone(o[k], stack)\n }\n }\n return oo\n }\n\n const copyArray = (a) => {\n return [...a].map((e) => {\n if (isArray(e)) {\n return copyArray(e)\n } else if (isObject(e)) {\n return copyObject(e)\n }\n return clone(e, stack)\n })\n }\n\n if (isArray(val)) {\n return copyArray(val)\n }\n\n if (isObject(val)) {\n return copyObject(val)\n }\n\n return val\n}\n\nexport const copies = (source, dest, matched = false, excepts = []) => {\n for (const k in source) {\n if (excepts.length > 0 && excepts.includes(k)) {\n continue // eslint-disable-line no-continue\n }\n if (!matched || (matched && hasProperty(dest, k))) {\n const oa = source[k]\n const ob = dest[k]\n if ((isObject(ob) && isObject(oa)) || (isArray(ob) && isArray(oa))) {\n dest[k] = copies(oa, dest[k], matched, excepts)\n } else {\n dest[k] = clone(oa)\n }\n }\n }\n return dest\n}\n\nexport const unique = (arr = []) => {\n return [...new Set(arr)]\n}\n\nconst fnSort = (a, b) => {\n return a > b ? 1 : (a < b ? -1 : 0)\n}\n\nexport const sort = (arr = [], sorting = null) => {\n const tmp = [...arr]\n const fn = sorting || fnSort\n tmp.sort(fn)\n return tmp\n}\n\nexport const sortBy = (arr = [], order = 1, key = '') => {\n if (!isString(key) || !hasProperty(arr[0], key)) {\n return arr\n }\n return sort(arr, (m, n) => {\n return m[key] > n[key] ? order : (m[key] < n[key] ? (-1 * order) : 0)\n })\n}\n\nexport const shuffle = (arr = []) => {\n const input = [...arr]\n const output = []\n let inputLen = input.length\n while (inputLen > 0) {\n const index = Math.floor(Math.random() * inputLen)\n output.push(input.splice(index, 1)[0])\n inputLen--\n }\n return output\n}\n\nexport const pick = (arr = [], count = 1) => {\n const a = shuffle(arr)\n const mc = Math.max(1, count)\n const c = Math.min(mc, a.length - 1)\n return a.splice(0, c)\n}\n\nexport * from './utils/detection.js'\nexport * from './utils/string.js'\nexport * from './utils/random.js'\nexport * from './utils/crypto.js'\nexport * from './utils/date.js'\n\nexport * from './utils/curry.js'\nexport * from './utils/compose.js'\nexport * from './utils/pipe.js'\nexport * from './utils/maybe.js'\n"], - "mappings": "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", - "names": ["ob2Str", "val", "isInteger", "isArray", "isString", "isNumber", "isBoolean", "isNull", "isUndefined", "isNil", "isFunction", "isObject", "isDate", "isElement", "v", "isLetter", "re", "isEmail", "isEmpty", "hasProperty", "ob", "k", "toString", "input", "s", "isNumber", "isString", "truncate", "len", "txt", "subtxt", "subtxtArr", "word", "stripTags", "escapeHTML", "unescapeHTML", "ucfirst", "x", "ucwords", "w", "replaceAll", "alpha", "beta", "a", "b", "isArray", "v", "k", "aaa", "bb", "getCharMap", "lmap", "map", "K", "stripAccent", "updateS", "ai", "key", "hasProperty", "item", "slugify", "delimiter", "crypto_default", "TextEncoder", "TextDecoder", "crypto", "crypto_default", "randint", "min", "max", "byteArray", "floatNum", "mathGen", "len", "prefix", "s", "i", "r", "k", "cryptoGen", "nums", "n", "c", "genid", "sha", "message", "algorithm", "enc", "TextEncoder", "buff", "crypto", "b", "sha256", "txt", "sha512", "getDateFormat", "getTimeConvers", "isValidLocal", "hl", "formatDateString", "args", "input", "lang", "dfmt", "opt", "isObject", "formatTimeAgo", "justnow", "t", "delta", "tcv", "unit", "key", "curry", "fn", "totalArguments", "next", "argumentLength", "rest", "args", "compose", "fns", "f", "g", "x", "pipe", "fns", "f", "g", "x", "defineProp", "ob", "key", "val", "config", "writable", "configurable", "enumerable", "maybe", "val", "__val", "isNil", "value", "getElse", "fn", "filter", "map", "output", "defineProp", "clone", "val", "history", "stack", "isDate", "copyObject", "o", "oo", "k", "hasProperty", "copyArray", "a", "e", "isArray", "isObject", "copies", "source", "dest", "matched", "excepts", "oa", "ob", "unique", "arr", "fnSort", "b", "sort", "sorting", "tmp", "fn", "sortBy", "order", "key", "isString", "m", "shuffle", "input", "output", "inputLen", "index", "pick", "count", "mc", "c"] + "sources": ["../src/utils/detection.js", "../src/utils/string.js", "../src/utils/random.js", "../src/utils/date.js", "../src/utils/curry.js", "../src/utils/compose.js", "../src/utils/pipe.js", "../src/utils/defineProp.js", "../src/utils/maybe.js", "../src/main.js"], + "sourcesContent": ["// utils / detection\n\nconst ob2Str = (val) => {\n return {}.toString.call(val)\n}\n\nexport const isInteger = (val) => {\n return Number.isInteger(val)\n}\n\nexport const isArray = (val) => {\n return Array.isArray(val)\n}\n\nexport const isString = (val) => {\n return String(val) === val\n}\n\nexport const isNumber = (val) => {\n return Number(val) === val\n}\n\nexport const isBoolean = (val) => {\n return Boolean(val) === val\n}\n\nexport const isNull = (val) => {\n return ob2Str(val) === '[object Null]'\n}\n\nexport const isUndefined = (val) => {\n return ob2Str(val) === '[object Undefined]'\n}\n\nexport const isNil = (val) => {\n return isUndefined(val) || isNull(val)\n}\n\nexport const isFunction = (val) => {\n return ob2Str(val) === '[object Function]'\n}\n\nexport const isObject = (val) => {\n return ob2Str(val) === '[object Object]' && !isArray(val)\n}\n\nexport const isDate = (val) => {\n return val instanceof Date && !isNaN(val.valueOf())\n}\n\nexport const isElement = (v) => {\n return ob2Str(v).match(/^\\[object HTML\\w*Element]$/) !== null\n}\n\nexport const isLetter = (val) => {\n const re = /^[a-z]+$/i\n return isString(val) && re.test(val)\n}\n\nexport const isEmail = (val) => {\n const re = /^([\\w-]+(?:\\.[\\w-]+)*)@((?:[\\w-]+\\.)*\\w[\\w-]{0,66})\\.([a-z]{2,6}(?:\\.[a-z]{2})?)$/i\n return isString(val) && re.test(val)\n}\n\nexport const isEmpty = (val) => {\n return !val || isNil(val) ||\n (isString(val) && val === '') ||\n (isArray(val) && val.length === 0) ||\n (isObject(val) && Object.keys(val).length === 0)\n}\n\nexport const hasProperty = (ob, k) => {\n if (!ob || !k) {\n return false\n }\n return Object.prototype.hasOwnProperty.call(ob, k)\n}\n", "// utils / string\n\nimport {\n isArray,\n isString,\n isNumber,\n hasProperty\n} from './detection.js'\n\nconst toString = (input) => {\n const s = isNumber(input) ? String(input) : input\n if (!isString(s)) {\n throw new Error('InvalidInput: String required.')\n }\n return s\n}\n\nexport const truncate = (s, len = 140) => {\n const txt = toString(s)\n const txtlen = txt.length\n if (txtlen <= len) {\n return txt\n }\n const subtxt = txt.substring(0, len).trim()\n const subtxtArr = subtxt.split(' ')\n const subtxtLen = subtxtArr.length\n if (subtxtLen > 1) {\n subtxtArr.pop()\n return subtxtArr.map(word => word.trim()).join(' ') + '...'\n }\n return subtxt.substring(0, len - 3) + '...'\n}\n\nexport const stripTags = (s) => {\n return toString(s).replace(/(<([^>]+)>)/ig, '').trim()\n}\n\nexport const escapeHTML = (s) => {\n return toString(s)\n .replace(/&/g, '&')\n .replace(//g, '>')\n .replace(/\"/g, '"')\n}\n\nexport const unescapeHTML = (s) => {\n return toString(s)\n .replace(/"/g, '\"')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/&/g, '&')\n}\n\nexport const ucfirst = (s) => {\n const x = toString(s).toLowerCase()\n return x.length > 1 ? x.charAt(0).toUpperCase() + x.slice(1) : x.toUpperCase()\n}\n\nexport const ucwords = (s) => {\n return toString(s).split(' ').map((w) => {\n return ucfirst(w)\n }).join(' ')\n}\n\nexport const replaceAll = (s, alpha, beta) => {\n let x = toString(s)\n const a = isNumber(alpha) ? String(alpha) : alpha\n const b = isNumber(beta) ? String(beta) : beta\n\n if (isString(a) && isString(b)) {\n const aa = x.split(a)\n x = aa.join(b)\n } else if (isArray(a) && isString(b)) {\n a.forEach((v) => {\n x = replaceAll(x, v, b)\n })\n } else if (isArray(a) && isArray(b) && a.length === b.length) {\n const k = a.length\n if (k > 0) {\n for (let i = 0; i < k; i++) {\n const aaa = a[i]\n const bb = b[i]\n x = replaceAll(x, aaa, bb)\n }\n }\n }\n return x\n}\n\nconst getCharMap = () => {\n const lmap = {\n a: 'á|à|ả|ã|ạ|ă|ắ|ặ|ằ|ẳ|ẵ|â|ấ|ầ|ẩ|ẫ|ậ|ä|æ',\n c: 'ç',\n d: 'đ|ð',\n e: 'é|è|ẻ|ẽ|ẹ|ê|ế|ề|ể|ễ|ệ|ë',\n i: 'í|ì|ỉ|ĩ|ị|ï|î',\n n: 'ñ',\n o: 'ó|ò|ỏ|õ|ọ|ô|ố|ồ|ổ|ỗ|ộ|ơ|ớ|ờ|ở|ỡ|ợ|ö|ø',\n s: 'ß',\n u: 'ú|ù|ủ|ũ|ụ|ư|ứ|ừ|ử|ữ|ự|û',\n y: 'ý|ỳ|ỷ|ỹ|ỵ|ÿ'\n }\n\n const map = {\n ...lmap\n }\n Object.keys(lmap).forEach((k) => {\n const K = k.toUpperCase()\n map[K] = lmap[k].toUpperCase()\n })\n\n return map\n}\n\nexport const stripAccent = (s) => {\n let x = toString(s)\n\n const updateS = (ai, key) => {\n x = replaceAll(x, ai, key)\n }\n\n const map = getCharMap()\n for (const key in map) {\n if (hasProperty(map, key)) {\n const a = map[key].split('|')\n a.forEach((item) => {\n return updateS(item, key)\n })\n }\n }\n return x\n}\n\nexport const slugify = (s, delimiter = '-') => {\n return stripAccent(s)\n .trim()\n .toLowerCase()\n .replace(/\\W+/g, ' ')\n .replace(/\\s+/g, ' ')\n .replace(/\\s/g, delimiter)\n}\n", "// utils / random\n\nexport const randint = (min = 0, max = 1e6) => {\n return Math.floor(Math.random() * (max - min + 1)) + min\n}\n\nexport const genid = (len = 32, prefix = '') => {\n let s = prefix\n for (let i = 0; i < len; i++) {\n const r = Math.random()\n const k = Math.floor(r * 36)\n const c = k.toString(36)\n s += (k > 9 && r > 0.3 && r < 0.7) ? c.toUpperCase() : c\n }\n return s.substring(0, len)\n}\n", "// utils / date\n\nimport {\n isObject\n} from './detection.js'\n\nconst getDateFormat = () => {\n return {\n dateStyle: 'medium',\n timeStyle: 'long'\n }\n}\n\nconst getTimeConvers = () => {\n return {\n second: 1000,\n minute: 60,\n hour: 60,\n day: 24,\n week: 7,\n month: 4,\n year: 12\n }\n}\n\nconst isValidLocal = (hl) => {\n try {\n const locale = new Intl.Locale(hl)\n return locale.language !== ''\n } catch (err) {\n return false\n }\n}\n\nexport const formatDateString = (...args) => {\n const input = args[0]\n const lang = isValidLocal(args[1]) ? args[1] : 'en'\n const dfmt = getDateFormat()\n const opt = args.length >= 3\n ? args[2]\n : args.length === 1\n ? dfmt\n : isObject(args[1])\n ? args[1]\n : dfmt\n const dtf = new Intl.DateTimeFormat(lang, opt)\n return dtf.format(new Date(input))\n}\n\nexport const formatTimeAgo = (input, lang = 'en', justnow = 'just now') => {\n const t = new Date(input)\n let delta = Date.now() - t\n const tcv = getTimeConvers()\n if (delta <= tcv.second) {\n return justnow\n }\n let unit = 'second'\n for (const key in tcv) {\n if (delta < tcv[key]) {\n break\n } else {\n unit = key\n delta /= tcv[key]\n }\n }\n delta = Math.floor(delta)\n const rel = new Intl.RelativeTimeFormat(lang)\n return rel.format(-delta, unit)\n}\n", "// utils / curry\n\nexport const curry = (fn) => {\n const totalArguments = fn.length\n const next = (argumentLength, rest) => {\n if (argumentLength > 0) {\n return (...args) => {\n return next(argumentLength - args.length, [...rest, ...args])\n }\n }\n return fn(...rest)\n }\n return next(totalArguments, [])\n}\n", "// utils / compose\n\nexport const compose = (...fns) => {\n return fns.reduce((f, g) => (x) => f(g(x)))\n}\n", "// utils / pipe\n\nexport const pipe = (...fns) => {\n return fns.reduce((f, g) => (x) => g(f(x)))\n}\n", "// utils / defineProp\n\nexport const defineProp = (ob, key, val, config = {}) => {\n const {\n writable = false,\n configurable = false,\n enumerable = false\n } = config\n Object.defineProperty(ob, key, {\n value: val,\n writable,\n configurable,\n enumerable\n })\n}\n", "// utils / maybe\n\nimport {\n defineProp\n} from './defineProp.js'\n\nexport const maybe = (val) => {\n const __val = val\n const isNil = () => {\n return __val === null || __val === undefined\n }\n const value = () => {\n return __val\n }\n const getElse = (fn) => {\n return maybe(__val || fn())\n }\n const filter = (fn) => {\n return maybe(fn(__val) === true ? __val : null)\n }\n const map = (fn) => {\n return maybe(isNil() ? null : fn(__val))\n }\n const output = Object.create({})\n defineProp(output, '__value__', __val, { enumerable: true })\n defineProp(output, '__type__', 'Maybe', { enumerable: true })\n defineProp(output, 'isNil', isNil)\n defineProp(output, 'value', value)\n defineProp(output, 'map', map)\n defineProp(output, 'if', filter)\n defineProp(output, 'else', getElse)\n return output\n}\n", "/**\n * bellajs\n * @ndaidong\n**/\n\nimport {\n isObject,\n isArray,\n isDate,\n isString,\n hasProperty\n} from './utils/detection.js'\n\nexport const clone = (val, history = null) => {\n const stack = history || new Set()\n\n if (stack.has(val)) {\n return val\n }\n\n stack.add(val)\n\n if (isDate(val)) {\n return new Date(val.valueOf())\n }\n\n const copyObject = (o) => {\n const oo = Object.create({})\n for (const k in o) {\n if (hasProperty(o, k)) {\n oo[k] = clone(o[k], stack)\n }\n }\n return oo\n }\n\n const copyArray = (a) => {\n return [...a].map((e) => {\n if (isArray(e)) {\n return copyArray(e)\n } else if (isObject(e)) {\n return copyObject(e)\n }\n return clone(e, stack)\n })\n }\n\n if (isArray(val)) {\n return copyArray(val)\n }\n\n if (isObject(val)) {\n return copyObject(val)\n }\n\n return val\n}\n\nexport const copies = (source, dest, matched = false, excepts = []) => {\n for (const k in source) {\n if (excepts.length > 0 && excepts.includes(k)) {\n continue // eslint-disable-line no-continue\n }\n if (!matched || (matched && hasProperty(dest, k))) {\n const oa = source[k]\n const ob = dest[k]\n if ((isObject(ob) && isObject(oa)) || (isArray(ob) && isArray(oa))) {\n dest[k] = copies(oa, dest[k], matched, excepts)\n } else {\n dest[k] = clone(oa)\n }\n }\n }\n return dest\n}\n\nexport const unique = (arr = []) => {\n return [...new Set(arr)]\n}\n\nconst fnSort = (a, b) => {\n return a > b ? 1 : (a < b ? -1 : 0)\n}\n\nexport const sort = (arr = [], sorting = null) => {\n const tmp = [...arr]\n const fn = sorting || fnSort\n tmp.sort(fn)\n return tmp\n}\n\nexport const sortBy = (arr = [], order = 1, key = '') => {\n if (!isString(key) || !hasProperty(arr[0], key)) {\n return arr\n }\n return sort(arr, (m, n) => {\n return m[key] > n[key] ? order : (m[key] < n[key] ? (-1 * order) : 0)\n })\n}\n\nexport const shuffle = (arr = []) => {\n const input = [...arr]\n const output = []\n let inputLen = input.length\n while (inputLen > 0) {\n const index = Math.floor(Math.random() * inputLen)\n output.push(input.splice(index, 1)[0])\n inputLen--\n }\n return output\n}\n\nexport const pick = (arr = [], count = 1) => {\n const a = shuffle(arr)\n const mc = Math.max(1, count)\n const c = Math.min(mc, a.length - 1)\n return a.splice(0, c)\n}\n\nexport * from './utils/detection.js'\nexport * from './utils/string.js'\nexport * from './utils/random.js'\nexport * from './utils/date.js'\n\nexport * from './utils/curry.js'\nexport * from './utils/compose.js'\nexport * from './utils/pipe.js'\nexport * from './utils/maybe.js'\n"], + "mappings": "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", + "names": ["ob2Str", "val", "isInteger", "isArray", "isString", "isNumber", "isBoolean", "isNull", "isUndefined", "isNil", "isFunction", "isObject", "isDate", "isElement", "v", "isLetter", "re", "isEmail", "isEmpty", "hasProperty", "ob", "k", "toString", "input", "s", "isNumber", "isString", "truncate", "len", "txt", "subtxt", "subtxtArr", "word", "stripTags", "escapeHTML", "unescapeHTML", "ucfirst", "x", "ucwords", "w", "replaceAll", "alpha", "beta", "a", "b", "isArray", "v", "k", "aaa", "bb", "getCharMap", "lmap", "map", "K", "stripAccent", "updateS", "ai", "key", "hasProperty", "item", "slugify", "delimiter", "randint", "min", "max", "genid", "len", "prefix", "s", "i", "r", "k", "getDateFormat", "getTimeConvers", "isValidLocal", "hl", "formatDateString", "args", "input", "lang", "dfmt", "opt", "isObject", "formatTimeAgo", "justnow", "t", "delta", "tcv", "unit", "key", "curry", "fn", "totalArguments", "next", "argumentLength", "rest", "args", "compose", "fns", "f", "g", "x", "pipe", "fns", "f", "g", "x", "defineProp", "ob", "key", "val", "config", "writable", "configurable", "enumerable", "maybe", "val", "__val", "isNil", "value", "getElse", "fn", "filter", "map", "output", "defineProp", "clone", "val", "history", "stack", "isDate", "copyObject", "o", "oo", "k", "hasProperty", "copyArray", "a", "e", "isArray", "isObject", "copies", "source", "dest", "matched", "excepts", "oa", "ob", "unique", "arr", "fnSort", "b", "sort", "sorting", "tmp", "fn", "sortBy", "order", "key", "isString", "m", "shuffle", "input", "output", "inputLen", "index", "pick", "count", "mc", "c"] } diff --git a/dist/bella.js b/dist/bella.js index 27cc445..cbeeb78 100644 --- a/dist/bella.js +++ b/dist/bella.js @@ -1,2 +1,2 @@ -// bellajs@11.1.0 https://github.com/ndaidong/bellajs - built with esbuild at 2022-10-12T09:56:19.003Z -var F=Object.create;var y=Object.defineProperty;var H=Object.getOwnPropertyDescriptor;var $=Object.getOwnPropertyNames;var q=Object.getPrototypeOf,z=Object.prototype.hasOwnProperty;var B=(t,e)=>{for(var r in e)y(t,r,{get:e[r],enumerable:!0})},O=(t,e,r,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of $(e))!z.call(t,n)&&n!==r&&y(t,n,{get:()=>e[n],enumerable:!(o=H(e,n))||o.enumerable});return t};var R=(t,e,r)=>(r=t!=null?F(q(t)):{},O(e||!t||!t.__esModule?y(r,"default",{value:t,enumerable:!0}):r,t)),V=t=>O(y({},"__esModule",{value:!0}),t);var jt={};B(jt,{TextEncoder:()=>S.TextEncoder,clone:()=>A,compose:()=>ht,copies:()=>_,crypto:()=>b,curry:()=>gt,escapeHTML:()=>tt,formatDateString:()=>mt,formatTimeAgo:()=>xt,genid:()=>it,hasProperty:()=>x,isArray:()=>u,isBoolean:()=>K,isDate:()=>M,isElement:()=>J,isEmail:()=>X,isEmpty:()=>Y,isFunction:()=>W,isInteger:()=>G,isLetter:()=>Q,isNil:()=>U,isNull:()=>N,isNumber:()=>h,isObject:()=>l,isString:()=>a,isUndefined:()=>E,maybe:()=>j,pick:()=>St,pipe:()=>bt,randint:()=>st,replaceAll:()=>d,sha256:()=>ut,sha512:()=>pt,shuffle:()=>P,slugify:()=>ot,sort:()=>I,sortBy:()=>wt,stripAccent:()=>D,stripTags:()=>v,truncate:()=>Z,ucfirst:()=>C,ucwords:()=>rt,unescapeHTML:()=>et,unique:()=>yt});module.exports=V(jt);var g=t=>({}).toString.call(t),G=t=>Number.isInteger(t),u=t=>Array.isArray(t),a=t=>String(t)===t,h=t=>Number(t)===t,K=t=>Boolean(t)===t,N=t=>g(t)==="[object Null]",E=t=>g(t)==="[object Undefined]",U=t=>E(t)||N(t),W=t=>g(t)==="[object Function]",l=t=>g(t)==="[object Object]"&&!u(t),M=t=>t instanceof Date&&!isNaN(t.valueOf()),J=t=>g(t).match(/^\[object HTML\w*Element]$/)!==null,Q=t=>{let e=/^[a-z]+$/i;return a(t)&&e.test(t)},X=t=>{let e=/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;return a(t)&&e.test(t)},Y=t=>!t||U(t)||a(t)&&t===""||u(t)&&t.length===0||l(t)&&Object.keys(t).length===0,x=(t,e)=>!t||!e?!1:Object.prototype.hasOwnProperty.call(t,e);var f=t=>{let e=h(t)?String(t):t;if(!a(e))throw new Error("InvalidInput: String required.");return e},Z=(t,e=140)=>{let r=f(t);if(r.length<=e)return r;let n=r.substring(0,e).trim(),s=n.split(" ");return s.length>1?(s.pop(),s.map(i=>i.trim()).join(" ")+"..."):n.substring(0,e-3)+"..."},v=t=>f(t).replace(/(<([^>]+)>)/ig,"").trim(),tt=t=>f(t).replace(/&/g,"&").replace(//g,">").replace(/"/g,"""),et=t=>f(t).replace(/"/g,'"').replace(/</g,"<").replace(/>/g,">").replace(/&/g,"&"),C=t=>{let e=f(t).toLowerCase();return e.length>1?e.charAt(0).toUpperCase()+e.slice(1):e.toUpperCase()},rt=t=>f(t).split(" ").map(e=>C(e)).join(" "),d=(t,e,r)=>{let o=f(t),n=h(e)?String(e):e,s=h(r)?String(r):r;if(a(n)&&a(s))o=o.split(n).join(s);else if(u(n)&&a(s))n.forEach(c=>{o=d(o,c,s)});else if(u(n)&&u(s)&&n.length===s.length){let c=n.length;if(c>0)for(let i=0;i{let t={a:"á|à|ả|ã|ạ|ă|ắ|ặ|ằ|ẳ|ẵ|â|ấ|ầ|ẩ|ẫ|ậ|ä|æ",c:"ç",d:"đ|ð",e:"é|è|ẻ|ẽ|ẹ|ê|ế|ề|ể|ễ|ệ|ë",i:"í|ì|ỉ|ĩ|ị|ï|î",n:"ñ",o:"ó|ò|ỏ|õ|ọ|ô|ố|ồ|ổ|ỗ|ộ|ơ|ớ|ờ|ở|ỡ|ợ|ö|ø",s:"ß",u:"ú|ù|ủ|ũ|ụ|ư|ứ|ừ|ử|ữ|ự|û",y:"ý|ỳ|ỷ|ỹ|ỵ|ÿ"},e={...t};return Object.keys(t).forEach(r=>{let o=r.toUpperCase();e[o]=t[r].toUpperCase()}),e},D=t=>{let e=f(t),r=(n,s)=>{e=d(e,n,s)},o=nt();for(let n in o)x(o,n)&&o[n].split("|").forEach(c=>r(c,n));return e},ot=(t,e="-")=>D(t).trim().toLowerCase().replace(/\W+/g," ").replace(/\s+/g," ").replace(/\s/g,e);var w=R(require("crypto"),1),S=require("util"),b=w.default.webcrypto?w.default.webcrypto:w.default,st=(t=0,e=1e6)=>{let r=new Uint8Array(1);b.getRandomValues(r);let o="0."+r[0].toString();return Math.floor(o*(e-t+1))+t},ct=(t=32,e="")=>{let r=e;for(let o=0;o9&&n>.3&&n<.7?c.toUpperCase():c}return r.substring(0,t)},L=(t=32,e="")=>{let r=e,o=b.getRandomValues(new Uint16Array(t));for(let n=0;n.3&&c<.7?i.toUpperCase():i}return r.substring(0,t)},it=(t=32,e="")=>t<=128?L(t,e):`${L(99,e)}${ct(t-99)}`;var T=async(t,e)=>{let r=new S.TextEncoder().encode(t),o=await b.subtle.digest(e,r);return[...new Uint8Array(o)].map(s=>s.toString(16).padStart(2,"0")).join("")},ut=async(t="")=>await T(t,"SHA-256"),pt=async(t="")=>await T(t,"SHA-512");var at=()=>({dateStyle:"medium",timeStyle:"long"}),lt=()=>({second:1e3,minute:60,hour:60,day:24,week:7,month:4,year:12}),ft=t=>{try{return new Intl.Locale(t).language!==""}catch{return!1}},mt=(...t)=>{let e=t[0],r=ft(t[1])?t[1]:"en",o=at(),n=t.length>=3?t[2]:t.length===1?o:l(t[1])?t[1]:o;return new Intl.DateTimeFormat(r,n).format(new Date(e))},xt=(t,e="en",r="just now")=>{let o=new Date(t),n=Date.now()-o,s=lt();if(n<=s.second)return r;let c="second";for(let p in s){if(n{let e=t.length,r=(o,n)=>o>0?(...s)=>r(o-s.length,[...n,...s]):t(...n);return r(e,[])};var ht=(...t)=>t.reduce((e,r)=>o=>e(r(o)));var bt=(...t)=>t.reduce((e,r)=>o=>r(e(o)));var m=(t,e,r,o={})=>{let{writable:n=!1,configurable:s=!1,enumerable:c=!1}=o;Object.defineProperty(t,e,{value:r,writable:n,configurable:s,enumerable:c})};var j=t=>{let e=t,r=()=>e==null,o=()=>e,n=p=>j(e||p()),s=p=>j(p(e)===!0?e:null),c=p=>j(r()?null:p(e)),i=Object.create({});return m(i,"__value__",e,{enumerable:!0}),m(i,"__type__","Maybe",{enumerable:!0}),m(i,"isNil",r),m(i,"value",o),m(i,"map",c),m(i,"if",s),m(i,"else",n),i};var A=(t,e=null)=>{let r=e||new Set;if(r.has(t))return t;if(r.add(t),M(t))return new Date(t.valueOf());let o=s=>{let c=Object.create({});for(let i in s)x(s,i)&&(c[i]=A(s[i],r));return c},n=s=>[...s].map(c=>u(c)?n(c):l(c)?o(c):A(c,r));return u(t)?n(t):l(t)?o(t):t},_=(t,e,r=!1,o=[])=>{for(let n in t)if(!(o.length>0&&o.includes(n))&&(!r||r&&x(e,n))){let s=t[n],c=e[n];l(c)&&l(s)||u(c)&&u(s)?e[n]=_(s,e[n],r,o):e[n]=A(s)}return e},yt=(t=[])=>[...new Set(t)],dt=(t,e)=>t>e?1:t{let r=[...t],o=e||dt;return r.sort(o),r},wt=(t=[],e=1,r="")=>!a(r)||!x(t[0],r)?t:I(t,(o,n)=>o[r]>n[r]?e:o[r]{let e=[...t],r=[],o=e.length;for(;o>0;){let n=Math.floor(Math.random()*o);r.push(e.splice(n,1)[0]),o--}return r},St=(t=[],e=1)=>{let r=P(t),o=Math.max(1,e),n=Math.min(o,r.length-1);return r.splice(0,n)};0&&(module.exports={TextEncoder,clone,compose,copies,crypto,curry,escapeHTML,formatDateString,formatTimeAgo,genid,hasProperty,isArray,isBoolean,isDate,isElement,isEmail,isEmpty,isFunction,isInteger,isLetter,isNil,isNull,isNumber,isObject,isString,isUndefined,maybe,pick,pipe,randint,replaceAll,sha256,sha512,shuffle,slugify,sort,sortBy,stripAccent,stripTags,truncate,ucfirst,ucwords,unescapeHTML,unique}); +// bellajs@11.1.1 https://github.com/ndaidong/bellajs - built with esbuild at 2022-10-12T10:45:38.055Z +var w=Object.defineProperty;var E=Object.getOwnPropertyDescriptor;var T=Object.getOwnPropertyNames;var I=Object.prototype.hasOwnProperty;var P=(t,e)=>{for(var r in e)w(t,r,{get:e[r],enumerable:!0})},U=(t,e,r,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of T(e))!I.call(t,n)&&n!==r&&w(t,n,{get:()=>e[n],enumerable:!(o=E(e,n))||o.enumerable});return t};var k=t=>U(w({},"__esModule",{value:!0}),t);var at={};P(at,{clone:()=>y,compose:()=>st,copies:()=>D,curry:()=>ot,escapeHTML:()=>W,formatDateString:()=>rt,formatTimeAgo:()=>nt,genid:()=>Z,hasProperty:()=>x,isArray:()=>u,isBoolean:()=>q,isDate:()=>j,isElement:()=>B,isEmail:()=>$,isEmpty:()=>K,isFunction:()=>z,isInteger:()=>F,isLetter:()=>H,isNil:()=>O,isNull:()=>S,isNumber:()=>h,isObject:()=>a,isString:()=>l,isUndefined:()=>M,maybe:()=>d,pick:()=>lt,pipe:()=>ct,randint:()=>Y,replaceAll:()=>b,shuffle:()=>_,slugify:()=>X,sort:()=>L,sortBy:()=>pt,stripAccent:()=>N,stripTags:()=>V,truncate:()=>R,ucfirst:()=>A,ucwords:()=>J,unescapeHTML:()=>G,unique:()=>it});module.exports=k(at);var g=t=>({}).toString.call(t),F=t=>Number.isInteger(t),u=t=>Array.isArray(t),l=t=>String(t)===t,h=t=>Number(t)===t,q=t=>Boolean(t)===t,S=t=>g(t)==="[object Null]",M=t=>g(t)==="[object Undefined]",O=t=>M(t)||S(t),z=t=>g(t)==="[object Function]",a=t=>g(t)==="[object Object]"&&!u(t),j=t=>t instanceof Date&&!isNaN(t.valueOf()),B=t=>g(t).match(/^\[object HTML\w*Element]$/)!==null,H=t=>{let e=/^[a-z]+$/i;return l(t)&&e.test(t)},$=t=>{let e=/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;return l(t)&&e.test(t)},K=t=>!t||O(t)||l(t)&&t===""||u(t)&&t.length===0||a(t)&&Object.keys(t).length===0,x=(t,e)=>!t||!e?!1:Object.prototype.hasOwnProperty.call(t,e);var f=t=>{let e=h(t)?String(t):t;if(!l(e))throw new Error("InvalidInput: String required.");return e},R=(t,e=140)=>{let r=f(t);if(r.length<=e)return r;let n=r.substring(0,e).trim(),s=n.split(" ");return s.length>1?(s.pop(),s.map(i=>i.trim()).join(" ")+"..."):n.substring(0,e-3)+"..."},V=t=>f(t).replace(/(<([^>]+)>)/ig,"").trim(),W=t=>f(t).replace(/&/g,"&").replace(//g,">").replace(/"/g,"""),G=t=>f(t).replace(/"/g,'"').replace(/</g,"<").replace(/>/g,">").replace(/&/g,"&"),A=t=>{let e=f(t).toLowerCase();return e.length>1?e.charAt(0).toUpperCase()+e.slice(1):e.toUpperCase()},J=t=>f(t).split(" ").map(e=>A(e)).join(" "),b=(t,e,r)=>{let o=f(t),n=h(e)?String(e):e,s=h(r)?String(r):r;if(l(n)&&l(s))o=o.split(n).join(s);else if(u(n)&&l(s))n.forEach(c=>{o=b(o,c,s)});else if(u(n)&&u(s)&&n.length===s.length){let c=n.length;if(c>0)for(let i=0;i{let t={a:"á|à|ả|ã|ạ|ă|ắ|ặ|ằ|ẳ|ẵ|â|ấ|ầ|ẩ|ẫ|ậ|ä|æ",c:"ç",d:"đ|ð",e:"é|è|ẻ|ẽ|ẹ|ê|ế|ề|ể|ễ|ệ|ë",i:"í|ì|ỉ|ĩ|ị|ï|î",n:"ñ",o:"ó|ò|ỏ|õ|ọ|ô|ố|ồ|ổ|ỗ|ộ|ơ|ớ|ờ|ở|ỡ|ợ|ö|ø",s:"ß",u:"ú|ù|ủ|ũ|ụ|ư|ứ|ừ|ử|ữ|ự|û",y:"ý|ỳ|ỷ|ỹ|ỵ|ÿ"},e={...t};return Object.keys(t).forEach(r=>{let o=r.toUpperCase();e[o]=t[r].toUpperCase()}),e},N=t=>{let e=f(t),r=(n,s)=>{e=b(e,n,s)},o=Q();for(let n in o)x(o,n)&&o[n].split("|").forEach(c=>r(c,n));return e},X=(t,e="-")=>N(t).trim().toLowerCase().replace(/\W+/g," ").replace(/\s+/g," ").replace(/\s/g,e);var Y=(t=0,e=1e6)=>Math.floor(Math.random()*(e-t+1))+t,Z=(t=32,e="")=>{let r=e;for(let o=0;o9&&n>.3&&n<.7?c.toUpperCase():c}return r.substring(0,t)};var v=()=>({dateStyle:"medium",timeStyle:"long"}),tt=()=>({second:1e3,minute:60,hour:60,day:24,week:7,month:4,year:12}),et=t=>{try{return new Intl.Locale(t).language!==""}catch{return!1}},rt=(...t)=>{let e=t[0],r=et(t[1])?t[1]:"en",o=v(),n=t.length>=3?t[2]:t.length===1?o:a(t[1])?t[1]:o;return new Intl.DateTimeFormat(r,n).format(new Date(e))},nt=(t,e="en",r="just now")=>{let o=new Date(t),n=Date.now()-o,s=tt();if(n<=s.second)return r;let c="second";for(let p in s){if(n{let e=t.length,r=(o,n)=>o>0?(...s)=>r(o-s.length,[...n,...s]):t(...n);return r(e,[])};var st=(...t)=>t.reduce((e,r)=>o=>e(r(o)));var ct=(...t)=>t.reduce((e,r)=>o=>r(e(o)));var m=(t,e,r,o={})=>{let{writable:n=!1,configurable:s=!1,enumerable:c=!1}=o;Object.defineProperty(t,e,{value:r,writable:n,configurable:s,enumerable:c})};var d=t=>{let e=t,r=()=>e==null,o=()=>e,n=p=>d(e||p()),s=p=>d(p(e)===!0?e:null),c=p=>d(r()?null:p(e)),i=Object.create({});return m(i,"__value__",e,{enumerable:!0}),m(i,"__type__","Maybe",{enumerable:!0}),m(i,"isNil",r),m(i,"value",o),m(i,"map",c),m(i,"if",s),m(i,"else",n),i};var y=(t,e=null)=>{let r=e||new Set;if(r.has(t))return t;if(r.add(t),j(t))return new Date(t.valueOf());let o=s=>{let c=Object.create({});for(let i in s)x(s,i)&&(c[i]=y(s[i],r));return c},n=s=>[...s].map(c=>u(c)?n(c):a(c)?o(c):y(c,r));return u(t)?n(t):a(t)?o(t):t},D=(t,e,r=!1,o=[])=>{for(let n in t)if(!(o.length>0&&o.includes(n))&&(!r||r&&x(e,n))){let s=t[n],c=e[n];a(c)&&a(s)||u(c)&&u(s)?e[n]=D(s,e[n],r,o):e[n]=y(s)}return e},it=(t=[])=>[...new Set(t)],ut=(t,e)=>t>e?1:t{let r=[...t],o=e||ut;return r.sort(o),r},pt=(t=[],e=1,r="")=>!l(r)||!x(t[0],r)?t:L(t,(o,n)=>o[r]>n[r]?e:o[r]{let e=[...t],r=[],o=e.length;for(;o>0;){let n=Math.floor(Math.random()*o);r.push(e.splice(n,1)[0]),o--}return r},lt=(t=[],e=1)=>{let r=_(t),o=Math.max(1,e),n=Math.min(o,r.length-1);return r.splice(0,n)};0&&(module.exports={clone,compose,copies,curry,escapeHTML,formatDateString,formatTimeAgo,genid,hasProperty,isArray,isBoolean,isDate,isElement,isEmail,isEmpty,isFunction,isInteger,isLetter,isNil,isNull,isNumber,isObject,isString,isUndefined,maybe,pick,pipe,randint,replaceAll,shuffle,slugify,sort,sortBy,stripAccent,stripTags,truncate,ucfirst,ucwords,unescapeHTML,unique}); diff --git a/dist/bella.js.map b/dist/bella.js.map index c46d7ca..b504037 100644 --- a/dist/bella.js.map +++ b/dist/bella.js.map @@ -1,7 +1,7 @@ { "version": 3, - "sources": ["../src/main.js", "../src/utils/detection.js", "../src/utils/string.js", "../src/utils/random.js", "../src/utils/crypto.js", "../src/utils/date.js", "../src/utils/curry.js", "../src/utils/compose.js", "../src/utils/pipe.js", "../src/utils/defineProp.js", "../src/utils/maybe.js"], - "sourcesContent": ["/**\n * bellajs\n * @ndaidong\n**/\n\nimport {\n isObject,\n isArray,\n isDate,\n isString,\n hasProperty\n} from './utils/detection.js'\n\nexport const clone = (val, history = null) => {\n const stack = history || new Set()\n\n if (stack.has(val)) {\n return val\n }\n\n stack.add(val)\n\n if (isDate(val)) {\n return new Date(val.valueOf())\n }\n\n const copyObject = (o) => {\n const oo = Object.create({})\n for (const k in o) {\n if (hasProperty(o, k)) {\n oo[k] = clone(o[k], stack)\n }\n }\n return oo\n }\n\n const copyArray = (a) => {\n return [...a].map((e) => {\n if (isArray(e)) {\n return copyArray(e)\n } else if (isObject(e)) {\n return copyObject(e)\n }\n return clone(e, stack)\n })\n }\n\n if (isArray(val)) {\n return copyArray(val)\n }\n\n if (isObject(val)) {\n return copyObject(val)\n }\n\n return val\n}\n\nexport const copies = (source, dest, matched = false, excepts = []) => {\n for (const k in source) {\n if (excepts.length > 0 && excepts.includes(k)) {\n continue // eslint-disable-line no-continue\n }\n if (!matched || (matched && hasProperty(dest, k))) {\n const oa = source[k]\n const ob = dest[k]\n if ((isObject(ob) && isObject(oa)) || (isArray(ob) && isArray(oa))) {\n dest[k] = copies(oa, dest[k], matched, excepts)\n } else {\n dest[k] = clone(oa)\n }\n }\n }\n return dest\n}\n\nexport const unique = (arr = []) => {\n return [...new Set(arr)]\n}\n\nconst fnSort = (a, b) => {\n return a > b ? 1 : (a < b ? -1 : 0)\n}\n\nexport const sort = (arr = [], sorting = null) => {\n const tmp = [...arr]\n const fn = sorting || fnSort\n tmp.sort(fn)\n return tmp\n}\n\nexport const sortBy = (arr = [], order = 1, key = '') => {\n if (!isString(key) || !hasProperty(arr[0], key)) {\n return arr\n }\n return sort(arr, (m, n) => {\n return m[key] > n[key] ? order : (m[key] < n[key] ? (-1 * order) : 0)\n })\n}\n\nexport const shuffle = (arr = []) => {\n const input = [...arr]\n const output = []\n let inputLen = input.length\n while (inputLen > 0) {\n const index = Math.floor(Math.random() * inputLen)\n output.push(input.splice(index, 1)[0])\n inputLen--\n }\n return output\n}\n\nexport const pick = (arr = [], count = 1) => {\n const a = shuffle(arr)\n const mc = Math.max(1, count)\n const c = Math.min(mc, a.length - 1)\n return a.splice(0, c)\n}\n\nexport * from './utils/detection.js'\nexport * from './utils/string.js'\nexport * from './utils/random.js'\nexport * from './utils/crypto.js'\nexport * from './utils/date.js'\n\nexport * from './utils/curry.js'\nexport * from './utils/compose.js'\nexport * from './utils/pipe.js'\nexport * from './utils/maybe.js'\n", "// utils / detection\n\nconst ob2Str = (val) => {\n return {}.toString.call(val)\n}\n\nexport const isInteger = (val) => {\n return Number.isInteger(val)\n}\n\nexport const isArray = (val) => {\n return Array.isArray(val)\n}\n\nexport const isString = (val) => {\n return String(val) === val\n}\n\nexport const isNumber = (val) => {\n return Number(val) === val\n}\n\nexport const isBoolean = (val) => {\n return Boolean(val) === val\n}\n\nexport const isNull = (val) => {\n return ob2Str(val) === '[object Null]'\n}\n\nexport const isUndefined = (val) => {\n return ob2Str(val) === '[object Undefined]'\n}\n\nexport const isNil = (val) => {\n return isUndefined(val) || isNull(val)\n}\n\nexport const isFunction = (val) => {\n return ob2Str(val) === '[object Function]'\n}\n\nexport const isObject = (val) => {\n return ob2Str(val) === '[object Object]' && !isArray(val)\n}\n\nexport const isDate = (val) => {\n return val instanceof Date && !isNaN(val.valueOf())\n}\n\nexport const isElement = (v) => {\n return ob2Str(v).match(/^\\[object HTML\\w*Element]$/) !== null\n}\n\nexport const isLetter = (val) => {\n const re = /^[a-z]+$/i\n return isString(val) && re.test(val)\n}\n\nexport const isEmail = (val) => {\n const re = /^([\\w-]+(?:\\.[\\w-]+)*)@((?:[\\w-]+\\.)*\\w[\\w-]{0,66})\\.([a-z]{2,6}(?:\\.[a-z]{2})?)$/i\n return isString(val) && re.test(val)\n}\n\nexport const isEmpty = (val) => {\n return !val || isNil(val) ||\n (isString(val) && val === '') ||\n (isArray(val) && val.length === 0) ||\n (isObject(val) && Object.keys(val).length === 0)\n}\n\nexport const hasProperty = (ob, k) => {\n if (!ob || !k) {\n return false\n }\n return Object.prototype.hasOwnProperty.call(ob, k)\n}\n", "// utils / string\n\nimport {\n isArray,\n isString,\n isNumber,\n hasProperty\n} from './detection.js'\n\nconst toString = (input) => {\n const s = isNumber(input) ? String(input) : input\n if (!isString(s)) {\n throw new Error('InvalidInput: String required.')\n }\n return s\n}\n\nexport const truncate = (s, len = 140) => {\n const txt = toString(s)\n const txtlen = txt.length\n if (txtlen <= len) {\n return txt\n }\n const subtxt = txt.substring(0, len).trim()\n const subtxtArr = subtxt.split(' ')\n const subtxtLen = subtxtArr.length\n if (subtxtLen > 1) {\n subtxtArr.pop()\n return subtxtArr.map(word => word.trim()).join(' ') + '...'\n }\n return subtxt.substring(0, len - 3) + '...'\n}\n\nexport const stripTags = (s) => {\n return toString(s).replace(/(<([^>]+)>)/ig, '').trim()\n}\n\nexport const escapeHTML = (s) => {\n return toString(s)\n .replace(/&/g, '&')\n .replace(//g, '>')\n .replace(/\"/g, '"')\n}\n\nexport const unescapeHTML = (s) => {\n return toString(s)\n .replace(/"/g, '\"')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/&/g, '&')\n}\n\nexport const ucfirst = (s) => {\n const x = toString(s).toLowerCase()\n return x.length > 1 ? x.charAt(0).toUpperCase() + x.slice(1) : x.toUpperCase()\n}\n\nexport const ucwords = (s) => {\n return toString(s).split(' ').map((w) => {\n return ucfirst(w)\n }).join(' ')\n}\n\nexport const replaceAll = (s, alpha, beta) => {\n let x = toString(s)\n const a = isNumber(alpha) ? String(alpha) : alpha\n const b = isNumber(beta) ? String(beta) : beta\n\n if (isString(a) && isString(b)) {\n const aa = x.split(a)\n x = aa.join(b)\n } else if (isArray(a) && isString(b)) {\n a.forEach((v) => {\n x = replaceAll(x, v, b)\n })\n } else if (isArray(a) && isArray(b) && a.length === b.length) {\n const k = a.length\n if (k > 0) {\n for (let i = 0; i < k; i++) {\n const aaa = a[i]\n const bb = b[i]\n x = replaceAll(x, aaa, bb)\n }\n }\n }\n return x\n}\n\nconst getCharMap = () => {\n const lmap = {\n a: 'á|à|ả|ã|ạ|ă|ắ|ặ|ằ|ẳ|ẵ|â|ấ|ầ|ẩ|ẫ|ậ|ä|æ',\n c: 'ç',\n d: 'đ|ð',\n e: 'é|è|ẻ|ẽ|ẹ|ê|ế|ề|ể|ễ|ệ|ë',\n i: 'í|ì|ỉ|ĩ|ị|ï|î',\n n: 'ñ',\n o: 'ó|ò|ỏ|õ|ọ|ô|ố|ồ|ổ|ỗ|ộ|ơ|ớ|ờ|ở|ỡ|ợ|ö|ø',\n s: 'ß',\n u: 'ú|ù|ủ|ũ|ụ|ư|ứ|ừ|ử|ữ|ự|û',\n y: 'ý|ỳ|ỷ|ỹ|ỵ|ÿ'\n }\n\n const map = {\n ...lmap\n }\n Object.keys(lmap).forEach((k) => {\n const K = k.toUpperCase()\n map[K] = lmap[k].toUpperCase()\n })\n\n return map\n}\n\nexport const stripAccent = (s) => {\n let x = toString(s)\n\n const updateS = (ai, key) => {\n x = replaceAll(x, ai, key)\n }\n\n const map = getCharMap()\n for (const key in map) {\n if (hasProperty(map, key)) {\n const a = map[key].split('|')\n a.forEach((item) => {\n return updateS(item, key)\n })\n }\n }\n return x\n}\n\nexport const slugify = (s, delimiter = '-') => {\n return stripAccent(s)\n .trim()\n .toLowerCase()\n .replace(/\\W+/g, ' ')\n .replace(/\\s+/g, ' ')\n .replace(/\\s/g, delimiter)\n}\n", "// utils / random\nimport ncrypto from 'node:crypto'\nexport { TextEncoder } from 'node:util'\n\nexport const crypto = ncrypto.webcrypto ? ncrypto.webcrypto : ncrypto\n\nexport const randint = (min = 0, max = 1e6) => {\n const byteArray = new Uint8Array(1)\n crypto.getRandomValues(byteArray)\n const floatNum = '0.' + byteArray[0].toString()\n return Math.floor(floatNum * (max - min + 1)) + min\n}\n\nconst mathGen = (len = 32, prefix = '') => {\n let s = prefix\n for (let i = 0; i < len; i++) {\n const r = Math.random()\n const k = Math.floor(r * 36)\n const c = k.toString(36)\n s += (k > 9 && r > 0.3 && r < 0.7) ? c.toUpperCase() : c\n }\n return s.substring(0, len)\n}\n\nconst cryptoGen = (len = 32, prefix = '') => {\n let s = prefix\n const nums = crypto.getRandomValues(new Uint16Array(len))\n for (let i = 0; i < nums.length; i++) {\n const n = nums[i].toString(36)\n const r = Math.random()\n const c = n.charAt(Math.floor(r * n.length))\n s += (r > 0.3 && r < 0.7) ? c.toUpperCase() : c\n }\n return s.substring(0, len)\n}\n\nexport const genid = (len = 32, prefix = '') => {\n return len <= 128 ? cryptoGen(len, prefix) : `${cryptoGen(99, prefix)}${mathGen(len - 99)}`\n}\n", "// utils / cryptography\n\nimport { TextEncoder, crypto } from './random.js'\n\nconst sha = async (message, algorithm) => {\n const enc = new TextEncoder().encode(message)\n const buff = await crypto.subtle.digest(algorithm, enc)\n const hex = [...new Uint8Array(buff)].map(b => b.toString(16).padStart(2, '0')).join('')\n return hex\n}\n\nexport const sha256 = async (txt = '') => {\n const hash = await sha(txt, 'SHA-256')\n return hash\n}\n\nexport const sha512 = async (txt = '') => {\n const hash = await sha(txt, 'SHA-512')\n return hash\n}\n", "// utils / date\n\nimport {\n isObject\n} from './detection.js'\n\nconst getDateFormat = () => {\n return {\n dateStyle: 'medium',\n timeStyle: 'long'\n }\n}\n\nconst getTimeConvers = () => {\n return {\n second: 1000,\n minute: 60,\n hour: 60,\n day: 24,\n week: 7,\n month: 4,\n year: 12\n }\n}\n\nconst isValidLocal = (hl) => {\n try {\n const locale = new Intl.Locale(hl)\n return locale.language !== ''\n } catch (err) {\n return false\n }\n}\n\nexport const formatDateString = (...args) => {\n const input = args[0]\n const lang = isValidLocal(args[1]) ? args[1] : 'en'\n const dfmt = getDateFormat()\n const opt = args.length >= 3\n ? args[2]\n : args.length === 1\n ? dfmt\n : isObject(args[1])\n ? args[1]\n : dfmt\n const dtf = new Intl.DateTimeFormat(lang, opt)\n return dtf.format(new Date(input))\n}\n\nexport const formatTimeAgo = (input, lang = 'en', justnow = 'just now') => {\n const t = new Date(input)\n let delta = Date.now() - t\n const tcv = getTimeConvers()\n if (delta <= tcv.second) {\n return justnow\n }\n let unit = 'second'\n for (const key in tcv) {\n if (delta < tcv[key]) {\n break\n } else {\n unit = key\n delta /= tcv[key]\n }\n }\n delta = Math.floor(delta)\n const rel = new Intl.RelativeTimeFormat(lang)\n return rel.format(-delta, unit)\n}\n", "// utils / curry\n\nexport const curry = (fn) => {\n const totalArguments = fn.length\n const next = (argumentLength, rest) => {\n if (argumentLength > 0) {\n return (...args) => {\n return next(argumentLength - args.length, [...rest, ...args])\n }\n }\n return fn(...rest)\n }\n return next(totalArguments, [])\n}\n", "// utils / compose\n\nexport const compose = (...fns) => {\n return fns.reduce((f, g) => (x) => f(g(x)))\n}\n", "// utils / pipe\n\nexport const pipe = (...fns) => {\n return fns.reduce((f, g) => (x) => g(f(x)))\n}\n", "// utils / defineProp\n\nexport const defineProp = (ob, key, val, config = {}) => {\n const {\n writable = false,\n configurable = false,\n enumerable = false\n } = config\n Object.defineProperty(ob, key, {\n value: val,\n writable,\n configurable,\n enumerable\n })\n}\n", "// utils / maybe\n\nimport {\n defineProp\n} from './defineProp.js'\n\nexport const maybe = (val) => {\n const __val = val\n const isNil = () => {\n return __val === null || __val === undefined\n }\n const value = () => {\n return __val\n }\n const getElse = (fn) => {\n return maybe(__val || fn())\n }\n const filter = (fn) => {\n return maybe(fn(__val) === true ? __val : null)\n }\n const map = (fn) => {\n return maybe(isNil() ? null : fn(__val))\n }\n const output = Object.create({})\n defineProp(output, '__value__', __val, { enumerable: true })\n defineProp(output, '__type__', 'Maybe', { enumerable: true })\n defineProp(output, 'isNil', isNil)\n defineProp(output, 'value', value)\n defineProp(output, 'map', map)\n defineProp(output, 'if', filter)\n defineProp(output, 'else', getElse)\n return output\n}\n"], - "mappings": "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", - "names": ["main_exports", "__export", "clone", "compose", "copies", "crypto", "curry", "escapeHTML", "formatDateString", "formatTimeAgo", "genid", "hasProperty", "isArray", "isBoolean", "isDate", "isElement", "isEmail", "isEmpty", "isFunction", "isInteger", "isLetter", "isNil", "isNull", "isNumber", "isObject", "isString", "isUndefined", "maybe", "pick", "pipe", "randint", "replaceAll", "sha256", "sha512", "shuffle", "slugify", "sort", "sortBy", "stripAccent", "stripTags", "truncate", "ucfirst", "ucwords", "unescapeHTML", "unique", "__toCommonJS", "ob2Str", "val", "isInteger", "isArray", "isString", "isNumber", "isBoolean", "isNull", "isUndefined", "isNil", "isFunction", "isObject", "isDate", "isElement", "v", "isLetter", "re", "isEmail", "isEmpty", "hasProperty", "ob", "k", "toString", "input", "s", "isNumber", "isString", "truncate", "len", "txt", "subtxt", "subtxtArr", "word", "stripTags", "escapeHTML", "unescapeHTML", "ucfirst", "x", "ucwords", "w", "replaceAll", "alpha", "beta", "a", "b", "isArray", "v", "k", "aaa", "bb", "getCharMap", "lmap", "map", "K", "stripAccent", "updateS", "ai", "key", "hasProperty", "item", "slugify", "delimiter", "import_node_crypto", "import_node_util", "crypto", "ncrypto", "randint", "min", "max", "byteArray", "floatNum", "mathGen", "len", "prefix", "s", "i", "r", "k", "cryptoGen", "nums", "n", "c", "genid", "sha", "message", "algorithm", "enc", "buff", "crypto", "b", "sha256", "txt", "sha512", "getDateFormat", "getTimeConvers", "isValidLocal", "hl", "formatDateString", "args", "input", "lang", "dfmt", "opt", "isObject", "formatTimeAgo", "justnow", "t", "delta", "tcv", "unit", "key", "curry", "fn", "totalArguments", "next", "argumentLength", "rest", "args", "compose", "fns", "f", "g", "x", "pipe", "fns", "f", "g", "x", "defineProp", "ob", "key", "val", "config", "writable", "configurable", "enumerable", "maybe", "val", "__val", "isNil", "value", "getElse", "fn", "filter", "map", "output", "defineProp", "clone", "val", "history", "stack", "isDate", "copyObject", "o", "oo", "k", "hasProperty", "copyArray", "a", "e", "isArray", "isObject", "copies", "source", "dest", "matched", "excepts", "oa", "ob", "unique", "arr", "fnSort", "b", "sort", "sorting", "tmp", "fn", "sortBy", "order", "key", "isString", "m", "shuffle", "input", "output", "inputLen", "index", "pick", "count", "mc", "c"] + "sources": ["../src/main.js", "../src/utils/detection.js", "../src/utils/string.js", "../src/utils/random.js", "../src/utils/date.js", "../src/utils/curry.js", "../src/utils/compose.js", "../src/utils/pipe.js", "../src/utils/defineProp.js", "../src/utils/maybe.js"], + "sourcesContent": ["/**\n * bellajs\n * @ndaidong\n**/\n\nimport {\n isObject,\n isArray,\n isDate,\n isString,\n hasProperty\n} from './utils/detection.js'\n\nexport const clone = (val, history = null) => {\n const stack = history || new Set()\n\n if (stack.has(val)) {\n return val\n }\n\n stack.add(val)\n\n if (isDate(val)) {\n return new Date(val.valueOf())\n }\n\n const copyObject = (o) => {\n const oo = Object.create({})\n for (const k in o) {\n if (hasProperty(o, k)) {\n oo[k] = clone(o[k], stack)\n }\n }\n return oo\n }\n\n const copyArray = (a) => {\n return [...a].map((e) => {\n if (isArray(e)) {\n return copyArray(e)\n } else if (isObject(e)) {\n return copyObject(e)\n }\n return clone(e, stack)\n })\n }\n\n if (isArray(val)) {\n return copyArray(val)\n }\n\n if (isObject(val)) {\n return copyObject(val)\n }\n\n return val\n}\n\nexport const copies = (source, dest, matched = false, excepts = []) => {\n for (const k in source) {\n if (excepts.length > 0 && excepts.includes(k)) {\n continue // eslint-disable-line no-continue\n }\n if (!matched || (matched && hasProperty(dest, k))) {\n const oa = source[k]\n const ob = dest[k]\n if ((isObject(ob) && isObject(oa)) || (isArray(ob) && isArray(oa))) {\n dest[k] = copies(oa, dest[k], matched, excepts)\n } else {\n dest[k] = clone(oa)\n }\n }\n }\n return dest\n}\n\nexport const unique = (arr = []) => {\n return [...new Set(arr)]\n}\n\nconst fnSort = (a, b) => {\n return a > b ? 1 : (a < b ? -1 : 0)\n}\n\nexport const sort = (arr = [], sorting = null) => {\n const tmp = [...arr]\n const fn = sorting || fnSort\n tmp.sort(fn)\n return tmp\n}\n\nexport const sortBy = (arr = [], order = 1, key = '') => {\n if (!isString(key) || !hasProperty(arr[0], key)) {\n return arr\n }\n return sort(arr, (m, n) => {\n return m[key] > n[key] ? order : (m[key] < n[key] ? (-1 * order) : 0)\n })\n}\n\nexport const shuffle = (arr = []) => {\n const input = [...arr]\n const output = []\n let inputLen = input.length\n while (inputLen > 0) {\n const index = Math.floor(Math.random() * inputLen)\n output.push(input.splice(index, 1)[0])\n inputLen--\n }\n return output\n}\n\nexport const pick = (arr = [], count = 1) => {\n const a = shuffle(arr)\n const mc = Math.max(1, count)\n const c = Math.min(mc, a.length - 1)\n return a.splice(0, c)\n}\n\nexport * from './utils/detection.js'\nexport * from './utils/string.js'\nexport * from './utils/random.js'\nexport * from './utils/date.js'\n\nexport * from './utils/curry.js'\nexport * from './utils/compose.js'\nexport * from './utils/pipe.js'\nexport * from './utils/maybe.js'\n", "// utils / detection\n\nconst ob2Str = (val) => {\n return {}.toString.call(val)\n}\n\nexport const isInteger = (val) => {\n return Number.isInteger(val)\n}\n\nexport const isArray = (val) => {\n return Array.isArray(val)\n}\n\nexport const isString = (val) => {\n return String(val) === val\n}\n\nexport const isNumber = (val) => {\n return Number(val) === val\n}\n\nexport const isBoolean = (val) => {\n return Boolean(val) === val\n}\n\nexport const isNull = (val) => {\n return ob2Str(val) === '[object Null]'\n}\n\nexport const isUndefined = (val) => {\n return ob2Str(val) === '[object Undefined]'\n}\n\nexport const isNil = (val) => {\n return isUndefined(val) || isNull(val)\n}\n\nexport const isFunction = (val) => {\n return ob2Str(val) === '[object Function]'\n}\n\nexport const isObject = (val) => {\n return ob2Str(val) === '[object Object]' && !isArray(val)\n}\n\nexport const isDate = (val) => {\n return val instanceof Date && !isNaN(val.valueOf())\n}\n\nexport const isElement = (v) => {\n return ob2Str(v).match(/^\\[object HTML\\w*Element]$/) !== null\n}\n\nexport const isLetter = (val) => {\n const re = /^[a-z]+$/i\n return isString(val) && re.test(val)\n}\n\nexport const isEmail = (val) => {\n const re = /^([\\w-]+(?:\\.[\\w-]+)*)@((?:[\\w-]+\\.)*\\w[\\w-]{0,66})\\.([a-z]{2,6}(?:\\.[a-z]{2})?)$/i\n return isString(val) && re.test(val)\n}\n\nexport const isEmpty = (val) => {\n return !val || isNil(val) ||\n (isString(val) && val === '') ||\n (isArray(val) && val.length === 0) ||\n (isObject(val) && Object.keys(val).length === 0)\n}\n\nexport const hasProperty = (ob, k) => {\n if (!ob || !k) {\n return false\n }\n return Object.prototype.hasOwnProperty.call(ob, k)\n}\n", "// utils / string\n\nimport {\n isArray,\n isString,\n isNumber,\n hasProperty\n} from './detection.js'\n\nconst toString = (input) => {\n const s = isNumber(input) ? String(input) : input\n if (!isString(s)) {\n throw new Error('InvalidInput: String required.')\n }\n return s\n}\n\nexport const truncate = (s, len = 140) => {\n const txt = toString(s)\n const txtlen = txt.length\n if (txtlen <= len) {\n return txt\n }\n const subtxt = txt.substring(0, len).trim()\n const subtxtArr = subtxt.split(' ')\n const subtxtLen = subtxtArr.length\n if (subtxtLen > 1) {\n subtxtArr.pop()\n return subtxtArr.map(word => word.trim()).join(' ') + '...'\n }\n return subtxt.substring(0, len - 3) + '...'\n}\n\nexport const stripTags = (s) => {\n return toString(s).replace(/(<([^>]+)>)/ig, '').trim()\n}\n\nexport const escapeHTML = (s) => {\n return toString(s)\n .replace(/&/g, '&')\n .replace(//g, '>')\n .replace(/\"/g, '"')\n}\n\nexport const unescapeHTML = (s) => {\n return toString(s)\n .replace(/"/g, '\"')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/&/g, '&')\n}\n\nexport const ucfirst = (s) => {\n const x = toString(s).toLowerCase()\n return x.length > 1 ? x.charAt(0).toUpperCase() + x.slice(1) : x.toUpperCase()\n}\n\nexport const ucwords = (s) => {\n return toString(s).split(' ').map((w) => {\n return ucfirst(w)\n }).join(' ')\n}\n\nexport const replaceAll = (s, alpha, beta) => {\n let x = toString(s)\n const a = isNumber(alpha) ? String(alpha) : alpha\n const b = isNumber(beta) ? String(beta) : beta\n\n if (isString(a) && isString(b)) {\n const aa = x.split(a)\n x = aa.join(b)\n } else if (isArray(a) && isString(b)) {\n a.forEach((v) => {\n x = replaceAll(x, v, b)\n })\n } else if (isArray(a) && isArray(b) && a.length === b.length) {\n const k = a.length\n if (k > 0) {\n for (let i = 0; i < k; i++) {\n const aaa = a[i]\n const bb = b[i]\n x = replaceAll(x, aaa, bb)\n }\n }\n }\n return x\n}\n\nconst getCharMap = () => {\n const lmap = {\n a: 'á|à|ả|ã|ạ|ă|ắ|ặ|ằ|ẳ|ẵ|â|ấ|ầ|ẩ|ẫ|ậ|ä|æ',\n c: 'ç',\n d: 'đ|ð',\n e: 'é|è|ẻ|ẽ|ẹ|ê|ế|ề|ể|ễ|ệ|ë',\n i: 'í|ì|ỉ|ĩ|ị|ï|î',\n n: 'ñ',\n o: 'ó|ò|ỏ|õ|ọ|ô|ố|ồ|ổ|ỗ|ộ|ơ|ớ|ờ|ở|ỡ|ợ|ö|ø',\n s: 'ß',\n u: 'ú|ù|ủ|ũ|ụ|ư|ứ|ừ|ử|ữ|ự|û',\n y: 'ý|ỳ|ỷ|ỹ|ỵ|ÿ'\n }\n\n const map = {\n ...lmap\n }\n Object.keys(lmap).forEach((k) => {\n const K = k.toUpperCase()\n map[K] = lmap[k].toUpperCase()\n })\n\n return map\n}\n\nexport const stripAccent = (s) => {\n let x = toString(s)\n\n const updateS = (ai, key) => {\n x = replaceAll(x, ai, key)\n }\n\n const map = getCharMap()\n for (const key in map) {\n if (hasProperty(map, key)) {\n const a = map[key].split('|')\n a.forEach((item) => {\n return updateS(item, key)\n })\n }\n }\n return x\n}\n\nexport const slugify = (s, delimiter = '-') => {\n return stripAccent(s)\n .trim()\n .toLowerCase()\n .replace(/\\W+/g, ' ')\n .replace(/\\s+/g, ' ')\n .replace(/\\s/g, delimiter)\n}\n", "// utils / random\n\nexport const randint = (min = 0, max = 1e6) => {\n return Math.floor(Math.random() * (max - min + 1)) + min\n}\n\nexport const genid = (len = 32, prefix = '') => {\n let s = prefix\n for (let i = 0; i < len; i++) {\n const r = Math.random()\n const k = Math.floor(r * 36)\n const c = k.toString(36)\n s += (k > 9 && r > 0.3 && r < 0.7) ? c.toUpperCase() : c\n }\n return s.substring(0, len)\n}\n", "// utils / date\n\nimport {\n isObject\n} from './detection.js'\n\nconst getDateFormat = () => {\n return {\n dateStyle: 'medium',\n timeStyle: 'long'\n }\n}\n\nconst getTimeConvers = () => {\n return {\n second: 1000,\n minute: 60,\n hour: 60,\n day: 24,\n week: 7,\n month: 4,\n year: 12\n }\n}\n\nconst isValidLocal = (hl) => {\n try {\n const locale = new Intl.Locale(hl)\n return locale.language !== ''\n } catch (err) {\n return false\n }\n}\n\nexport const formatDateString = (...args) => {\n const input = args[0]\n const lang = isValidLocal(args[1]) ? args[1] : 'en'\n const dfmt = getDateFormat()\n const opt = args.length >= 3\n ? args[2]\n : args.length === 1\n ? dfmt\n : isObject(args[1])\n ? args[1]\n : dfmt\n const dtf = new Intl.DateTimeFormat(lang, opt)\n return dtf.format(new Date(input))\n}\n\nexport const formatTimeAgo = (input, lang = 'en', justnow = 'just now') => {\n const t = new Date(input)\n let delta = Date.now() - t\n const tcv = getTimeConvers()\n if (delta <= tcv.second) {\n return justnow\n }\n let unit = 'second'\n for (const key in tcv) {\n if (delta < tcv[key]) {\n break\n } else {\n unit = key\n delta /= tcv[key]\n }\n }\n delta = Math.floor(delta)\n const rel = new Intl.RelativeTimeFormat(lang)\n return rel.format(-delta, unit)\n}\n", "// utils / curry\n\nexport const curry = (fn) => {\n const totalArguments = fn.length\n const next = (argumentLength, rest) => {\n if (argumentLength > 0) {\n return (...args) => {\n return next(argumentLength - args.length, [...rest, ...args])\n }\n }\n return fn(...rest)\n }\n return next(totalArguments, [])\n}\n", "// utils / compose\n\nexport const compose = (...fns) => {\n return fns.reduce((f, g) => (x) => f(g(x)))\n}\n", "// utils / pipe\n\nexport const pipe = (...fns) => {\n return fns.reduce((f, g) => (x) => g(f(x)))\n}\n", "// utils / defineProp\n\nexport const defineProp = (ob, key, val, config = {}) => {\n const {\n writable = false,\n configurable = false,\n enumerable = false\n } = config\n Object.defineProperty(ob, key, {\n value: val,\n writable,\n configurable,\n enumerable\n })\n}\n", "// utils / maybe\n\nimport {\n defineProp\n} from './defineProp.js'\n\nexport const maybe = (val) => {\n const __val = val\n const isNil = () => {\n return __val === null || __val === undefined\n }\n const value = () => {\n return __val\n }\n const getElse = (fn) => {\n return maybe(__val || fn())\n }\n const filter = (fn) => {\n return maybe(fn(__val) === true ? __val : null)\n }\n const map = (fn) => {\n return maybe(isNil() ? null : fn(__val))\n }\n const output = Object.create({})\n defineProp(output, '__value__', __val, { enumerable: true })\n defineProp(output, '__type__', 'Maybe', { enumerable: true })\n defineProp(output, 'isNil', isNil)\n defineProp(output, 'value', value)\n defineProp(output, 'map', map)\n defineProp(output, 'if', filter)\n defineProp(output, 'else', getElse)\n return output\n}\n"], + "mappings": "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", + "names": ["main_exports", "__export", "clone", "compose", "copies", "curry", "escapeHTML", "formatDateString", "formatTimeAgo", "genid", "hasProperty", "isArray", "isBoolean", "isDate", "isElement", "isEmail", "isEmpty", "isFunction", "isInteger", "isLetter", "isNil", "isNull", "isNumber", "isObject", "isString", "isUndefined", "maybe", "pick", "pipe", "randint", "replaceAll", "shuffle", "slugify", "sort", "sortBy", "stripAccent", "stripTags", "truncate", "ucfirst", "ucwords", "unescapeHTML", "unique", "__toCommonJS", "ob2Str", "val", "isInteger", "isArray", "isString", "isNumber", "isBoolean", "isNull", "isUndefined", "isNil", "isFunction", "isObject", "isDate", "isElement", "v", "isLetter", "re", "isEmail", "isEmpty", "hasProperty", "ob", "k", "toString", "input", "s", "isNumber", "isString", "truncate", "len", "txt", "subtxt", "subtxtArr", "word", "stripTags", "escapeHTML", "unescapeHTML", "ucfirst", "x", "ucwords", "w", "replaceAll", "alpha", "beta", "a", "b", "isArray", "v", "k", "aaa", "bb", "getCharMap", "lmap", "map", "K", "stripAccent", "updateS", "ai", "key", "hasProperty", "item", "slugify", "delimiter", "randint", "min", "max", "genid", "len", "prefix", "s", "i", "r", "k", "getDateFormat", "getTimeConvers", "isValidLocal", "hl", "formatDateString", "args", "input", "lang", "dfmt", "opt", "isObject", "formatTimeAgo", "justnow", "t", "delta", "tcv", "unit", "key", "curry", "fn", "totalArguments", "next", "argumentLength", "rest", "args", "compose", "fns", "f", "g", "x", "pipe", "fns", "f", "g", "x", "defineProp", "ob", "key", "val", "config", "writable", "configurable", "enumerable", "maybe", "val", "__val", "isNil", "value", "getElse", "fn", "filter", "map", "output", "defineProp", "clone", "val", "history", "stack", "isDate", "copyObject", "o", "oo", "k", "hasProperty", "copyArray", "a", "e", "isArray", "isObject", "copies", "source", "dest", "matched", "excepts", "oa", "ob", "unique", "arr", "fnSort", "b", "sort", "sorting", "tmp", "fn", "sortBy", "order", "key", "isString", "m", "shuffle", "input", "output", "inputLen", "index", "pick", "count", "mc", "c"] } diff --git a/package.json b/package.json index 835e6d3..690a42c 100755 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "version": "11.1.0", + "version": "11.1.1", "name": "bellajs", "description": "A useful helper for any javascript program", "homepage": "https://www.npmjs.com/package/bellajs", @@ -13,16 +13,9 @@ "import": "./src/main.js", "require": "./dist/bella.js" }, - "imports": { - "node:crypto": "./src/browser/crypto.js" - }, - "browser": { - "node:crypto": "./src/browser/crypto.js", - "node:util": "./src/browser/txtutil.js" - }, "type": "module", "engines": { - "node": ">= 15" + "node": ">= 14" }, "scripts": { "lint": "standard .", diff --git a/src/main.js b/src/main.js index 0f28a33..7b7f7bb 100755 --- a/src/main.js +++ b/src/main.js @@ -120,7 +120,6 @@ export const pick = (arr = [], count = 1) => { export * from './utils/detection.js' export * from './utils/string.js' export * from './utils/random.js' -export * from './utils/crypto.js' export * from './utils/date.js' export * from './utils/curry.js' diff --git a/src/utils/crypto.js b/src/utils/crypto.js deleted file mode 100644 index cb1ecf8..0000000 --- a/src/utils/crypto.js +++ /dev/null @@ -1,20 +0,0 @@ -// utils / cryptography - -import { TextEncoder, crypto } from './random.js' - -const sha = async (message, algorithm) => { - const enc = new TextEncoder().encode(message) - const buff = await crypto.subtle.digest(algorithm, enc) - const hex = [...new Uint8Array(buff)].map(b => b.toString(16).padStart(2, '0')).join('') - return hex -} - -export const sha256 = async (txt = '') => { - const hash = await sha(txt, 'SHA-256') - return hash -} - -export const sha512 = async (txt = '') => { - const hash = await sha(txt, 'SHA-512') - return hash -} diff --git a/src/utils/crypto.test.js b/src/utils/crypto.test.js deleted file mode 100644 index 91df435..0000000 --- a/src/utils/crypto.test.js +++ /dev/null @@ -1,48 +0,0 @@ -// crypto.test - -/* eslint-env jest */ - -import { - sha256, - sha512 -} from './crypto.js' - -describe('test .sha256() method:', () => { - const inputs = [ - { - text: 'my password', - expectation: 'bb14292d91c6d0920a5536bb41f3a50f66351b7b9d94c804dfce8a96ca1051f2' - }, - { - text: 'very-"secret"-&-`long`-passphrase!!', - expectation: '53456e0a34c7c70eb360db8e59ce45ef626546f3c0975236a988cea39bf10b29' - } - ] - - inputs.forEach(({ text, expectation }, k) => { - test(` check .sha256(${text})`, async () => { - const actual = await sha256(text) - expect(actual).toEqual(expectation) - }) - }) -}) - -describe('test .sha512() method:', () => { - const inputs = [ - { - text: 'my password', - expectation: 'e28bdbf8faa97dab2203fcc89e397a4bf8d4a5b370421e5481a55f317caee4f81be5a810bb1cffc4695c32198717b9a6e835895852ee3a8689d0963463f2db15' - }, - { - text: 'very-"secret"-&-`long`-passphrase!!', - expectation: 'be986f865ce339905cd57fb87aa4a56ca88a5e6021805a5a15b6426d1248c9e1135536c01ffa7f7300f453c551804e9682c5f1eaae8c1c5514812b7c68e028c7' - } - ] - - inputs.forEach(({ text, expectation }, k) => { - test(` check .sha512(${text})`, async () => { - const actual = await sha512(text) - expect(actual).toEqual(expectation) - }) - }) -}) diff --git a/src/utils/random.js b/src/utils/random.js index fad868b..31d8568 100755 --- a/src/utils/random.js +++ b/src/utils/random.js @@ -1,17 +1,10 @@ // utils / random -import ncrypto from 'node:crypto' -export { TextEncoder } from 'node:util' - -export const crypto = ncrypto.webcrypto ? ncrypto.webcrypto : ncrypto export const randint = (min = 0, max = 1e6) => { - const byteArray = new Uint8Array(1) - crypto.getRandomValues(byteArray) - const floatNum = '0.' + byteArray[0].toString() - return Math.floor(floatNum * (max - min + 1)) + min + return Math.floor(Math.random() * (max - min + 1)) + min } -const mathGen = (len = 32, prefix = '') => { +export const genid = (len = 32, prefix = '') => { let s = prefix for (let i = 0; i < len; i++) { const r = Math.random() @@ -21,19 +14,3 @@ const mathGen = (len = 32, prefix = '') => { } return s.substring(0, len) } - -const cryptoGen = (len = 32, prefix = '') => { - let s = prefix - const nums = crypto.getRandomValues(new Uint16Array(len)) - for (let i = 0; i < nums.length; i++) { - const n = nums[i].toString(36) - const r = Math.random() - const c = n.charAt(Math.floor(r * n.length)) - s += (r > 0.3 && r < 0.7) ? c.toUpperCase() : c - } - return s.substring(0, len) -} - -export const genid = (len = 32, prefix = '') => { - return len <= 128 ? cryptoGen(len, prefix) : `${cryptoGen(99, prefix)}${mathGen(len - 99)}` -}