Skip to content

Commit

Permalink
feat(isAfter): allow usage of options object (#2075)
Browse files Browse the repository at this point in the history
* refactor: change test files to prepare for #1874

* feat(isAfter): allow usage of options object

* refactor: improve comparisonDate

* refactor: undo breaking change to toDate
  • Loading branch information
WikiRik committed Jan 29, 2023
1 parent b2a999d commit 753c29d
Show file tree
Hide file tree
Showing 5 changed files with 70 additions and 31 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ Validator | Description
--------------------------------------- | --------------------------------------
**contains(str, seed [, options])** | check if the string contains the seed.<br/><br/>`options` is an object that defaults to `{ ignoreCase: false, minOccurrences: 1 }`.<br />Options: <br/> `ignoreCase`: Ignore case when doing comparison, default false.<br/>`minOccurences`: Minimum number of occurrences for the seed in the string. Defaults to 1.
**equals(str, comparison)** | check if the string matches the comparison.
**isAfter(str [, date])** | check if the string is a date that is after the specified date (defaults to now).
**isAfter(str [, options])** | check if the string is a date that is after the specified date.<br/><br/>`options` is an object that defaults to `{ comparisonDate: Date().toString() }`.<br/>**Options:**<br/>`comparisonDate`: Date to compare to. Defaults to `Date().toString()` (now).
**isAlpha(str [, locale, options])** | check if the string contains only letters (a-zA-Z).<br/><br/>`locale` is one of `['ar', 'ar-AE', 'ar-BH', 'ar-DZ', 'ar-EG', 'ar-IQ', 'ar-JO', 'ar-KW', 'ar-LB', 'ar-LY', 'ar-MA', 'ar-QA', 'ar-QM', 'ar-SA', 'ar-SD', 'ar-SY', 'ar-TN', 'ar-YE', 'bg-BG', 'bn', 'cs-CZ', 'da-DK', 'de-DE', 'el-GR', 'en-AU', 'en-GB', 'en-HK', 'en-IN', 'en-NZ', 'en-US', 'en-ZA', 'en-ZM', 'es-ES', 'fa-IR', 'fi-FI', 'fr-CA', 'fr-FR', 'he', 'hi-IN', 'hu-HU', 'it-IT', 'ko-KR', 'ja-JP', 'ku-IQ', 'nb-NO', 'nl-NL', 'nn-NO', 'pl-PL', 'pt-BR', 'pt-PT', 'ru-RU', 'si-LK', 'sl-SI', 'sk-SK', 'sr-RS', 'sr-RS@latin', 'sv-SE', 'tr-TR', 'uk-UA']` and defaults to `en-US`. Locale list is `validator.isAlphaLocales`. `options` is an optional object that can be supplied with the following key(s): `ignore` which can either be a String or RegExp of characters to be ignored e.g. " -" will ignore spaces and -'s.
**isAlphanumeric(str [, locale, options])** | check if the string contains only letters and numbers (a-zA-Z0-9).<br/><br/>`locale` is one of `['ar', 'ar-AE', 'ar-BH', 'ar-DZ', 'ar-EG', 'ar-IQ', 'ar-JO', 'ar-KW', 'ar-LB', 'ar-LY', 'ar-MA', 'ar-QA', 'ar-QM', 'ar-SA', 'ar-SD', 'ar-SY', 'ar-TN', 'ar-YE', 'bn', 'bg-BG', 'cs-CZ', 'da-DK', 'de-DE', 'el-GR', 'en-AU', 'en-GB', 'en-HK', 'en-IN', 'en-NZ', 'en-US', 'en-ZA', 'en-ZM', 'es-ES', 'fa-IR', 'fi-FI', 'fr-CA', 'fr-FR', 'he', 'hi-IN', 'hu-HU', 'it-IT', 'ko-KR', 'ja-JP','ku-IQ', 'nb-NO', 'nl-NL', 'nn-NO', 'pl-PL', 'pt-BR', 'pt-PT', 'ru-RU', 'si-LK', 'sl-SI', 'sk-SK', 'sr-RS', 'sr-RS@latin', 'sv-SE', 'tr-TR', 'uk-UA']`) and defaults to `en-US`. Locale list is `validator.isAlphanumericLocales`. `options` is an optional object that can be supplied with the following key(s): `ignore` which can either be a String or RegExp of characters to be ignored e.g. " -" will ignore spaces and -'s.
**isAscii(str)** | check if the string contains ASCII chars only.
Expand Down
12 changes: 7 additions & 5 deletions src/lib/isAfter.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
import assertString from './util/assertString';
import toDate from './toDate';

