diff --git a/packages/n4s/dist/ensure.js b/packages/n4s/dist/ensure.js deleted file mode 100644 index 0445e26ae..000000000 --- a/packages/n4s/dist/ensure.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";!function(n,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(n="undefined"!=typeof globalThis?globalThis:n||self).ensure=t()}(this,(function(){function n(){return(n=Object.assign||function(n){for(var t=1;tNumber(t)}function u(n,t){return r(n)&&r(t)&&Number(n)>=Number(t)}function o(n,t){return!!(Array.isArray(t)&&-1!==["string","number","boolean"].indexOf(typeof n)||"string"==typeof t&&"string"==typeof n)&&-1!==t.indexOf(n)}function i(n){return!!Array.isArray(n)}function a(n){return!n||(r(n)?0===n:Object.prototype.hasOwnProperty.call(n,"length")?0===n.length:"object"!=typeof n||0===Object.keys(n).length)}function s(n){return Number.isNaN(n)}function f(n){return"number"==typeof n}function c(n){return"string"==typeof n}function l(n){return!!n}function g(n,t){return n.length===t}function y(n,t){return r(n)&&r(t)&&Number(n)t},longerThanOrEquals:function(n,t){return n.length>=t},matches:p,numberEquals:h,shorterThan:function(n,t){return n.lengthNumber(e)}function n(t,e){return r(t)&&r(e)&&Number(t)>=Number(e)}function i(t,e){return!!(Array.isArray(e)&&-1!==["string","number","boolean"].indexOf(typeof t)||"string"==typeof e&&"string"==typeof t)&&-1!==e.indexOf(t)}function o(t){return!!Array.isArray(t)}function a(t){return!t||(r(t)?0===t:Object.prototype.hasOwnProperty.call(t,"length")?0===t.length:"object"!=typeof t||0===Object.keys(t).length)}function s(t){return Number.isNaN(t)}function d(t){return"number"==typeof t}function l(t){return"string"==typeof t}function c(t){return!!t}function f(t,e){return t.length===e}function $(t,e){return r(t)&&r(e)&&Number(t)=u&&(void 0===e||t<=e)}function Z(t,e){y(t),(e=_(e,G)).allow_trailing_dot&&"."===t[t.length-1]&&(t=t.substring(0,t.length-1)),t=t.split(".");for(var r=0;r=t.split(".").sort((function(t,e){return t-e}))[3];if("6"===e){if(e=[t],t.includes("%")&&(2!==(e=t.split("%")).length||!e[0].includes(":")||""===e[1]))return!1;var r=!1,u=N((e=e[0].split(":"))[e.length-1],4),n=u?7:8;if(e.length>n)return!1;if("::"===t)return!0;"::"===t.substr(0,2)?(e.shift(),e.shift(),r=!0):"::"===t.substr(t.length-2)&&(e.pop(),e.pop(),r=!0);for(var i=0;it.length)&&(e=t.length);for(var r=0,u=Array(e);re},longerThanOrEquals:function(t,e){return t.length>=e},matches:g,numberEquals:h,shorterThan:function(t,e){return t.length$/i,K=/^[a-z\d!#\$%&'\*\+\-\/=\?\^_`{\|}~]+$/i,H=/^[a-z\d]+$/,k=/^([\s\x01-\x08\x0b\x0c\x0e-\x1f\x7f\x21\x23-\x5b\x5d-\x7e]|(\\[\x01-\x09\x0b\x0c\x0d-\x7f]))*$/i,Y=/^[a-z\d!#\$%&'\*\+\-\/=\?\^_`{\|}~\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+$/i,W=/^([\s\x01-\x08\x0b\x0c\x0e-\x1f\x7f\x21\x23-\x5b\x5d-\x7e\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]|(\\[\x01-\x09\x0b\x0c\x0d-\x7f\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))*$/i,J={ES:function(t){y(t);var e={X:0,Y:1,Z:2};if(t=t.trim().toUpperCase(),!/^[0-9X-Z][0-9]{7}[TRWAGMYFPDXBNJZSQVHLCKE]$/.test(t))return!1;var r=t.slice(0,-1).replace(/[X,Y,Z]/g,(function(t){return e[t]}));return t.endsWith("TRWAGMYFPDXBNJZSQVHLCKE".split("")[r%23])},IN:function(t){var e=[[0,1,2,3,4,5,6,7,8,9],[1,2,3,4,0,6,7,8,9,5],[2,3,4,0,1,7,8,9,5,6],[3,4,0,1,2,8,9,5,6,7],[4,0,1,2,3,9,5,6,7,8],[5,9,8,7,6,0,4,3,2,1],[6,5,9,8,7,1,0,4,3,2],[7,6,5,9,8,2,1,0,4,3],[8,7,6,5,9,3,2,1,0,4],[9,8,7,6,5,4,3,2,1,0]],r=[[0,1,2,3,4,5,6,7,8,9],[1,5,7,6,2,8,3,0,9,4],[5,8,0,3,7,9,6,1,4,2],[8,9,1,6,0,4,3,5,2,7],[9,4,5,3,1,2,6,8,7,0],[4,2,8,6,5,7,3,9,0,1],[2,7,9,3,8,0,6,4,1,5],[7,0,4,6,9,1,3,2,5,8]];if(t=t.trim(),!/^[1-9]\d{3}\s?\d{4}\s?\d{4}$/.test(t))return!1;var u=0;return t.replace(/\s/g,"").split("").map(Number).reverse().forEach((function(t,n){u=e[u][r[n%8][t]]})),0===u},NO:function(t){if(t=t.trim(),isNaN(Number(t))||11!==t.length||"00000000000"===t)return!1;var e=(11-(3*(t=t.split("").map(Number))[0]+7*t[1]+6*t[2]+1*t[3]+8*t[4]+9*t[5]+4*t[6]+5*t[7]+2*t[8])%11)%11,r=(11-(5*t[0]+4*t[1]+3*t[2]+2*t[3]+7*t[4]+6*t[5]+5*t[6]+4*t[7]+3*t[8]+2*e)%11)%11;return 11===e&&(e=0),e===t[9]&&r===t[10]},"he-IL":function(t){if(t=t.trim(),!/^\d{9}$/.test(t))return!1;for(var e,r=0,u=0;unew Date||u.getFullYear()!==e||u.getMonth()!==r-1||u.getDate()!==t)},o=function(t){for(var e=t.substring(0,17),n=0,i=0;17>i;i++)n+=parseInt(e.charAt(i),10)*Number.parseInt(r[i]);return u[n%11]===t.charAt(17).toUpperCase()};return function(t){if(/^\d{15}|(\d{17}(\d|x|X))$/.test(t))if(15===t.length){var e=/^[1-9]\d{7}((0[1-9])|(1[0-2]))((0[1-9])|([1-2][0-9])|(3[0-1]))\d{3}$/.test(t);e?(e=t.substring(0,6),(e=n(e))?(e="19".concat(t.substring(6,12)),t=!!(e=i(e))&&o(t)):t=!1):t=!1}else 18===t.length&&(e=/^[1-9]\d{5}[1-9]\d{3}((0[1-9])|(1[0-2]))((0[1-9])|([1-2][0-9])|(3[0-1]))\d{3}(\d|x|X)$/.test(t))?(e=t.substring(0,6),(e=n(e))?(e=t.substring(6,14),t=!!(e=i(e))&&o(t)):t=!1):t=!1;else t=!1;return t}(t)},"zh-TW":function(t){var e={A:10,B:11,C:12,D:13,E:14,F:15,G:16,H:17,I:34,J:18,K:19,L:20,M:21,N:22,O:35,P:23,Q:24,R:25,S:26,T:27,U:28,V:29,W:32,X:30,Y:31,Z:33};return t=t.trim().toUpperCase(),!!/^[A-Z][0-9]{9}$/.test(t)&&Array.from(t).reduce((function(t,r,u){return 0===u?(t=e[r])%10*9+Math.floor(t/10):9===u?0==(10-t%10-Number(r))%10:t+Number(r)*(9-u)}),0)}},X={allow_primitives:!1},V=/^[A-z]{2,4}([_-]([A-z]{4}|[\d]{3}))?([_-]([A-z]{2}|[\d]{3}))?$/,Q=/^(application|audio|font|image|message|model|multipart|text|video)\/[a-zA-Z0-9\.\-\+]{1,100}$/i,tt=/^text\/[a-zA-Z0-9\.\-\+]{1,100};\s?charset=("[a-zA-Z0-9\.\-\+\s]{0,70}"|[a-zA-Z0-9\.\-\+]{0,70})(\s?\([a-zA-Z0-9\.\-\+\s]{1,20}\))?$/i,et=/^multipart\/[a-zA-Z0-9\.\-\+]{1,100}(;\s?(boundary|charset)=("[a-zA-Z0-9\.\-\+\s]{0,70}"|[a-zA-Z0-9\.\-\+]{0,70})(\s?\([a-zA-Z0-9\.\-\+\s]{1,20}\))?){0,2}$/i,rt={"am-AM":/^(\+?374|0)((10|[9|7][0-9])\d{6}$|[2-4]\d{7}$)/,"ar-AE":/^((\+?971)|0)?5[024568]\d{7}$/,"ar-BH":/^(\+?973)?(3|6)\d{7}$/,"ar-DZ":/^(\+?213|0)(5|6|7)\d{8}$/,"ar-EG":/^((\+?20)|0)?1[0125]\d{8}$/,"ar-IQ":/^(\+?964|0)?7[0-9]\d{8}$/,"ar-JO":/^(\+?962|0)?7[789]\d{7}$/,"ar-KW":/^(\+?965)[569]\d{7}$/,"ar-LY":/^((\+?218)|0)?(9[1-6]\d{7}|[1-8]\d{7,9})$/,"ar-SA":/^(!?(\+?966)|0)?5\d{8}$/,"ar-SY":/^(!?(\+?963)|0)?9\d{8}$/,"ar-TN":/^(\+?216)?[2459]\d{7}$/,"be-BY":/^(\+?375)?(24|25|29|33|44)\d{7}$/,"bg-BG":/^(\+?359|0)?8[789]\d{7}$/,"bn-BD":/^(\+?880|0)1[13456789][0-9]{8}$/,"cs-CZ":/^(\+?420)? ?[1-9][0-9]{2} ?[0-9]{3} ?[0-9]{3}$/,"da-DK":/^(\+?45)?\s?\d{2}\s?\d{2}\s?\d{2}\s?\d{2}$/,"de-DE":/^(\+49)?0?1(5[0-25-9]\d|6([23]|0\d?)|7([0-57-9]|6\d))\d{7}$/,"de-AT":/^(\+43|0)\d{1,4}\d{3,12}$/,"de-CH":/^(\+41|0)(7[5-9])\d{1,7}$/,"el-GR":/^(\+?30|0)?(69\d{8})$/,"en-AU":/^(\+?61|0)4\d{8}$/,"en-GB":/^(\+?44|0)7\d{9}$/,"en-GG":/^(\+?44|0)1481\d{6}$/,"en-GH":/^(\+233|0)(20|50|24|54|27|57|26|56|23|28)\d{7}$/,"en-HK":/^(\+?852[-\s]?)?[456789]\d{3}[-\s]?\d{4}$/,"en-MO":/^(\+?853[-\s]?)?[6]\d{3}[-\s]?\d{4}$/,"en-IE":/^(\+?353|0)8[356789]\d{7}$/,"en-IN":/^(\+?91|0)?[6789]\d{9}$/,"en-KE":/^(\+?254|0)(7|1)\d{8}$/,"en-MT":/^(\+?356|0)?(99|79|77|21|27|22|25)[0-9]{6}$/,"en-MU":/^(\+?230|0)?\d{8}$/,"en-NG":/^(\+?234|0)?[789]\d{9}$/,"en-NZ":/^(\+?64|0)[28]\d{7,9}$/,"en-PK":/^((\+92)|(0092))-{0,1}\d{3}-{0,1}\d{7}$|^\d{11}$|^\d{4}-\d{7}$/,"en-RW":/^(\+?250|0)?[7]\d{8}$/,"en-SG":/^(\+65)?[689]\d{7}$/,"en-SL":/^(?:0|94|\+94)?(7(0|1|2|5|6|7|8)( |-)?\d)\d{6}$/,"en-TZ":/^(\+?255|0)?[67]\d{8}$/,"en-UG":/^(\+?256|0)?[7]\d{8}$/,"en-US":/^((\+1|1)?( |-)?)?(\([2-9][0-9]{2}\)|[2-9][0-9]{2})( |-)?([2-9][0-9]{2}( |-)?[0-9]{4})$/,"en-ZA":/^(\+?27|0)\d{9}$/,"en-ZM":/^(\+?26)?09[567]\d{7}$/,"en-ZW":/^(\+263)[0-9]{9}$/,"es-CO":/^(\+?57)?([1-8]{1}|3[0-9]{2})?[2-9]{1}\d{6}$/,"es-CL":/^(\+?56|0)[2-9]\d{1}\d{7}$/,"es-CR":/^(\+506)?[2-8]\d{7}$/,"es-EC":/^(\+?593|0)([2-7]|9[2-9])\d{7}$/,"es-ES":/^(\+?34)?(6\d{1}|7[1234])\d{7}$/,"es-MX":/^(\+?52)?(1|01)?\d{10,11}$/,"es-PA":/^(\+?507)\d{7,8}$/,"es-PY":/^(\+?595|0)9[9876]\d{7}$/,"es-UY":/^(\+598|0)9[1-9][\d]{6}$/,"et-EE":/^(\+?372)?\s?(5|8[1-4])\s?([0-9]\s?){6,7}$/,"fa-IR":/^(\+?98[\-\s]?|0)9[0-39]\d[\-\s]?\d{3}[\-\s]?\d{4}$/,"fi-FI":/^(\+?358|0)\s?(4(0|1|2|4|5|6)?|50)\s?(\d\s?){4,8}\d$/,"fj-FJ":/^(\+?679)?\s?\d{3}\s?\d{4}$/,"fo-FO":/^(\+?298)?\s?\d{2}\s?\d{2}\s?\d{2}$/,"fr-FR":/^(\+?33|0)[67]\d{8}$/,"fr-GF":/^(\+?594|0|00594)[67]\d{8}$/,"fr-GP":/^(\+?590|0|00590)[67]\d{8}$/,"fr-MQ":/^(\+?596|0|00596)[67]\d{8}$/,"fr-RE":/^(\+?262|0|00262)[67]\d{8}$/,"he-IL":/^(\+972|0)([23489]|5[012345689]|77)[1-9]\d{6}$/,"hu-HU":/^(\+?36)(20|30|70)\d{7}$/,"id-ID":/^(\+?62|0)8(1[123456789]|2[1238]|3[1238]|5[12356789]|7[78]|9[56789]|8[123456789])([\s?|\d]{5,11})$/,"it-IT":/^(\+?39)?\s?3\d{2} ?\d{6,7}$/,"ja-JP":/^(\+81[ \-]?(\(0\))?|0)[6789]0[ \-]?\d{4}[ \-]?\d{4}$/,"kk-KZ":/^(\+?7|8)?7\d{9}$/,"kl-GL":/^(\+?299)?\s?\d{2}\s?\d{2}\s?\d{2}$/,"ko-KR":/^((\+?82)[ \-]?)?0?1([0|1|6|7|8|9]{1})[ \-]?\d{3,4}[ \-]?\d{4}$/,"lt-LT":/^(\+370|8)\d{8}$/,"ms-MY":/^(\+?6?01){1}(([0145]{1}(\-|\s)?\d{7,8})|([236789]{1}(\s|\-)?\d{7}))$/,"nb-NO":/^(\+?47)?[49]\d{7}$/,"ne-NP":/^(\+?977)?9[78]\d{8}$/,"nl-BE":/^(\+?32|0)4?\d{8}$/,"nl-NL":/^(((\+|00)?31\(0\))|((\+|00)?31)|0)6{1}\d{8}$/,"nn-NO":/^(\+?47)?[49]\d{7}$/,"pl-PL":/^(\+?48)? ?[5-8]\d ?\d{3} ?\d{2} ?\d{2}$/,"pt-BR":/(?=^(\+?5{2}\-?|0)[1-9]{2}\-?\d{4}\-?\d{4}$)(^(\+?5{2}\-?|0)[1-9]{2}\-?[6-9]{1}\d{3}\-?\d{4}$)|(^(\+?5{2}\-?|0)[1-9]{2}\-?9[6-9]{1}\d{3}\-?\d{4}$)/,"pt-PT":/^(\+?351)?9[1236]\d{7}$/,"ro-RO":/^(\+?4?0)\s?7\d{2}(\/|\s|\.|\-)?\d{3}(\s|\.|\-)?\d{3}$/,"ru-RU":/^(\+?7|8)?9\d{9}$/,"sl-SI":/^(\+386\s?|0)(\d{1}\s?\d{3}\s?\d{2}\s?\d{2}|\d{2}\s?\d{3}\s?\d{3})$/,"sk-SK":/^(\+?421)? ?[1-9][0-9]{2} ?[0-9]{3} ?[0-9]{3}$/,"sr-RS":/^(\+3816|06)[- \d]{5,9}$/,"sv-SE":/^(\+?46|0)[\s\-]?7[\s\-]?[02369]([\s\-]?\d){7}$/,"th-TH":/^(\+66|66|0)\d{9}$/,"tr-TR":/^(\+?90|0)?5\d{9}$/,"uk-UA":/^(\+?38|8)?0\d{9}$/,"vi-VN":/^(\+?84|0)((3([2-9]))|(5([2689]))|(7([0|6-9]))|(8([1-6|89]))|(9([0-9])))([0-9]{7})$/,"zh-CN":/^((\+|00)86)?1([3568][0-9]|4[579]|6[67]|7[01235678]|9[189])[0-9]{8}$/,"zh-TW":/^(\+?886\-?|0)?9\d{8}$/};rt["en-CA"]=rt["en-US"],rt["fr-BE"]=rt["nl-BE"],rt["zh-HK"]=rt["en-HK"],rt["zh-MO"]=rt["en-MO"],P=Object.keys(rt);var ut={AM:/^[A-Z]{2}\d{7}$/,AR:/^[A-Z]{3}\d{6}$/,AT:/^[A-Z]\d{7}$/,AU:/^[A-Z]\d{7}$/,BE:/^[A-Z]{2}\d{6}$/,BG:/^\d{9}$/,CA:/^[A-Z]{2}\d{6}$/,CH:/^[A-Z]\d{7}$/,CN:/^[GE]\d{8}$/,CY:/^[A-Z](\d{6}|\d{8})$/,CZ:/^\d{8}$/,DE:/^[CFGHJKLMNPRTVWXYZ0-9]{9}$/,DK:/^\d{9}$/,DZ:/^\d{9}$/,EE:/^([A-Z]\d{7}|[A-Z]{2}\d{7})$/,ES:/^[A-Z0-9]{2}([A-Z0-9]?)\d{6}$/,FI:/^[A-Z]{2}\d{7}$/,FR:/^\d{2}[A-Z]{2}\d{5}$/,GB:/^\d{9}$/,GR:/^[A-Z]{2}\d{7}$/,HR:/^\d{9}$/,HU:/^[A-Z]{2}(\d{6}|\d{7})$/,IE:/^[A-Z0-9]{2}\d{7}$/,IN:/^[A-Z]{1}-?\d{7}$/,IS:/^(A)\d{7}$/,IT:/^[A-Z0-9]{2}\d{7}$/,JP:/^[A-Z]{2}\d{7}$/,KR:/^[MS]\d{8}$/,LT:/^[A-Z0-9]{8}$/,LU:/^[A-Z0-9]{8}$/,LV:/^[A-Z0-9]{2}\d{7}$/,MT:/^\d{7}$/,NL:/^[A-Z]{2}[A-Z0-9]{6}\d$/,PO:/^[A-Z]{2}\d{7}$/,PT:/^[A-Z]\d{6}$/,RO:/^\d{8,9}$/,SE:/^\d{8}$/,SL:/^(P)[A-Z]\d{7}$/,SK:/^[0-9A-Z]\d{7}$/,TR:/^[A-Z]\d{8}$/,UA:/^[A-Z]{2}\d{6}$/,US:/^\d{9}$/},nt=/^\d{5}$/,it=/^\d{6}$/,ot={AD:/^AD\d{3}$/,AT:U=/^\d{4}$/,AU:U,BE:U,BG:U,BR:/^\d{5}-\d{3}$/,CA:/^[ABCEGHJKLMNPRSTVXY]\d[ABCEGHJ-NPRSTV-Z][\s\-]?\d[ABCEGHJ-NPRSTV-Z]\d$/i,CH:U,CZ:/^\d{3}\s?\d{2}$/,DE:nt,DK:U,DZ:nt,EE:nt,ES:nt,FI:nt,FR:/^\d{2}\s?\d{3}$/,GB:/^(gir\s?0aa|[a-z]{1,2}\d[\da-z]?\s?(\d[a-z]{2})?)$/i,GR:/^\d{3}\s?\d{2}$/,HR:/^([1-5]\d{4}$)/,HU:U,ID:nt,IE:/^(?!.*(?:o))[A-z]\d[\dw]\s\w{4}$/i,IL:nt,IN:/^((?!10|29|35|54|55|65|66|86|87|88|89)[1-9][0-9]{5})$/,IS:/^\d{3}$/,IT:nt,JP:/^\d{3}\-\d{4}$/,KE:nt,LI:/^(948[5-9]|949[0-7])$/,LT:/^LT\-\d{5}$/,LU:U,LV:/^LV\-\d{4}$/,MX:nt,MT:/^[A-Za-z]{3}\s{0,1}\d{4}$/,NL:/^\d{4}\s?[a-z]{2}$/i,NO:U,NP:/^(10|21|22|32|33|34|44|45|56|57)\d{3}$|^(977)$/i,NZ:U,PL:/^\d{2}\-\d{3}$/,PR:/^00[679]\d{2}([ -]\d{4})?$/,PT:/^\d{4}\-\d{3}?$/,RO:it,RU:it,SA:nt,SE:/^[1-9]\d{2}\s?\d{2}$/,SI:U,SK:/^\d{3}\s?\d{2}$/,TN:U,TW:/^\d{3}(\d{2})?$/,UA:nt,US:/^\d{5}(-\d{4})?$/,ZA:U,ZM:nt};U=Object.keys(ot);var at={protocols:["http","https","ftp"],require_tld:!0,require_protocol:!1,require_host:!0,require_valid_protocol:!0,allow_underscores:!1,allow_trailing_dot:!1,allow_protocol_relative_urls:!1},st=/^\[([^\]]+)\](?::([0-9]+))?$/;return I.extend({isAlphanumeric:function(t){var e=1]/.test(a)&&(!r||a.split('"').length!==a.split('\\"').length))return!1}else if(e.require_display_name)return!1}if(!e.ignore_max_length&&254]/.test(t)||0===t.indexOf("mailto:"))return!1;e=_(e,at);var r=t.split("#");if(t=r.shift(),r=t.split("?"),t=r.shift(),1<(r=t.split("://")).length){if(t=r.shift().toLowerCase(),e.require_valid_protocol&&-1===e.protocols.indexOf(t))return!1}else{if(e.require_protocol)return!1;if("//"===t.substr(0,2)){if(!e.allow_protocol_relative_urls)return!1;r[0]=t.substr(2)}}if(""===(t=r.join("://")))return!1;if(r=t.split("/"),""===(t=r.shift())&&!e.require_host)return!0;if(1<(r=t.split("@")).length){if(e.disallow_auth)return!1;if(0<=(t=r.shift()).indexOf(":")&&2=r||65535Number(e)}function n(t,e){return r(t)&&r(e)&&Number(t)>=Number(e)}function i(t,e){return!!(Array.isArray(e)&&-1!==["string","number","boolean"].indexOf(typeof t)||"string"==typeof e&&"string"==typeof t)&&-1!==e.indexOf(t)}function o(t){return!!Array.isArray(t)}function a(t){return!t||(r(t)?0===t:Object.prototype.hasOwnProperty.call(t,"length")?0===t.length:"object"!=typeof t||0===Object.keys(t).length)}function s(t){return Number.isNaN(t)}function d(t){return"number"==typeof t}function c(t){return"string"==typeof t}function l(t){return!!t}function f(t,e){return t.length===e}function $(t,e){return r(t)&&r(e)&&Number(t)=u&&(void 0===e||t<=e)}function Z(t,e){y(t),(e=_(e,G)).allow_trailing_dot&&"."===t[t.length-1]&&(t=t.substring(0,t.length-1)),t=t.split(".");for(var r=0;r=t.split(".").sort((function(t,e){return t-e}))[3];if("6"===e){if(e=[t],t.includes("%")&&(2!==(e=t.split("%")).length||!e[0].includes(":")||""===e[1]))return!1;var r=!1,u=N((e=e[0].split(":"))[e.length-1],4),n=u?7:8;if(e.length>n)return!1;if("::"===t)return!0;"::"===t.substr(0,2)?(e.shift(),e.shift(),r=!0):"::"===t.substr(t.length-2)&&(e.pop(),e.pop(),r=!0);for(var i=0;it.length)&&(e=t.length);for(var r=0,u=Array(e);re},longerThanOrEquals:function(t,e){return t.length>=e},matches:g,numberEquals:h,shorterThan:function(t,e){return t.length$/i,K=/^[a-z\d!#\$%&'\*\+\-\/=\?\^_`{\|}~]+$/i,H=/^[a-z\d]+$/,k=/^([\s\x01-\x08\x0b\x0c\x0e-\x1f\x7f\x21\x23-\x5b\x5d-\x7e]|(\\[\x01-\x09\x0b\x0c\x0d-\x7f]))*$/i,Y=/^[a-z\d!#\$%&'\*\+\-\/=\?\^_`{\|}~\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+$/i,W=/^([\s\x01-\x08\x0b\x0c\x0e-\x1f\x7f\x21\x23-\x5b\x5d-\x7e\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]|(\\[\x01-\x09\x0b\x0c\x0d-\x7f\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))*$/i,J={ES:function(t){y(t);var e={X:0,Y:1,Z:2};if(t=t.trim().toUpperCase(),!/^[0-9X-Z][0-9]{7}[TRWAGMYFPDXBNJZSQVHLCKE]$/.test(t))return!1;var r=t.slice(0,-1).replace(/[X,Y,Z]/g,(function(t){return e[t]}));return t.endsWith("TRWAGMYFPDXBNJZSQVHLCKE".split("")[r%23])},IN:function(t){var e=[[0,1,2,3,4,5,6,7,8,9],[1,2,3,4,0,6,7,8,9,5],[2,3,4,0,1,7,8,9,5,6],[3,4,0,1,2,8,9,5,6,7],[4,0,1,2,3,9,5,6,7,8],[5,9,8,7,6,0,4,3,2,1],[6,5,9,8,7,1,0,4,3,2],[7,6,5,9,8,2,1,0,4,3],[8,7,6,5,9,3,2,1,0,4],[9,8,7,6,5,4,3,2,1,0]],r=[[0,1,2,3,4,5,6,7,8,9],[1,5,7,6,2,8,3,0,9,4],[5,8,0,3,7,9,6,1,4,2],[8,9,1,6,0,4,3,5,2,7],[9,4,5,3,1,2,6,8,7,0],[4,2,8,6,5,7,3,9,0,1],[2,7,9,3,8,0,6,4,1,5],[7,0,4,6,9,1,3,2,5,8]];if(t=t.trim(),!/^[1-9]\d{3}\s?\d{4}\s?\d{4}$/.test(t))return!1;var u=0;return t.replace(/\s/g,"").split("").map(Number).reverse().forEach((function(t,n){u=e[u][r[n%8][t]]})),0===u},NO:function(t){if(t=t.trim(),isNaN(Number(t))||11!==t.length||"00000000000"===t)return!1;var e=(11-(3*(t=t.split("").map(Number))[0]+7*t[1]+6*t[2]+1*t[3]+8*t[4]+9*t[5]+4*t[6]+5*t[7]+2*t[8])%11)%11,r=(11-(5*t[0]+4*t[1]+3*t[2]+2*t[3]+7*t[4]+6*t[5]+5*t[6]+4*t[7]+3*t[8]+2*e)%11)%11;return 11===e&&(e=0),e===t[9]&&r===t[10]},"he-IL":function(t){if(t=t.trim(),!/^\d{9}$/.test(t))return!1;for(var e,r=0,u=0;unew Date||u.getFullYear()!==e||u.getMonth()!==r-1||u.getDate()!==t)},o=function(t){for(var e=t.substring(0,17),n=0,i=0;17>i;i++)n+=parseInt(e.charAt(i),10)*Number.parseInt(r[i]);return u[n%11]===t.charAt(17).toUpperCase()};return function(t){if(/^\d{15}|(\d{17}(\d|x|X))$/.test(t))if(15===t.length){var e=/^[1-9]\d{7}((0[1-9])|(1[0-2]))((0[1-9])|([1-2][0-9])|(3[0-1]))\d{3}$/.test(t);e?(e=t.substring(0,6),(e=n(e))?(e="19".concat(t.substring(6,12)),t=!!(e=i(e))&&o(t)):t=!1):t=!1}else 18===t.length&&(e=/^[1-9]\d{5}[1-9]\d{3}((0[1-9])|(1[0-2]))((0[1-9])|([1-2][0-9])|(3[0-1]))\d{3}(\d|x|X)$/.test(t))?(e=t.substring(0,6),(e=n(e))?(e=t.substring(6,14),t=!!(e=i(e))&&o(t)):t=!1):t=!1;else t=!1;return t}(t)},"zh-TW":function(t){var e={A:10,B:11,C:12,D:13,E:14,F:15,G:16,H:17,I:34,J:18,K:19,L:20,M:21,N:22,O:35,P:23,Q:24,R:25,S:26,T:27,U:28,V:29,W:32,X:30,Y:31,Z:33};return t=t.trim().toUpperCase(),!!/^[A-Z][0-9]{9}$/.test(t)&&Array.from(t).reduce((function(t,r,u){return 0===u?(t=e[r])%10*9+Math.floor(t/10):9===u?0==(10-t%10-Number(r))%10:t+Number(r)*(9-u)}),0)}},X={allow_primitives:!1},V=/^[A-z]{2,4}([_-]([A-z]{4}|[\d]{3}))?([_-]([A-z]{2}|[\d]{3}))?$/,Q=/^(application|audio|font|image|message|model|multipart|text|video)\/[a-zA-Z0-9\.\-\+]{1,100}$/i,tt=/^text\/[a-zA-Z0-9\.\-\+]{1,100};\s?charset=("[a-zA-Z0-9\.\-\+\s]{0,70}"|[a-zA-Z0-9\.\-\+]{0,70})(\s?\([a-zA-Z0-9\.\-\+\s]{1,20}\))?$/i,et=/^multipart\/[a-zA-Z0-9\.\-\+]{1,100}(;\s?(boundary|charset)=("[a-zA-Z0-9\.\-\+\s]{0,70}"|[a-zA-Z0-9\.\-\+]{0,70})(\s?\([a-zA-Z0-9\.\-\+\s]{1,20}\))?){0,2}$/i,rt={"am-AM":/^(\+?374|0)((10|[9|7][0-9])\d{6}$|[2-4]\d{7}$)/,"ar-AE":/^((\+?971)|0)?5[024568]\d{7}$/,"ar-BH":/^(\+?973)?(3|6)\d{7}$/,"ar-DZ":/^(\+?213|0)(5|6|7)\d{8}$/,"ar-EG":/^((\+?20)|0)?1[0125]\d{8}$/,"ar-IQ":/^(\+?964|0)?7[0-9]\d{8}$/,"ar-JO":/^(\+?962|0)?7[789]\d{7}$/,"ar-KW":/^(\+?965)[569]\d{7}$/,"ar-LY":/^((\+?218)|0)?(9[1-6]\d{7}|[1-8]\d{7,9})$/,"ar-SA":/^(!?(\+?966)|0)?5\d{8}$/,"ar-SY":/^(!?(\+?963)|0)?9\d{8}$/,"ar-TN":/^(\+?216)?[2459]\d{7}$/,"be-BY":/^(\+?375)?(24|25|29|33|44)\d{7}$/,"bg-BG":/^(\+?359|0)?8[789]\d{7}$/,"bn-BD":/^(\+?880|0)1[13456789][0-9]{8}$/,"cs-CZ":/^(\+?420)? ?[1-9][0-9]{2} ?[0-9]{3} ?[0-9]{3}$/,"da-DK":/^(\+?45)?\s?\d{2}\s?\d{2}\s?\d{2}\s?\d{2}$/,"de-DE":/^(\+49)?0?1(5[0-25-9]\d|6([23]|0\d?)|7([0-57-9]|6\d))\d{7}$/,"de-AT":/^(\+43|0)\d{1,4}\d{3,12}$/,"de-CH":/^(\+41|0)(7[5-9])\d{1,7}$/,"el-GR":/^(\+?30|0)?(69\d{8})$/,"en-AU":/^(\+?61|0)4\d{8}$/,"en-GB":/^(\+?44|0)7\d{9}$/,"en-GG":/^(\+?44|0)1481\d{6}$/,"en-GH":/^(\+233|0)(20|50|24|54|27|57|26|56|23|28)\d{7}$/,"en-HK":/^(\+?852[-\s]?)?[456789]\d{3}[-\s]?\d{4}$/,"en-MO":/^(\+?853[-\s]?)?[6]\d{3}[-\s]?\d{4}$/,"en-IE":/^(\+?353|0)8[356789]\d{7}$/,"en-IN":/^(\+?91|0)?[6789]\d{9}$/,"en-KE":/^(\+?254|0)(7|1)\d{8}$/,"en-MT":/^(\+?356|0)?(99|79|77|21|27|22|25)[0-9]{6}$/,"en-MU":/^(\+?230|0)?\d{8}$/,"en-NG":/^(\+?234|0)?[789]\d{9}$/,"en-NZ":/^(\+?64|0)[28]\d{7,9}$/,"en-PK":/^((\+92)|(0092))-{0,1}\d{3}-{0,1}\d{7}$|^\d{11}$|^\d{4}-\d{7}$/,"en-RW":/^(\+?250|0)?[7]\d{8}$/,"en-SG":/^(\+65)?[689]\d{7}$/,"en-SL":/^(?:0|94|\+94)?(7(0|1|2|5|6|7|8)( |-)?\d)\d{6}$/,"en-TZ":/^(\+?255|0)?[67]\d{8}$/,"en-UG":/^(\+?256|0)?[7]\d{8}$/,"en-US":/^((\+1|1)?( |-)?)?(\([2-9][0-9]{2}\)|[2-9][0-9]{2})( |-)?([2-9][0-9]{2}( |-)?[0-9]{4})$/,"en-ZA":/^(\+?27|0)\d{9}$/,"en-ZM":/^(\+?26)?09[567]\d{7}$/,"en-ZW":/^(\+263)[0-9]{9}$/,"es-CO":/^(\+?57)?([1-8]{1}|3[0-9]{2})?[2-9]{1}\d{6}$/,"es-CL":/^(\+?56|0)[2-9]\d{1}\d{7}$/,"es-CR":/^(\+506)?[2-8]\d{7}$/,"es-EC":/^(\+?593|0)([2-7]|9[2-9])\d{7}$/,"es-ES":/^(\+?34)?(6\d{1}|7[1234])\d{7}$/,"es-MX":/^(\+?52)?(1|01)?\d{10,11}$/,"es-PA":/^(\+?507)\d{7,8}$/,"es-PY":/^(\+?595|0)9[9876]\d{7}$/,"es-UY":/^(\+598|0)9[1-9][\d]{6}$/,"et-EE":/^(\+?372)?\s?(5|8[1-4])\s?([0-9]\s?){6,7}$/,"fa-IR":/^(\+?98[\-\s]?|0)9[0-39]\d[\-\s]?\d{3}[\-\s]?\d{4}$/,"fi-FI":/^(\+?358|0)\s?(4(0|1|2|4|5|6)?|50)\s?(\d\s?){4,8}\d$/,"fj-FJ":/^(\+?679)?\s?\d{3}\s?\d{4}$/,"fo-FO":/^(\+?298)?\s?\d{2}\s?\d{2}\s?\d{2}$/,"fr-FR":/^(\+?33|0)[67]\d{8}$/,"fr-GF":/^(\+?594|0|00594)[67]\d{8}$/,"fr-GP":/^(\+?590|0|00590)[67]\d{8}$/,"fr-MQ":/^(\+?596|0|00596)[67]\d{8}$/,"fr-RE":/^(\+?262|0|00262)[67]\d{8}$/,"he-IL":/^(\+972|0)([23489]|5[012345689]|77)[1-9]\d{6}$/,"hu-HU":/^(\+?36)(20|30|70)\d{7}$/,"id-ID":/^(\+?62|0)8(1[123456789]|2[1238]|3[1238]|5[12356789]|7[78]|9[56789]|8[123456789])([\s?|\d]{5,11})$/,"it-IT":/^(\+?39)?\s?3\d{2} ?\d{6,7}$/,"ja-JP":/^(\+81[ \-]?(\(0\))?|0)[6789]0[ \-]?\d{4}[ \-]?\d{4}$/,"kk-KZ":/^(\+?7|8)?7\d{9}$/,"kl-GL":/^(\+?299)?\s?\d{2}\s?\d{2}\s?\d{2}$/,"ko-KR":/^((\+?82)[ \-]?)?0?1([0|1|6|7|8|9]{1})[ \-]?\d{3,4}[ \-]?\d{4}$/,"lt-LT":/^(\+370|8)\d{8}$/,"ms-MY":/^(\+?6?01){1}(([0145]{1}(\-|\s)?\d{7,8})|([236789]{1}(\s|\-)?\d{7}))$/,"nb-NO":/^(\+?47)?[49]\d{7}$/,"ne-NP":/^(\+?977)?9[78]\d{8}$/,"nl-BE":/^(\+?32|0)4?\d{8}$/,"nl-NL":/^(((\+|00)?31\(0\))|((\+|00)?31)|0)6{1}\d{8}$/,"nn-NO":/^(\+?47)?[49]\d{7}$/,"pl-PL":/^(\+?48)? ?[5-8]\d ?\d{3} ?\d{2} ?\d{2}$/,"pt-BR":/(?=^(\+?5{2}\-?|0)[1-9]{2}\-?\d{4}\-?\d{4}$)(^(\+?5{2}\-?|0)[1-9]{2}\-?[6-9]{1}\d{3}\-?\d{4}$)|(^(\+?5{2}\-?|0)[1-9]{2}\-?9[6-9]{1}\d{3}\-?\d{4}$)/,"pt-PT":/^(\+?351)?9[1236]\d{7}$/,"ro-RO":/^(\+?4?0)\s?7\d{2}(\/|\s|\.|\-)?\d{3}(\s|\.|\-)?\d{3}$/,"ru-RU":/^(\+?7|8)?9\d{9}$/,"sl-SI":/^(\+386\s?|0)(\d{1}\s?\d{3}\s?\d{2}\s?\d{2}|\d{2}\s?\d{3}\s?\d{3})$/,"sk-SK":/^(\+?421)? ?[1-9][0-9]{2} ?[0-9]{3} ?[0-9]{3}$/,"sr-RS":/^(\+3816|06)[- \d]{5,9}$/,"sv-SE":/^(\+?46|0)[\s\-]?7[\s\-]?[02369]([\s\-]?\d){7}$/,"th-TH":/^(\+66|66|0)\d{9}$/,"tr-TR":/^(\+?90|0)?5\d{9}$/,"uk-UA":/^(\+?38|8)?0\d{9}$/,"vi-VN":/^(\+?84|0)((3([2-9]))|(5([2689]))|(7([0|6-9]))|(8([1-6|89]))|(9([0-9])))([0-9]{7})$/,"zh-CN":/^((\+|00)86)?1([3568][0-9]|4[579]|6[67]|7[01235678]|9[189])[0-9]{8}$/,"zh-TW":/^(\+?886\-?|0)?9\d{8}$/};rt["en-CA"]=rt["en-US"],rt["fr-BE"]=rt["nl-BE"],rt["zh-HK"]=rt["en-HK"],rt["zh-MO"]=rt["en-MO"],P=Object.keys(rt);var ut={AM:/^[A-Z]{2}\d{7}$/,AR:/^[A-Z]{3}\d{6}$/,AT:/^[A-Z]\d{7}$/,AU:/^[A-Z]\d{7}$/,BE:/^[A-Z]{2}\d{6}$/,BG:/^\d{9}$/,CA:/^[A-Z]{2}\d{6}$/,CH:/^[A-Z]\d{7}$/,CN:/^[GE]\d{8}$/,CY:/^[A-Z](\d{6}|\d{8})$/,CZ:/^\d{8}$/,DE:/^[CFGHJKLMNPRTVWXYZ0-9]{9}$/,DK:/^\d{9}$/,DZ:/^\d{9}$/,EE:/^([A-Z]\d{7}|[A-Z]{2}\d{7})$/,ES:/^[A-Z0-9]{2}([A-Z0-9]?)\d{6}$/,FI:/^[A-Z]{2}\d{7}$/,FR:/^\d{2}[A-Z]{2}\d{5}$/,GB:/^\d{9}$/,GR:/^[A-Z]{2}\d{7}$/,HR:/^\d{9}$/,HU:/^[A-Z]{2}(\d{6}|\d{7})$/,IE:/^[A-Z0-9]{2}\d{7}$/,IN:/^[A-Z]{1}-?\d{7}$/,IS:/^(A)\d{7}$/,IT:/^[A-Z0-9]{2}\d{7}$/,JP:/^[A-Z]{2}\d{7}$/,KR:/^[MS]\d{8}$/,LT:/^[A-Z0-9]{8}$/,LU:/^[A-Z0-9]{8}$/,LV:/^[A-Z0-9]{2}\d{7}$/,MT:/^\d{7}$/,NL:/^[A-Z]{2}[A-Z0-9]{6}\d$/,PO:/^[A-Z]{2}\d{7}$/,PT:/^[A-Z]\d{6}$/,RO:/^\d{8,9}$/,SE:/^\d{8}$/,SL:/^(P)[A-Z]\d{7}$/,SK:/^[0-9A-Z]\d{7}$/,TR:/^[A-Z]\d{8}$/,UA:/^[A-Z]{2}\d{6}$/,US:/^\d{9}$/},nt=/^\d{5}$/,it=/^\d{6}$/,ot={AD:/^AD\d{3}$/,AT:U=/^\d{4}$/,AU:U,BE:U,BG:U,BR:/^\d{5}-\d{3}$/,CA:/^[ABCEGHJKLMNPRSTVXY]\d[ABCEGHJ-NPRSTV-Z][\s\-]?\d[ABCEGHJ-NPRSTV-Z]\d$/i,CH:U,CZ:/^\d{3}\s?\d{2}$/,DE:nt,DK:U,DZ:nt,EE:nt,ES:nt,FI:nt,FR:/^\d{2}\s?\d{3}$/,GB:/^(gir\s?0aa|[a-z]{1,2}\d[\da-z]?\s?(\d[a-z]{2})?)$/i,GR:/^\d{3}\s?\d{2}$/,HR:/^([1-5]\d{4}$)/,HU:U,ID:nt,IE:/^(?!.*(?:o))[A-z]\d[\dw]\s\w{4}$/i,IL:nt,IN:/^((?!10|29|35|54|55|65|66|86|87|88|89)[1-9][0-9]{5})$/,IS:/^\d{3}$/,IT:nt,JP:/^\d{3}\-\d{4}$/,KE:nt,LI:/^(948[5-9]|949[0-7])$/,LT:/^LT\-\d{5}$/,LU:U,LV:/^LV\-\d{4}$/,MX:nt,MT:/^[A-Za-z]{3}\s{0,1}\d{4}$/,NL:/^\d{4}\s?[a-z]{2}$/i,NO:U,NP:/^(10|21|22|32|33|34|44|45|56|57)\d{3}$|^(977)$/i,NZ:U,PL:/^\d{2}\-\d{3}$/,PR:/^00[679]\d{2}([ -]\d{4})?$/,PT:/^\d{4}\-\d{3}?$/,RO:it,RU:it,SA:nt,SE:/^[1-9]\d{2}\s?\d{2}$/,SI:U,SK:/^\d{3}\s?\d{2}$/,TN:U,TW:/^\d{3}(\d{2})?$/,UA:nt,US:/^\d{5}(-\d{4})?$/,ZA:U,ZM:nt};U=Object.keys(ot);var at={protocols:["http","https","ftp"],require_tld:!0,require_protocol:!1,require_host:!0,require_valid_protocol:!0,allow_underscores:!1,allow_trailing_dot:!1,allow_protocol_relative_urls:!1},st=/^\[([^\]]+)\](?::([0-9]+))?$/;return I.extend({isAlphanumeric:function(t){var e=1]/.test(a)&&(!r||a.split('"').length!==a.split('\\"').length))return!1}else if(e.require_display_name)return!1}if(!e.ignore_max_length&&254]/.test(t)||0===t.indexOf("mailto:"))return!1;e=_(e,at);var r=t.split("#");if(t=r.shift(),r=t.split("?"),t=r.shift(),1<(r=t.split("://")).length){if(t=r.shift().toLowerCase(),e.require_valid_protocol&&-1===e.protocols.indexOf(t))return!1}else{if(e.require_protocol)return!1;if("//"===t.substr(0,2)){if(!e.allow_protocol_relative_urls)return!1;r[0]=t.substr(2)}}if(""===(t=r.join("://")))return!1;if(r=t.split("/"),""===(t=r.shift())&&!e.require_host)return!0;if(1<(r=t.split("@")).length){if(e.disallow_auth)return!1;if(0<=(t=r.shift()).indexOf(":")&&2=r||65535Number(t)}function o(n,t){return r(n)&&r(t)&&Number(n)>=Number(t)}function i(n,t){return!!(Array.isArray(t)&&-1!==["string","number","boolean"].indexOf(typeof n)||"string"==typeof t&&"string"==typeof n)&&-1!==t.indexOf(n)}function u(n){return!!Array.isArray(n)}function a(n){return!n||(r(n)?0===n:Object.prototype.hasOwnProperty.call(n,"length")?0===n.length:"object"!=typeof n||0===Object.keys(n).length)}function f(n){return Number.isNaN(n)}function s(n){return"number"==typeof n}function c(n){return"string"==typeof n}function l(n){return!!n}function y(n,t){return n.length===t}function g(n,t){return r(n)&&r(t)&&Number(n)t},longerThanOrEquals:function(n,t){return n.length>=t},matches:m,numberEquals:h,shorterThan:function(n,t){return n.length { it('Should throw', () => { expect(() => rule(n => n === 2, 1)).toThrow(Error); }); + + it('Should throw with verbose', () => { + expect(() => + rule(() => ({ pass: false, message: 'Custom message' })) + ).toThrow(Error); + }); }); describe('When passing output', () => { it('Should return silently', () => { expect(rule(n => n === 1, 1)).toBeUndefined(); }); + + it('Should return silently', () => { + expect( + rule(() => ({ pass: true, message: 'Custom message' })) + ).toBeUndefined(); + }); }); }); diff --git a/packages/n4s/src/enforce/spec.js b/packages/n4s/src/enforce/spec.js index f220bf0ea..aeb4b18d8 100644 --- a/packages/n4s/src/enforce/spec.js +++ b/packages/n4s/src/enforce/spec.js @@ -49,8 +49,13 @@ const suite = ({ withProxy, requirePath }) => let extended; beforeEach(() => { extended = enforce.extend({ - isImpossible: v => !!v.match(/impossible/i), endsWith: (v, arg) => v.endsWith(arg), + isImpossible: v => !!v.match(/impossible/i), + passVerbose: () => ({ + pass: true, + message: "It shouldn't throw an error", + }), + throwVerbose: () => ({ pass: false, message: 'Custom error' }), }); }); @@ -69,6 +74,10 @@ const suite = ({ withProxy, requirePath }) => .endsWith('Snowball') .isImpossible(); }); + + it('Should return silently for custom verbose rule in regular test', () => { + enforce().passVerbose(); + }); }); it('Should throw errors on failing enforces', () => { diff --git a/packages/n4s/src/ensure/runner/index.js b/packages/n4s/src/ensure/runner/index.js index 57bf5ba36..6b40a7a9c 100644 --- a/packages/n4s/src/ensure/runner/index.js +++ b/packages/n4s/src/ensure/runner/index.js @@ -1,3 +1,5 @@ +import { transformResult } from '../../lib/transformResult'; + /** * Run a single rule against ensured value (e.g. `isNumber()`) * @param {Function} rule - rule to run @@ -7,7 +9,8 @@ */ function runner(rule, value, ...args) { try { - return rule(value, ...args) === true; + const result = rule(value, ...args); + return transformResult(result, { rule, value }).pass; } catch (err) { return false; } diff --git a/packages/n4s/src/lib/transformResult/index.js b/packages/n4s/src/lib/transformResult/index.js new file mode 100644 index 000000000..0a93b2dc7 --- /dev/null +++ b/packages/n4s/src/lib/transformResult/index.js @@ -0,0 +1,54 @@ +import throwError from '../throwError'; + +export function validateResult(result, rule) { + if ( + typeof result !== 'boolean' && + (!result || typeof result.pass !== 'boolean') + ) { + throwError( + `/${rule.name} wrong return value for the rule please check that the return is valid` + ); + } +} + +// for easier testing and mocking +export function getDefaultResult(value, rule) { + return { + message: formatResultMessage(rule, `invalid ${typeof value} value`), + }; +} + +export function formatResultMessage(rule, msg) { + return `[${LIBRARY_NAME}]/${rule.name} ${msg}`; +} + +/** + * Transform the result of a rule into a standard format + * @param {string} interfaceName to be used in the messages + * @param {*} result of the rule + * @param {Object} options + * @param {function} options.rule + * @param {*} options.value + * @returns {Object} result + * @returns {string} result.message + * @returns {boolean} result.pass indicates if the test passes or not + */ +export function transformResult(result, { rule, value }) { + const defaultResult = getDefaultResult(value, rule); + validateResult(result, rule); + + if (typeof result === 'boolean') { + return { ...defaultResult, pass: result }; + } else { + const formattedResult = { + pass: result.pass, + }; + if (result.message) { + formattedResult.message = formatResultMessage( + rule, + typeof result.message === 'function' ? result.message() : result.message + ); + } + return { ...defaultResult, ...formattedResult }; + } +} diff --git a/packages/n4s/src/lib/transformResult/spec.js b/packages/n4s/src/lib/transformResult/spec.js new file mode 100644 index 000000000..d562395ea --- /dev/null +++ b/packages/n4s/src/lib/transformResult/spec.js @@ -0,0 +1,128 @@ +import { + goodBooleanRule, + goodObjectRule, + goodObjectMessageRule, + badObjectRule, + nullRule, + goodObjectMessageFunctionRule, +} from '../../testUtils/rules'; +import { + transformResult, + getDefaultResult, + formatResultMessage, + validateResult, +} from '.'; + +describe('Tests `validateResult` helper', () => { + it('Should pass with boolean return values', () => { + const testRule = () => true; + validateResult(testRule()); + }); + + it('Should pass with a verbose return value', () => { + const testRule = () => ({ pass: false, message: 'pass' }); + validateResult(testRule()); + }); + + it('Should throw error when reciving null', () => { + const testRule = () => null; + expect(() => validateResult(testRule())).toThrow(Error); + }); + + it("Should return false if it is a verbose result and doesn't have pass property", () => { + const missingPass = () => ({ message: 'missing pass' }); + expect(() => validateResult(missingPass())).toThrow(Error); + }); +}); + +describe.each([true, false])('Test transform result', bool => { + // to make sure we don't end up leaving some hardcoded value behind + it(`Should transform a boolean`, () => { + const { message: expectedMessage } = getDefaultResult( + bool, + goodBooleanRule + ); + const result = goodBooleanRule(bool); + expect( + transformResult(result, { rule: goodBooleanRule, value: bool }) + ).toEqual({ pass: bool, message: expectedMessage }); + }); + + it('Should transform a complete object', () => { + const result = goodObjectRule(bool); + expect( + transformResult(result, { rule: goodObjectRule, value: bool }) + ).toEqual({ + pass: bool, + message: formatResultMessage(goodObjectRule, result.message), + }); + }); + + it('Should add default message', () => { + const result = goodObjectMessageRule(bool); + const { message: expectedMessage } = getDefaultResult( + bool, + goodObjectMessageRule + ); + + expect( + transformResult(result, { + rule: goodObjectMessageRule, + value: bool, + }) + ).toEqual({ + pass: bool, + message: expectedMessage, + }); + }); + + it('Should get the message from the function', () => { + const result = goodObjectMessageFunctionRule(bool); + expect( + transformResult(result, { + rule: goodObjectMessageFunctionRule, + value: bool, + }) + ).toEqual({ + pass: bool, + message: formatResultMessage( + goodObjectMessageFunctionRule, + result.message() + ), + }); + }); + + it('Should throw with malformed result', () => { + const result = badObjectRule(bool); + expect(() => + transformResult(result, { rule: badObjectRule, value: bool }) + ).toThrow(Error); + }); + + it('Should throw with null result', () => { + const result = nullRule(bool); + expect(() => + transformResult(result, { rule: nullRule, value: bool }) + ).toThrow(Error); + }); +}); + +describe("Test transform result's message", () => { + [goodObjectMessageRule, goodObjectMessageRule, goodObjectRule].forEach( + rule => { + it('Should contain the library name', () => { + const result = rule(true); + expect(transformResult(result, { rule, value: true }).message).toMatch( + LIBRARY_NAME + ); + }); + + it('Should contain the name of the rule', () => { + const result = rule(true); + expect(transformResult(result, { rule, value: true }).message).toMatch( + rule.name + ); + }); + } + ); +}); diff --git a/packages/n4s/src/testUtils/rules.js b/packages/n4s/src/testUtils/rules.js new file mode 100644 index 000000000..abd40237a --- /dev/null +++ b/packages/n4s/src/testUtils/rules.js @@ -0,0 +1,31 @@ +export function goodBooleanRule(bool) { + return bool; +} + +export function goodObjectRule(bool) { + return { + pass: bool, + message: 'What did you do Carl!?', + }; +} + +export function goodObjectMessageRule(bool) { + return { + pass: bool, + }; +} + +export function goodObjectMessageFunctionRule(bool) { + return { + pass: bool, + message: () => `I passed with ${bool}`, + }; +} + +export function badObjectRule() { + return { message: 'Something went wrong' }; +} + +export function nullRule() { + return null; +}