diff --git a/packages/validate/src/isValidatorApplied.js b/packages/validate/src/isValidatorApplied.js new file mode 100644 index 000000000..326fa5e18 --- /dev/null +++ b/packages/validate/src/isValidatorApplied.js @@ -0,0 +1,18 @@ +/** + * TODO: refactor validators to classes, putting needed meta info on instance. + * Note that direct function comparison (Validator[0] === minDate) doesn't work when code + * is transpiled + * @param {String} name - a name like minDate, maxDate, minMaxDate + * @param {Function} fn - the validator function to execute provided in [fn, param, config] + * @param {Function} requiredSignature - arguments needed to execute fn without failing + * @returns {Boolean} - whether the validator (name) is applied + */ +export function isValidatorApplied(name, fn, requiredSignature) { + let result; + try { + result = Object.keys(fn(new Date(), requiredSignature))[0] === name; + } catch (e) { + result = false; + } + return result; +} diff --git a/packages/validate/test/isValidatorApplied.test.js b/packages/validate/test/isValidatorApplied.test.js new file mode 100644 index 000000000..08a3408c0 --- /dev/null +++ b/packages/validate/test/isValidatorApplied.test.js @@ -0,0 +1,15 @@ +import { expect } from '@open-wc/testing'; +import { isValidatorApplied } from '../src/isValidatorApplied.js'; + +describe('isValidatorApplied', () => { + it(`checks if validator (provided name string) is applied`, async () => { + const myValFn = (val, param) => ({ myValFn: param === 'x' }); + const myOtherValFn = (val, param) => ({ myOtherValFn: param === 'x' }); + + expect(isValidatorApplied('myValFn', myValFn, 'x')).to.equal(true); + expect(isValidatorApplied('myValFn', myValFn, 'y')).to.equal(true); + + expect(isValidatorApplied('myValFn', myOtherValFn, 'x')).to.equal(false); + expect(isValidatorApplied('myValFn', myOtherValFn, 'y')).to.equal(false); + }); +});