validators-impl.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.ValidatorsImpl = void 0;
  4. const validator = require("validator");
  5. const context_items_1 = require("../context-items");
  6. class ValidatorsImpl {
  7. constructor(builder, chain) {
  8. this.builder = builder;
  9. this.chain = chain;
  10. this.negateNext = false;
  11. }
  12. addItem(item) {
  13. this.builder.addItem(item);
  14. this.lastValidator = item;
  15. // Reset this.negateNext so that next validation isn't negated too
  16. this.negateNext = false;
  17. return this.chain;
  18. }
  19. // validation manipulation
  20. not() {
  21. this.negateNext = true;
  22. return this.chain;
  23. }
  24. withMessage(message) {
  25. this.lastValidator.message = message;
  26. return this.chain;
  27. }
  28. // custom validators
  29. custom(validator) {
  30. return this.addItem(new context_items_1.CustomValidation(validator, this.negateNext));
  31. }
  32. exists(options = {}) {
  33. let validator;
  34. if (options.checkFalsy || options.values === 'falsy') {
  35. validator = value => !!value;
  36. }
  37. else if (options.checkNull || options.values === 'null') {
  38. validator = value => value != null;
  39. }
  40. else {
  41. validator = value => value !== undefined;
  42. }
  43. return this.custom(validator);
  44. }
  45. isArray(options = {}) {
  46. return this.custom(value => Array.isArray(value) &&
  47. (typeof options.min === 'undefined' || value.length >= options.min) &&
  48. (typeof options.max === 'undefined' || value.length <= options.max));
  49. }
  50. isObject(options = { strict: true }) {
  51. return this.custom(value => typeof value === 'object' &&
  52. (options.strict == null || options.strict ? value !== null && !Array.isArray(value) : true));
  53. }
  54. isString() {
  55. return this.custom(value => typeof value === 'string');
  56. }
  57. notEmpty(options) {
  58. this.not();
  59. return this.isEmpty(options);
  60. }
  61. // Standard validators
  62. addStandardValidation(validator, ...options) {
  63. return this.addItem(new context_items_1.StandardValidation(validator, this.negateNext, options));
  64. }
  65. contains(elem, options) {
  66. return this.addStandardValidation(validator.contains, elem, options);
  67. }
  68. equals(comparison) {
  69. return this.addStandardValidation(validator.equals, comparison);
  70. }
  71. isAbaRouting() {
  72. return this.addStandardValidation(validator.isAbaRouting);
  73. }
  74. isAfter(dateOrOptions) {
  75. return this.addStandardValidation(validator.isAfter, dateOrOptions);
  76. }
  77. isAlpha(locale, options) {
  78. // TODO(v7): remove string[] support
  79. const ignore = Array.isArray(options?.ignore) ? options?.ignore.join('') : options?.ignore;
  80. return this.addStandardValidation(validator.isAlpha, locale, { ...options, ignore });
  81. }
  82. isAlphanumeric(locale, options) {
  83. return this.addStandardValidation(validator.isAlphanumeric, locale, options);
  84. }
  85. isAscii() {
  86. return this.addStandardValidation(validator.isAscii);
  87. }
  88. isBase32(options) {
  89. return this.addStandardValidation(validator.isBase32, options);
  90. }
  91. isBase58() {
  92. return this.addStandardValidation(validator.isBase58);
  93. }
  94. isBase64(options) {
  95. return this.addStandardValidation(validator.isBase64, options);
  96. }
  97. isBefore(date) {
  98. return this.addStandardValidation(validator.isBefore, date);
  99. }
  100. isBIC() {
  101. return this.addStandardValidation(validator.isBIC);
  102. }
  103. /**
  104. * There are basically three levels of strictness for this validator.
  105. * Passing `{ strict: true }` as option only passes the validation if the value is a JS bool. (It also overrides the loose property of the options).
  106. * Passing `{ loose: true|false }` along with no `strict` prop of with `strict` falsy follows the behaviour specified in validator.js docs.
  107. */
  108. isBoolean(options) {
  109. if (options?.strict) {
  110. return this.custom(value => {
  111. return value === true || value === false;
  112. });
  113. }
  114. return this.addStandardValidation(validator.isBoolean, options);
  115. }
  116. isBtcAddress() {
  117. return this.addStandardValidation(validator.isBtcAddress);
  118. }
  119. isByteLength(options) {
  120. return this.addStandardValidation(validator.isByteLength, options);
  121. }
  122. isCreditCard() {
  123. return this.addStandardValidation(validator.isCreditCard);
  124. }
  125. isCurrency(options) {
  126. return this.addStandardValidation(validator.isCurrency, options);
  127. }
  128. isDataURI() {
  129. return this.addStandardValidation(validator.isDataURI);
  130. }
  131. isDate(options) {
  132. return this.addStandardValidation(validator.isDate, options);
  133. }
  134. isDecimal(options) {
  135. return this.addStandardValidation(validator.isDecimal, options);
  136. }
  137. isDivisibleBy(number) {
  138. return this.addStandardValidation(validator.isDivisibleBy, number);
  139. }
  140. isEAN() {
  141. return this.addStandardValidation(validator.isEAN);
  142. }
  143. isEmail(options) {
  144. return this.addStandardValidation(validator.isEmail, options);
  145. }
  146. isEmpty(options) {
  147. return this.addStandardValidation(validator.isEmpty, options);
  148. }
  149. isEthereumAddress() {
  150. return this.addStandardValidation(validator.isEthereumAddress);
  151. }
  152. isFQDN(options) {
  153. return this.addStandardValidation(validator.isFQDN, options);
  154. }
  155. isFloat(options) {
  156. return this.addStandardValidation(validator.isFloat, options);
  157. }
  158. isFreightContainerID() {
  159. return this.addStandardValidation(validator.isFreightContainerID);
  160. }
  161. isFullWidth() {
  162. return this.addStandardValidation(validator.isFullWidth);
  163. }
  164. isHalfWidth() {
  165. return this.addStandardValidation(validator.isHalfWidth);
  166. }
  167. isHash(algorithm) {
  168. return this.addStandardValidation(validator.isHash, algorithm);
  169. }
  170. isHexColor() {
  171. return this.addStandardValidation(validator.isHexColor);
  172. }
  173. isHexadecimal() {
  174. return this.addStandardValidation(validator.isHexadecimal);
  175. }
  176. isHSL() {
  177. return this.addStandardValidation(validator.isHSL);
  178. }
  179. isIBAN(options) {
  180. return this.addStandardValidation(validator.isIBAN, options);
  181. }
  182. isIdentityCard(locale) {
  183. return this.addStandardValidation(validator.isIdentityCard, locale);
  184. }
  185. isIMEI(options) {
  186. return this.addStandardValidation(validator.isIMEI, options);
  187. }
  188. isIP(version) {
  189. return this.addStandardValidation(validator.isIP, version);
  190. }
  191. isIPRange(version) {
  192. return this.addStandardValidation(validator.isIPRange, version);
  193. }
  194. isISBN(versionOrOptions) {
  195. return this.addStandardValidation(validator.isISBN, versionOrOptions);
  196. }
  197. isISSN(options) {
  198. return this.addStandardValidation(validator.isISSN, options);
  199. }
  200. isISIN() {
  201. return this.addStandardValidation(validator.isISIN);
  202. }
  203. isISO6346() {
  204. return this.addStandardValidation(validator.isISO6346);
  205. }
  206. isISO6391() {
  207. return this.addStandardValidation(validator.isISO6391);
  208. }
  209. isISO8601(options) {
  210. return this.addStandardValidation(validator.isISO8601, options);
  211. }
  212. isISO31661Numeric() {
  213. return this.addStandardValidation(validator.isISO31661Numeric);
  214. }
  215. isISO31661Alpha2() {
  216. return this.addStandardValidation(validator.isISO31661Alpha2);
  217. }
  218. isISO31661Alpha3() {
  219. return this.addStandardValidation(validator.isISO31661Alpha3);
  220. }
  221. isISO4217() {
  222. return this.addStandardValidation(validator.isISO4217);
  223. }
  224. isISO15924() {
  225. return this.addStandardValidation(validator.isISO15924);
  226. }
  227. isISRC() {
  228. return this.addStandardValidation(validator.isISRC);
  229. }
  230. isIn(values) {
  231. return this.addStandardValidation(validator.isIn, values);
  232. }
  233. isInt(options) {
  234. return this.addStandardValidation(validator.isInt, options);
  235. }
  236. isJSON(options) {
  237. return this.addStandardValidation(validator.isJSON, options);
  238. }
  239. isJWT() {
  240. return this.addStandardValidation(validator.isJWT);
  241. }
  242. isLatLong(options) {
  243. return this.addStandardValidation(validator.isLatLong, options);
  244. }
  245. isLength(options) {
  246. return this.addStandardValidation(validator.isLength, options);
  247. }
  248. isLicensePlate(locale) {
  249. return this.addStandardValidation(validator.isLicensePlate, locale);
  250. }
  251. isLocale() {
  252. return this.addStandardValidation(validator.isLocale);
  253. }
  254. isLowercase() {
  255. return this.addStandardValidation(validator.isLowercase);
  256. }
  257. isLuhnNumber() {
  258. return this.addStandardValidation(validator.isLuhnNumber);
  259. }
  260. isMagnetURI() {
  261. return this.addStandardValidation(validator.isMagnetURI);
  262. }
  263. isMailtoURI(options) {
  264. return this.addStandardValidation(validator.isMailtoURI, options);
  265. }
  266. isMACAddress(options) {
  267. return this.addStandardValidation(validator.isMACAddress, options);
  268. }
  269. isMD5() {
  270. return this.addStandardValidation(validator.isMD5);
  271. }
  272. isMimeType() {
  273. return this.addStandardValidation(validator.isMimeType);
  274. }
  275. isMobilePhone(locale, options) {
  276. return this.addStandardValidation(validator.isMobilePhone, locale, options);
  277. }
  278. isMongoId() {
  279. return this.addStandardValidation(validator.isMongoId);
  280. }
  281. isMultibyte() {
  282. return this.addStandardValidation(validator.isMultibyte);
  283. }
  284. isNumeric(options) {
  285. return this.addStandardValidation(validator.isNumeric, options);
  286. }
  287. isOctal() {
  288. return this.addStandardValidation(validator.isOctal);
  289. }
  290. isPassportNumber(countryCode) {
  291. return this.addStandardValidation(validator.isPassportNumber, countryCode);
  292. }
  293. isPort() {
  294. return this.addStandardValidation(validator.isPort);
  295. }
  296. isPostalCode(locale) {
  297. return this.addStandardValidation(validator.isPostalCode, locale);
  298. }
  299. isRFC3339() {
  300. return this.addStandardValidation(validator.isRFC3339);
  301. }
  302. isRgbColor(includePercentValues) {
  303. return this.addStandardValidation(validator.isRgbColor, includePercentValues);
  304. }
  305. isSemVer() {
  306. return this.addStandardValidation(validator.isSemVer);
  307. }
  308. isSlug() {
  309. return this.addStandardValidation(validator.isSlug);
  310. }
  311. isStrongPassword(options) {
  312. return this.addStandardValidation(validator.isStrongPassword, options);
  313. }
  314. isSurrogatePair() {
  315. return this.addStandardValidation(validator.isSurrogatePair);
  316. }
  317. isTaxID(locale) {
  318. return this.addStandardValidation(validator.isTaxID, locale);
  319. }
  320. isTime(options) {
  321. return this.addStandardValidation(validator.isTime, options);
  322. }
  323. isURL(options) {
  324. return this.addStandardValidation(validator.isURL, options);
  325. }
  326. isULID() {
  327. return this.addStandardValidation(validator.isULID);
  328. }
  329. isUUID(version) {
  330. return this.addStandardValidation(validator.isUUID, version);
  331. }
  332. isUppercase() {
  333. return this.addStandardValidation(validator.isUppercase);
  334. }
  335. isVariableWidth() {
  336. return this.addStandardValidation(validator.isVariableWidth);
  337. }
  338. isVAT(countryCode) {
  339. return this.addStandardValidation(validator.isVAT, countryCode);
  340. }
  341. isWhitelisted(chars) {
  342. return this.addStandardValidation(validator.isWhitelisted, chars);
  343. }
  344. matches(pattern, modifiers) {
  345. return this.addStandardValidation.apply(this, [
  346. validator.matches,
  347. ...(typeof pattern === 'string'
  348. ? [pattern, modifiers]
  349. : [pattern.source, [...new Set((modifiers || '') + pattern.flags)].join('')]),
  350. ]);
  351. }
  352. }
  353. exports.ValidatorsImpl = ValidatorsImpl;