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))