@resk/core
Version:
An innovative TypeScript framework that empowers developers to build applications with a fully decorator-based architecture for efficient resource management. By combining the power of decorators with a resource-oriented design, DecorRes enhances code cla
1 lines • 11.2 kB
JavaScript
;Object.defineProperty(exports,'__esModule',{value:true});var dateHelper=require('../utils/date/dateHelper'),d=require('../utils/defaultStr'),h=require('../utils/isNonNullString'),st=require('../utils/isRegex'),nt=require('moment');require('../utils/numbers');var z=require('google-libphonenumber'),index=require('../countries/index'),ot=require('../utils/isEmpty'),ut=require('../logger'),lt=require('../utils/isPrimitive'),ct=require('../utils/stringify'),isNullable=require('../utils/isNullable'),isNumber=require('../utils/isNumber'),types=require('./types');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var d__default=/*#__PURE__*/_interopDefault(d);var h__default=/*#__PURE__*/_interopDefault(h);var st__default=/*#__PURE__*/_interopDefault(st);var nt__default=/*#__PURE__*/_interopDefault(nt);var z__default=/*#__PURE__*/_interopDefault(z);var ot__default=/*#__PURE__*/_interopDefault(ot);var ut__default=/*#__PURE__*/_interopDefault(ut);var lt__default=/*#__PURE__*/_interopDefault(lt);var ct__default=/*#__PURE__*/_interopDefault(ct);var et=Object.defineProperty,rt=Object.defineProperties;var at=Object.getOwnPropertyDescriptors;var V=Object.getOwnPropertySymbols;var G=Object.prototype.hasOwnProperty,K=Object.prototype.propertyIsEnumerable;var j=(a,t,e)=>t in a?et(a,t,{enumerable:true,configurable:true,writable:true,value:e}):a[t]=e,O=(a,t)=>{for(var e in t||(t={}))G.call(t,e)&&j(a,e,t[e]);if(V)for(var e of V(t))K.call(t,e)&&j(a,e,t[e]);return a},W=(a,t)=>rt(a,at(t));var Z=(a,t)=>{var e={};for(var r in a)G.call(a,r)&&t.indexOf(r)<0&&(e[r]=a[r]);if(a!=null&&V)for(var r of V(a))t.indexOf(r)<0&&K.call(a,r)&&(e[r]=a[r]);return e};const T=z__default.default.PhoneNumberUtil.getInstance(),it=z__default.default.AsYouTypeFormatter;const o=/\d/,X=/[a-zA-Z]/;const i=class i{static formatValue(M){var p=M,{value:t,type:e,format:r,dateFormat:s,phoneCountryCode:n,abreviateNumber:l}=p,f=Z(p,["value","type","format","dateFormat","phoneCountryCode","abreviateNumber"]);const k=e&&["decimal","numeric","number"].includes(String(e).toLowerCase());let u=t;const y={};t=isNullable.isNullable(t)?"":t,t||(u=k?0:String(t)),k&&(u=i.parseDecimal(t));let m=lt__default.default(t)?String(t):dateHelper.DateHelper.isDateObj(t)?t:ct__default.default(t,{escapeString:false});if(typeof r=="function")m=r(W(O({},f),{dateFormat:s,phoneCountryCode:n,type:e,value:t}));else {const g=String(e).toLowerCase();let A=false;if(s||["time","date","datetime"].includes(g)){s=d__default.default(s,g==="time"?dateHelper.DateHelper.DEFAULT_TIME_FORMAT:g==="date"?dateHelper.DateHelper.DEFAULT_DATE_FORMAT:dateHelper.DateHelper.DEFAULT_DATE_TIME_FORMAT);const c=dateHelper.DateHelper.parseDate(t);c&&(A=true,m=dateHelper.DateHelper.formatDate(c,s),y.dateValue=c),y.dateFormat=s;}else if(g==="tel"){const c=i.formatPhoneNumber(t,n);m=d__default.default(c,m),y.phoneCountryCode=d__default.default(n);const I=i.parsePhoneNumber(c,n);I?(y.dialCode=I.getCountryCode()+"",y.phoneCountryCode=d__default.default(T.getRegionCodeForNumber(I),n)):n&&(y.dialCode=i.getCountryDialCode(n)),y.phoneNumber=i.prefixPhoneNumberWithDialCode(m,y.dialCode).replace(/\s/g,"");}if(!A){if(isNumber.isNumber(u)){const c=`abreviate2${d__default.default(r,"FormatNumber").trim().upperFirst()}`;l&&typeof Number.prototype[c]=="function"?m=u[c]():h__default.default(r)&&typeof Number.prototype[r]=="function"?m=u[r]():m=u.formatNumber();}}}return O({formattedValue:m,isDecimalType:k,value:t,format:r,parsedValue:u,decimalValue:typeof u=="number"?u:0},y)}static getCountryDialCode(t){var r;const e=d__default.default((r=index.CountriesManager.getCountry(t))==null?void 0:r.dialCode);if(e)return e;try{const s=T.getCountryCodeForRegion(t);if(s!==0)return s.toString()}catch(s){}return ""}static formatValueAsString(t){const{formattedValue:e,parsedValue:r}=i.formatValue(t);return e}static isValidMask(t){return Array.isArray(t)||typeof t=="function"}static normalizeNumber(t,e="."){return typeof t=="number"?t.toString():!t||t==null||t==null?"0":String(t).trim().replace(/\s/g,"").replace(/[,٫·]/g,e)}static formatWithMask(t){t=Object.assign({},t);const{value:e,maskAutoComplete:r,placeholderCharacter:s,mask:n,validate:l,obfuscationCharacter:f}=t,M=ot__default.default(e)||e===void 0?"":["number","boolean","string"].includes(typeof e)?e.toString():e===null?"":(e==null?void 0:e.toString())||String(e),p=d__default.default(M),k=typeof n=="function"?n(W(O({},t),{value:p})):n,u=Array.isArray(k)?k:[],y=d__default.default(s,"_").charAt(0);let m="";u.map(R=>{m+=String(h__default.default(R)?R:Array.isArray(R)&&h__default.default(R[1])?R[1]:y).charAt(0);});let g=m,A=true;const c=R=>typeof l=="function"?l(R):true;if(!u.length||!p)return {maskHasObfuscation:false,maskedPlaceholder:g,masked:p,unmasked:p,obfuscated:p,maskArray:u,placeholder:m,isValid:A&&c(p),nonRegexReplacedChars:[]};let I="",P="",S="",b=0,N=0,Q=false;const v=m.length,Y=[];for(;b<u.length&&!(N>=p.length);){const R=u[b],x=p[N],D=[];let{isValid:U,masked:L,obfuscated:tt,isMaskRegex:w}=q({maskChar:R,nonRegexReplacedChars:D,valueChar:x,obfuscationCharacter:f,valueCharIndex:N,maskCharIndex:b});I+=L,P+=tt,S+=x,w&&v>N&&(g=g.substring(0,b)+L+g.substring(N+1)),b+=1,N+=1;let _=false;if(r&&!w&&b<u.length&&N<u.length&&N==p.length&&x!==L){const C=q({maskChar:u[b],nonRegexReplacedChars:[],valueChar:x,obfuscationCharacter:f,valueCharIndex:N,maskCharIndex:b});C.isMaskRegex&&C.isValid&&C.masked==x&&(I+=x,P+=C.obfuscated,b+=1,N+=1,U=true,delete D[0],_=true);}if(D[0]&&Y.push(...D),U||(A=false),_)break}return {masked:I,nonRegexReplacedChars:Y,isValid:A&&c(p),maskHasObfuscation:Q,placeholder:m,maskedPlaceholder:g,unmasked:S,obfuscated:P,maskArray:u}}static createDateMask(t){t=d__default.default(t);const e=i.MOMENT_MASKS_MAP,r=i.MOMENT_SEPARATOR_MAP;let s=[],n="",l=0;for(;l<t.length;){if(r[t[l]]){n&&(s.push(...e[n]||[]),n=""),s.push(r[t[l]]),l++;continue}if(n+=t[l],e[n]){s.push(...e[n]),n="",l++;continue}Object.keys(e).some(f=>n&&f.startsWith(n))||n&&(s.push(...n.split("")),n=""),l++;}return n&&e[n]&&s.push(...e[n]),{mask:s,validate:f=>{if(!t||!h__default.default(f))return false;try{const M=nt__default.default(f,t,!0);return M.isValid()&&M.format(t)===f}catch(M){}return false}}}static createPhoneNumberMask(t,e){const r=index.CountriesManager.getPhoneNumberExample(t);if(h__default.default(r)){const s=i.createPhoneNumberMaskFromExample(r,t);if(s.mask.length)return s}if(!h__default.default(t))return {mask:[],validate:s=>false};try{const s=i.getPhoneNumberExample(t);if(!s)return {mask:[],validate:M=>!1};const n=e||z.PhoneNumberFormat.INTERNATIONAL,l=T.format(s,n),f=s.getCountryCode()+"";return {dialCode:f,mask:$(l,f),validate:M=>i.isValidPhoneNumber(M,t),countryCode:t}}catch(s){return {mask:[],validate:n=>false}}}static getPhoneNumberExample(t){if(!h__default.default(t))return null;const e=index.CountriesManager.getPhoneNumberExample(t);if(h__default.default(e))return i.parsePhoneNumber(e);try{return T.getExampleNumber(t)}catch(r){return null}}static createPhoneNumberMaskFromExample(t,e,r){const s=J(i.parsePhoneNumber(t,e),r);return s.mask.length>0?s:h__default.default(e)?J(i.getPhoneNumberExample(e),r):{mask:[],validate:n=>false}}static parsePhoneNumber(t,e){t=d__default.default(t);try{return T.parse(t,d__default.default(e).toLowerCase())}catch(r){return null}}static prefixPhoneNumberWithDialCode(t,e){return typeof t!="string"?"":h__default.default(e)?(e="+"+e.ltrim("+"),!t.startsWith(e)&&!t.trim().startsWith("+")?e.trim()+" "+t.ltrim(" "):t):t}static isValidPhoneNumber(t,e){const r=this.parsePhoneNumber(t,e);return r?T.isValidNumber(r):false}static formatPhoneNumber(t,e){t=d__default.default(t);try{const r=new it(d__default.default(e).toLowerCase().trim());r.clear();let s="";return t.replace(/-/g,"").replace(/ /g,"").replace(/\(/g,"").replace(/\)/g,"").split("").forEach(n=>{s=r.inputDigit(n);}),s||null}catch(r){return ut__default.default.log(r," input formatter formatting phone number phoneNumber =",t,", countryCode=",e),null}}static cleanPhoneNumber(t){return h__default.default(t)?t.trim().replace(/\s/g,""):""}static extractDialCodeFromPhoneNumber(t,e){try{const r=i.parsePhoneNumber(t,e);if(r)return r.getCountryCode()+""}catch(r){}return ""}static isNumericString(t){return h__default.default(t)&&!Number.isNaN(parseFloat(t))&&Number.isFinite(Number(t))}static extractNumbersFromString(t){return h__default.default(t)?t.replace(/\D/g,""):""}};i.parseDecimal=t=>{if(typeof t=="number")return t;if(t==null||t==null||!t||typeof t!="string")return 0;const e=parseFloat(i.normalizeNumber(t));return typeof e=="number"&&!Number.isNaN(e)?e:0},i.endsWithDecimalSeparator=t=>{const e=String(t).trim().replace(/\s/g,"");return e.endsWith(".")||e.endsWith(",")||e.endsWith("\u066B")},i.MOMENT_MASKS_MAP={YYYY:Array(4).fill([o,"Y"]),YY:Array(2).fill([o,"Y"]),MM:Array(2).fill([o,"M"]),M:[[o,"M"]],MMMM:Array(9).fill([X,"M"]),MMM:Array(3).fill([X,"M"]),DD:Array(2).fill([o,"D"]),D:[[o,"D"]],HH:Array(2).fill([o,"H"]),H:[[o,"H"]],hh:Array(2).fill([o,"h"]),h:[[o,"h"]],mm:Array(2).fill([o,"m"]),m:[[o,"m"]],ss:Array(2).fill([o,"s"]),s:[[o,"s"]],SSS:Array(3).fill([o,"S"]),Z:[/[+-]/,o,o,o,o],ZZ:[/[+-]/,o,o,o,o],A:["A","M"],a:["a","m"]},i.MOMENT_SEPARATOR_MAP={"/":"/","-":"-",".":"."," ":" ",":":":",T:"T"},i.SINGLE_SPACE_MASK=" ",i.MASKS_WITH_VALIDATIONS={get DATE(){return i.createDateMask(dateHelper.DateHelper.DEFAULT_DATE_FORMAT)},get TIME(){return i.createDateMask(dateHelper.DateHelper.DEFAULT_TIME_FORMAT)},get DATE_TIME(){return i.createDateMask(dateHelper.DateHelper.DEFAULT_DATE_TIME_FORMAT)},CREDIT_CARD:{mask:[/\d/,/\d/,/\d/,/\d/," ",[/\d/],[/\d/],[/\d/],[/\d/]," ",[/\d/],[/\d/],[/\d/],[/\d/]," ",/\d/,/\d/,/\d/,/\d/],validate:t=>true}};let F=i;const $=(a,t)=>{t=d__default.default(t),t&&(t="+"+t.ltrim("+")),F.cleanPhoneNumber(a).startsWith(t);const r=[...t?a.substring(t.length):a].map(s=>/\d/.test(s)?/\d/:s);return t?[...t,...r]:r};function q({maskChar:a,valueChar:t,nonRegexReplacedChars:e,obfuscationCharacter:r,valueCharIndex:s,maskCharIndex:n}){let l=false,f=true,M="",p="",k=a,u=false;if(typeof a=="object"){const y=d__default.default(Array.isArray(a)?a[2]:void 0,r).charAt(0),m=Array.isArray(a)&&a[2]!==false&&y;m&&(l=true);const g=Array.isArray(a)?a[0]:a,A=String(g);k=g;try{const c=st__default.default(g);u=c;const I=c&&RegExp(g).test(t),P=!c&&A===t,S=I||P,b=c?t:A;S||(f=!1),(I||!c)&&(M=b,p=m?y:b,!c&&!P&&e.push({index:s,maskIndex:n,from:t,to:A,valueChar:t,maskChar:a}));}catch(c){}}else h__default.default(a)?(M=a,p=a,a!==t&&(f=false,e.push({index:s,maskIndex:n,from:t,to:a,valueChar:t,maskChar:a}))):f=false;return {maskHasObfuscation:l,isMaskRegex:u,mask:k,isValid:f,masked:M,obfuscated:p,nonRegexReplacedChars:e}}function J(a,t){try{if(a){const e=t||z.PhoneNumberFormat.INTERNATIONAL,r=T.format(a,e);if(h__default.default(r)){const s=T.getRegionCodeForNumber(a),n=a.getCountryCode()+"";return {dialCode:n,mask:$(r,n),validate:l=>F.isValidPhoneNumber(l,s),countryCode:s}}}}catch(e){}return {mask:[],validate:()=>false}}exports.default=F;Object.keys(types).forEach(function(k){if(k!=='default'&&!Object.prototype.hasOwnProperty.call(exports,k))Object.defineProperty(exports,k,{enumerable:true,get:function(){return types[k]}})});