1.9.1 • Published 3 months ago

@tadashi/condition v1.9.1

Weekly downloads
-
License
MIT
Repository
github
Last release
3 months ago

Condition

NPM version Node.js CI Coverage Status

Create conditional to validate data.

Install

$ npm i @tadashi/condition

Operators

OperatorAliasSymbolDescription
eq-===Two values are equal
ne-!==Two values are not equal
gt->The first value is greater than the second value
ge->=The first value is greater than or equal to the second value
lt-<The first value is less than the second value
le-<=The first value is less than or equal to the second value
intersection-There is an intersection between two arrays
difference-There is a difference between two arrays
arrayEquals-=Two arrays are equal
belongshas includesThe value belongs belongs to array
regex--The value matches a regular expression pattern
length--The length of a value satisfies a comparison
assigned--The value was assigned

Schema

Condition:
    type: object
    properties:
        join_operator:
            type: string
            enum: [and, or]
            default: and
        args:
            type: array
            items:
                oneOf:
                    - $ref: '#/definitions/ConditionArgument'
                    - $ref: '#/definitions/Condition'
    required:
        - join_operator
        - args

ConditionArgument:
    type: object
    properties:
        field:
            type: string
        operator:
            type: string
        value:
            type: any
            anyOf:
                - type: boolean
                - type: string
                - type: number
                - type: array
        flag:
            type: string
        compare:
            type: string
            enum: [eq, ne, gt, ge, greater, lt, le, less]
        not:
            type: boolean
            default: false
    required:
        - field
        - operator
        - value

definitions:
    Condition:
        $ref: '#/Condition'
    ConditionArgument:
        $ref: '#/ConditionArgument'

Usage

See example below.

import condition, { registerOperator } from '@tadashi/condition'

registerOperator('legalAge', (params) => {
	const {
		fieldValue,
		value: conditionValue,
		// not,
		// flag,
		// compare,
	} = params

	try {
		const today = new Date()
		const externalDate = new Date(fieldValue)
		let age = today.getFullYear() - externalDate.getFullYear()
		const monthDiff = today.getMonth() - externalDate.getMonth()

		if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < externalDate.getDate())) {
			age--
		}

		return age >= conditionValue
	} catch {
		return false
	}
})

const data = {
	user: {
		name: 'Yumi',
		birthday: '1990-12-31',
		gender: 'F',
		issues: 65,
	},
	city: 'São Paulo',
	country: 'Brazil',
	phone: '(11) 988889999',
	hasCar: true,
	colors: ['red', 'blue'],
}

const conditions = [
	{
		join_operator: 'and',
		args: [
			{
				field: 'user.gender',
				operator: 'eq',
				value: 'F',
			},
			{
				field: 'user.birthday',
				operator: 'legalAge',
				value: 21,
			},
			{
				field: 'user.issues',
				operator: 'gt',
				value: 51,
			},
			{
				field: 'phone',
				operator: 'regex',
				value: /\(\d{2}\)\s(\d{8,9})/i,
			},
			{
				join_operator: 'or',
				args: [
					{
						field: 'city',
						operator: 'assigned',
						value: false,
					},
					{
						field: 'country',
						operator: 'intersection',
						value: ['Japan', 'Brazil'],
					},
				],
			},
			{
				field: 'hasCar',
				operator: 'eq',
				value: true,
			},
			{
				field: 'colors',
				operator: 'intersection',
				value: ['blue', 'green', 123],
			},
			{
				field: 'colors',
				operator: 'arrayEquals',
				value: ['red', 'blue'],
			},
		],
	},
]

const isValid = condition(conditions)
isValid(data) // => true

Buy Me a Coffee

BTC: bc1q7famhuj5f25n6qvlm3sssnymk2qpxrfwpyq7g4

License

MIT © Thiago Lagden

1.9.1

3 months ago

1.9.0

5 months ago

1.8.0

1 year ago

1.7.1

1 year ago

1.7.0

1 year ago

1.6.0

1 year ago

1.5.0

2 years ago

1.4.0

2 years ago

1.3.0

2 years ago

1.2.0

3 years ago

1.2.1

3 years ago

1.1.0

3 years ago

1.0.1

4 years ago

1.0.0

4 years ago