export default function isAfter(str, date = String(new Date())) {
assertString(str);
const comparison = toDate(date);
const original = toDate(str);
export default function isAfter(date, options) {
// For backwards compatibility:
// isAfter(str [, date]), i.e. `options` could be used as argument for the legacy `date`
const comparisonDate = options?.comparisonDate || options || Date().toString();

const comparison = toDate(comparisonDate);
const original = toDate(date);
return !!(original && comparison && original > comparison);
}
1 change: 1 addition & 0 deletions src/lib/toDate.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import assertString from './util/assertString';

export default function toDate(date) {
assertString(date);

date = Date.parse(date);
return !isNaN(date) ? new Date(date) : null;
}
25 changes: 0 additions & 25 deletions test/validators.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -4995,31 +4995,6 @@ describe('Validators', () => {
});
});

it('should validate dates against a start date', () => {
test({
validator: 'isAfter',
args: ['2011-08-03'],
valid: ['2011-08-04', new Date(2011, 8, 10).toString()],
invalid: ['2010-07-02', '2011-08-03', new Date(0).toString(), 'foo'],
});
test({
validator: 'isAfter',
valid: ['2100-08-04', new Date(Date.now() + 86400000).toString()],
invalid: ['2010-07-02', new Date(0).toString()],
});
test({
validator: 'isAfter',
args: ['2011-08-03'],
valid: ['2015-09-17'],
invalid: ['invalid date'],
});
test({
validator: 'isAfter',
args: ['invalid date'],
invalid: ['invalid date', '2015-09-17'],
});
});

it('should validate dates against an end date', () => {
test({
validator: 'isBefore',
Expand Down
61 changes: 61 additions & 0 deletions test/validators/isAfter.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
import test from '../testFunctions';

describe('isAfter', () => {
it('should validate dates against a start date', () => {
test({
validator: 'isAfter',
args: [{ comparisonDate: '2011-08-03' }],
valid: ['2011-08-04', new Date(2011, 8, 10).toString()],
invalid: ['2010-07-02', '2011-08-03', new Date(0).toString(), 'foo'],
});

test({
validator: 'isAfter',
valid: ['2100-08-04', new Date(Date.now() + 86400000).toString()],
invalid: ['2010-07-02', new Date(0).toString()],
});

test({
validator: 'isAfter',
args: [{ comparisonDate: '2011-08-03' }],
valid: ['2015-09-17'],
invalid: ['invalid date'],
});

test({
validator: 'isAfter',
args: [{ comparisonDate: 'invalid date' }],
invalid: ['invalid date', '2015-09-17'],
});
});

describe('(legacy syntax)', () => {
it('should validate dates against a start date', () => {
test({
validator: 'isAfter',
args: ['2011-08-03'],
valid: ['2011-08-04', new Date(2011, 8, 10).toString()],
invalid: ['2010-07-02', '2011-08-03', new Date(0).toString(), 'foo'],
});

test({
validator: 'isAfter',
valid: ['2100-08-04', new Date(Date.now() + 86400000).toString()],
invalid: ['2010-07-02', new Date(0).toString()],
});

test({
validator: 'isAfter',
args: ['2011-08-03'],
valid: ['2015-09-17'],
invalid: ['invalid date'],
});

test({
validator: 'isAfter',
args: ['invalid date'],
invalid: ['invalid date', '2015-09-17'],
});
});
});
});

0 comments on commit 753c29d

Please sign in to comment.