@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 • 6.06 kB
JavaScript
;var index=require('../utils/index'),T=require('../i18n'),decorators=require('../decorators');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var T__default=/*#__PURE__*/_interopDefault(T);var L=Object.defineProperty,U=Object.defineProperties;var Y=Object.getOwnPropertyDescriptors;var F=Object.getOwnPropertySymbols;var x=Object.prototype.hasOwnProperty,k=Object.prototype.propertyIsEnumerable;var w=(i,e,a)=>e in i?L(i,e,{enumerable:true,configurable:true,writable:true,value:a}):i[e]=a,p=(i,e)=>{for(var a in e||(e={}))x.call(e,a)&&w(i,a,e[a]);if(F)for(var a of F(e))k.call(e,a)&&w(i,a,e[a]);return i},f=(i,e)=>U(i,Y(e));var C=(i,e)=>{var a={};for(var t in i)x.call(i,t)&&e.indexOf(t)<0&&(a[t]=i[t]);if(i!=null&&F)for(var t of F(i))e.indexOf(t)<0&&k.call(i,t)&&(a[t]=i[t]);return a};var z=(i,e,a)=>new Promise((t,y)=>{var o=u=>{try{n(a.next(u));}catch(d){y(d);}},l=u=>{try{n(a.throw(u));}catch(d){y(d);}},n=u=>u.done?t(u.value):Promise.resolve(u.value).then(o,l);n((a=a.apply(i,e)).next());});const K=Symbol("validatorIsMetaData"),B=Symbol("validatorValidateTargetOptions"),c=class c{static registerRule(e,a){const t=c.getRules();typeof a=="function"&&(t[e]=a),Reflect.defineMetadata(c.RULES_METADATA_KEY,t,c);}static getRules(){const e=Reflect.getMetadata(c.RULES_METADATA_KEY,c);return index.isObj(e)?e:{}}static get separators(){const e=Object.assign({},T__default.default.getNestedTranslation("validator.separators"));return {multiple:index.defaultStr(e.multiple,", "),single:index.defaultStr(e.single,", ")}}static getRule(e){return index.isNonNullString(e)?c.getRules()[e]:void 0}static sanitizeRules(e){const a=[],t=this.getRules(),y=[];return (Array.isArray(e)?e:[]).map(o=>{if(typeof o=="function")a.push(o);else if(index.isNonNullString(o)){let l=String(o).trim();const n=[];if(l.indexOf("[")>-1){const u=l.rtrim("]").split("[");l=u[0].trim();const d=String(u[1]).split(",");for(let I in d)n.push(d[I].replace("]","").trim());}typeof t[l]=="function"?a.push({ruleName:l,params:n,ruleFunction:t[l],rawRuleName:String(o)}):y.push(o);}else if(index.isObj(o)&&typeof o=="object"){const l=o;for(let n in l)if(Object.hasOwnProperty.call(l,n)){const u=l[n],d=t[n];typeof d=="function"?a.push({ruleName:n,params:Array.isArray(u)?u:[],ruleFunction:d,rawRuleName:String(n)}):y.push(n);}}}),{sanitizedRules:a,invalidRules:y}}static validate(y){var o=y,{rules:e,value:a}=o,t=C(o,["rules","value"]);const{sanitizedRules:l,invalidRules:n}=c.sanitizeRules(e),u=c.separators;if(n.length){const I=n.map(r=>T__default.default.t("validator.invalidRule",{rule:index.isNonNullString(r)?r:"unamed rule"})).join(u.multiple);return Promise.reject(f(p({rules:e,value:a},t),{message:I}))}if(!l.length)return Promise.resolve(p({rules:e,value:a},t));t.fieldName=t.propertyName=index.defaultStr(t.fieldName,t.propertyName);const d=f(p({},t),{value:a,rules:e});return new Promise((I,r)=>{setTimeout(()=>{let R=-1;const g=l.length,A=function(){return z(this,null,function*(){if(R++,R>=g)return I(p({value:a,rules:e},t));const m=l[R];let N,v,O=[],b=typeof m=="function"?m:void 0;typeof m=="object"&&index.isObj(m)&&(b=m.ruleFunction,O=Array.isArray(m.params)?m.params:[],N=m.ruleName,v=m.rawRuleName);const D=p({value:a,status:"error",rule:m,ruleName:N,rawRuleName:v,ruleParams:O,rules:e},t),M=f(p({},d),{rule:index.defaultStr(N),ruleName:N,rawRuleName:v,ruleParams:O}),E=s=>(s=typeof s=="string"?index.isNonNullString(s)?s:T__default.default.t("validator.invalidMessage",M):s,s===false?r(f(p({},D),{message:T__default.default.t("validator.invalidMessage",M)})):index.isNonNullString(s)?r(f(p({},D),{message:s})):s instanceof Error?r(f(p({},D),{message:index.stringify(s)})):A());if(typeof b!="function")return r(f(p({},D),{message:T__default.default.t("validator.invalidRule",M)}));try{const s=yield b(f(p({},t),{ruleName:N,rawRuleName:v,rules:e,ruleParams:O,value:a}));return E(s)}catch(s){return E(typeof s=="string"?s:(s==null?void 0:s.message)||(s==null?void 0:s.toString())||index.stringify(s))}})};return A()},0);})}static validateTarget(e,a,t){const y=c.getTargetRules(e),o=c.separators;t=index.extendObj({},c.getValidateTargetOptions(e),t),a=Object.assign({},a);const l=typeof(t==null?void 0:t.errorMessageBuilder)=="function"?t.errorMessageBuilder:(r,R)=>`[${String(r)}] : ${R}`,n=[],u=[];let d=0;const I=T__default.default.translateTarget(e,{data:a});for(let r in y){const R=index.isNonNullString(I[r])?I[r]:r;u.push(c.validate({value:a[r],translatedPropertyName:R,fieldName:r,propertyName:r,rules:y[r]}).catch(g=>{const A=index.stringify(index.defaultVal(g==null?void 0:g.message,g));d++;const m=l(R,A,f(p({},Object.assign({},g)),{separators:o,data:a,propertyName:r,translatedPropertyName:R}));n.push({fieldName:r,propertyName:r,message:m});}));}return new Promise((r,R)=>Promise.all(u).then(()=>{const g=!n.length;g?r({data:a}):R({status:"error",message:T__default.default.translate("validator.failedForNFields",{count:d}),errors:n,success:g});}))}static getTargetRules(e){return decorators.getDecoratedProperties(e,K)}static getValidateTargetOptions(e){return Object.assign({},Reflect.getMetadata(B,e)||{})}static createDecorator(e){return function(a){const t=function(y){const o=Object.assign({},y);return o.ruleParams=Array.isArray(a)?a:[a],e(o)};return c.createPropertyDecorator(t)}}static createPropertyDecorator(e){return decorators.createPropertyDecorator(K,a=>[...Array.isArray(a)?a:[],...Array.isArray(e)?e:[e]])}};c.RULES_METADATA_KEY=Symbol("validationRules");let V=c;const ue=V.createPropertyDecorator("number"),ce=V.createPropertyDecorator("required"),de=V.createPropertyDecorator("email"),pe=V.createPropertyDecorator("url"),ye=V.createPropertyDecorator("fileName"),me=V.createPropertyDecorator("nonNullString");function Re(i){return function(e){Reflect.defineMetadata(B,i,e);}}exports.Validator=V;exports.ValidatorIsEmail=de;exports.ValidatorIsFileName=ye;exports.ValidatorIsNonNullString=me;exports.ValidatorIsNumber=ue;exports.ValidatorIsRequired=ce;exports.ValidatorIsUrl=pe;exports.ValidatorValidateTargetOptions=Re;