From 57ef84ad3b373318668da38ece0413c9008f7cc0 Mon Sep 17 00:00:00 2001 From: Julien Fontanet Date: Mon, 5 Feb 2018 15:34:55 +0100 Subject: [PATCH] feat(value-matcher): add __and operator (#43) --- packages/value-matcher/src/index.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/packages/value-matcher/src/index.js b/packages/value-matcher/src/index.js index 541c440fb..85d4a6e77 100644 --- a/packages/value-matcher/src/index.js +++ b/packages/value-matcher/src/index.js @@ -3,6 +3,9 @@ // eslint-disable-next-line no-use-before-define export type Pattern = OrPattern | NotPattern | ObjectPattern | ArrayPattern | ValuePattern +// all patterns must match +type AndPattern = {| __and: Array |} + // one of the pattern must match type OrPattern = {| __or: Array |} @@ -32,6 +35,10 @@ const match = (pattern: Pattern, value: any) => { if (length === 1) { const [ key ] = keys + if (key === '__and') { + const andPattern: AndPattern = (pattern: any) + return andPattern.__and.every(subpattern => match(subpattern, value)) + } if (key === '__or') { const orPattern: OrPattern = (pattern: any) return orPattern.__or.some(subpattern => match(subpattern, value))