Skip to content

Commit

Permalink
refactor: use validator.js specific imports (#13)
Browse files Browse the repository at this point in the history
* refactor: use validator.js specific imports

* fix: isAlphanumeric import casing error

* fix: failing test
  • Loading branch information
Julien-R44 committed Jul 25, 2023
1 parent 42887b9 commit 459f3e5
Show file tree
Hide file tree
Showing 4 changed files with 63 additions and 24 deletions.
7 changes: 4 additions & 3 deletions src/schema/string/rules.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@
* file that was distributed with this source code.
*/

import validator from 'validator'
import normalizeEmail from 'validator/lib/normalizeEmail.js'
import escape from 'validator/lib/escape.js'
import type { FieldContext } from '@vinejs/compiler/types'

import { helpers } from '../../vine/helpers.js'
Expand Down Expand Up @@ -358,7 +359,7 @@ export const normalizeEmailRule = createRule<NormalizeEmailOptions | undefined>(
return
}

field.mutate(validator.default.normalizeEmail(value as string, options), field)
field.mutate(normalizeEmail.default(value as string, options), field)
}
)

Expand Down Expand Up @@ -407,7 +408,7 @@ export const escapeRule = createRule((value, _, field) => {
return
}

field.mutate(validator.default.escape(value as string), field)
field.mutate(escape.default(value as string), field)
})

/**
Expand Down
3 changes: 2 additions & 1 deletion src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import type { IsURLOptions } from 'validator/lib/isURL.js'
import type { IsEmailOptions } from 'validator/lib/isEmail.js'
import type { NormalizeEmailOptions } from 'validator/lib/normalizeEmail.js'
import type { IsMobilePhoneOptions, MobilePhoneLocale } from 'validator/lib/isMobilePhone.js'
import type { PostalCodeLocale } from 'validator/lib/isPostalCode.js'

import type { helpers } from './vine/helpers.js'
import type { ValidationError } from './errors/validation_error.js'
Expand Down Expand Up @@ -64,7 +65,7 @@ export type PassportOptions = {
* Options accepted by the postal code validation
*/
export type PostalCodeOptions = {
countryCode: (typeof helpers)['postalCountryCodes'][number][]
countryCode: PostalCodeLocale[]
}

/**
Expand Down
61 changes: 41 additions & 20 deletions src/vine/helpers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,28 @@
* file that was distributed with this source code.
*/

import validator from 'validator'
import isEmail from 'validator/lib/isEmail.js'
import isURL from 'validator/lib/isURL.js'
import isAlpha from 'validator/lib/isAlpha.js'
import isAlphanumeric from 'validator/lib/isAlphanumeric.js'
import isIP from 'validator/lib/isIP.js'
import isUUID from 'validator/lib/isUUID.js'
import isAscii from 'validator/lib/isAscii.js'
import isCreditCard from 'validator/lib/isCreditCard.js'
import isIBAN from 'validator/lib/isIBAN.js'
import isJWT from 'validator/lib/isJWT.js'
import isLatLong from 'validator/lib/isLatLong.js'
import isPassportNumber from 'validator/lib/isPassportNumber.js'
import isSlug from 'validator/lib/isSlug.js'
import isDecimal from 'validator/lib/isDecimal.js'
import isHexColor from 'validator/lib/isHexColor.js'
import isMobilePhone, { type MobilePhoneLocale } from 'validator/lib/isMobilePhone.js'
import isPostalCode, { type PostalCodeLocale } from 'validator/lib/isPostalCode.js'
// @ts-ignore type missing from @types/validator
import { locales as mobilePhoneLocales } from 'validator/lib/isMobilePhone.js'
// @ts-ignore type missing from @types/validator
import { locales as postalCodeLocales } from 'validator/lib/isPostalCode.js'

import { resolve4, resolve6 } from 'node:dns/promises'

const BOOLEAN_POSITIVES = ['1', 1, 'true', true, 'on']
Expand Down Expand Up @@ -128,24 +149,24 @@ export const helpers = {
return null
},

isEmail: validator.default.isEmail,
isURL: validator.default.isURL,
isAlpha: validator.default.isAlpha,
isAlphaNumeric: validator.default.isAlphanumeric,
isIP: validator.default.isIP,
isUUID: validator.default.isUUID,
isAscii: validator.default.isAscii,
isCreditCard: validator.default.isCreditCard,
isIBAN: validator.default.isIBAN,
isJWT: validator.default.isJWT,
isLatLong: validator.default.isLatLong,
isMobilePhone: validator.default.isMobilePhone,
isPassportNumber: validator.default.isPassportNumber,
isPostalCode: validator.default.isPostalCode,
isSlug: validator.default.isSlug,
isDecimal: validator.default.isDecimal,
mobileLocales: validator.default.isMobilePhoneLocales,
postalCountryCodes: validator.default.isPostalCodeLocales,
isEmail: isEmail.default,
isURL: isURL.default,
isAlpha: isAlpha.default,
isAlphaNumeric: isAlphanumeric.default,
isIP: isIP.default,
isUUID: isUUID.default,
isAscii: isAscii.default,
isCreditCard: isCreditCard.default,
isIBAN: isIBAN.default,
isJWT: isJWT.default,
isLatLong: isLatLong.default,
isMobilePhone: isMobilePhone.default,
isPassportNumber: isPassportNumber.default,
isPostalCode: isPostalCode.default,
isSlug: isSlug.default,
isDecimal: isDecimal.default,
mobileLocales: mobilePhoneLocales as MobilePhoneLocale[],
postalCountryCodes: postalCodeLocales as PostalCodeLocale[],
passportCountryCodes: [
'AM',
'AR',
Expand Down Expand Up @@ -213,7 +234,7 @@ export const helpers = {
if (!value.startsWith('#')) {
return false
}
return validator.default.isHexColor(value)
return isHexColor.default(value)
},

/**
Expand Down
16 changes: 16 additions & 0 deletions tests/unit/helpers.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -144,4 +144,20 @@ test.group('Vine Helpers', () => {
.run(async ({ assert }, { url, result }) => {
assert.equal(await vine.helpers.isActiveURL(url), result)
})

test('mobileLocales contains the list of mobile locales', ({ assert }) => {
const codes = vine.helpers.mobileLocales
assert.containsSubset(codes, ['fr-FR', 'en-GB', 'de-DE'])
})

test('postalCountryCodes contains the list of postal country codes', ({ assert }) => {
const codes = vine.helpers.postalCountryCodes
assert.containsSubset(codes, ['FR', 'GB', 'IT'])
})

test('validator.js functions are working', ({ assert }) => {
assert.isTrue(vine.helpers.isSlug('hello-world'))
assert.isTrue(vine.helpers.isPostalCode('69200', 'FR'))
assert.isTrue(vine.helpers.isMobilePhone('0612345678', 'fr-FR'))
})
})

0 comments on commit 459f3e5

Please sign in to comment.