|
1 | | -/* @flow */ |
2 | | -import * as Checks from "./checks"; |
3 | | -import * as Resolvers from "./resolvers"; |
| 1 | +import * as Resolvers from './resolvers'; |
| 2 | +import { |
| 3 | + Variable, |
| 4 | + Wildcard, |
| 5 | + HeadTail, |
| 6 | + Capture, |
| 7 | + Type, |
| 8 | + StartsWith, |
| 9 | + Bound, |
| 10 | + BitStringMatch, |
| 11 | +} from './types'; |
| 12 | + |
| 13 | +const patternMap = new Map(); |
| 14 | +patternMap.set(Variable.prototype, Resolvers.resolveVariable); |
| 15 | +patternMap.set(Wildcard.prototype, Resolvers.resolveWildcard); |
| 16 | +patternMap.set(HeadTail.prototype, Resolvers.resolveHeadTail); |
| 17 | +patternMap.set(StartsWith.prototype, Resolvers.resolveStartsWith); |
| 18 | +patternMap.set(Capture.prototype, Resolvers.resolveCapture); |
| 19 | +patternMap.set(Bound.prototype, Resolvers.resolveBound); |
| 20 | +patternMap.set(Type.prototype, Resolvers.resolveType); |
| 21 | +patternMap.set(BitStringMatch.prototype, Resolvers.resolveBitString); |
| 22 | +patternMap.set(Number.prototype, Resolvers.resolveNumber); |
| 23 | +patternMap.set(Symbol.prototype, Resolvers.resolveSymbol); |
| 24 | +patternMap.set(Array.prototype, Resolvers.resolveArray); |
| 25 | +patternMap.set(String.prototype, Resolvers.resolveString); |
| 26 | +patternMap.set(Boolean.prototype, Resolvers.resolveBoolean); |
| 27 | +patternMap.set(Object.prototype, Resolvers.resolveObject); |
4 | 28 |
|
5 | 29 | export function buildMatch(pattern) { |
6 | | - |
7 | | - if(Checks.is_variable(pattern)){ |
8 | | - return Resolvers.resolveVariable(pattern); |
9 | | - } |
10 | | - |
11 | | - if(Checks.is_wildcard(pattern)){ |
12 | | - return Resolvers.resolveWildcard(pattern); |
| 30 | + if (pattern === null) { |
| 31 | + return Resolvers.resolveNull(pattern); |
13 | 32 | } |
14 | 33 |
|
15 | | - if(Checks.is_undefined(pattern)){ |
| 34 | + if (typeof pattern === 'undefined') { |
16 | 35 | return Resolvers.resolveWildcard(pattern); |
17 | 36 | } |
18 | 37 |
|
19 | | - if(Checks.is_headTail(pattern)){ |
20 | | - return Resolvers.resolveHeadTail(pattern); |
21 | | - } |
22 | | - |
23 | | - if(Checks.is_startsWith(pattern)){ |
24 | | - return Resolvers.resolveStartsWith(pattern); |
25 | | - } |
26 | | - |
27 | | - if(Checks.is_capture(pattern)){ |
28 | | - return Resolvers.resolveCapture(pattern); |
29 | | - } |
30 | | - |
31 | | - if(Checks.is_bound(pattern)){ |
32 | | - return Resolvers.resolveBound(pattern); |
33 | | - } |
34 | | - |
35 | | - if(Checks.is_type(pattern)){ |
36 | | - return Resolvers.resolveType(pattern); |
37 | | - } |
38 | | - |
39 | | - if(Checks.is_array(pattern)){ |
40 | | - return Resolvers.resolveArray(pattern); |
41 | | - } |
42 | | - |
43 | | - if(Checks.is_number(pattern)){ |
44 | | - return Resolvers.resolveNumber(pattern); |
45 | | - } |
46 | | - |
47 | | - if(Checks.is_string(pattern)){ |
48 | | - return Resolvers.resolveString(pattern); |
49 | | - } |
50 | | - |
51 | | - if(Checks.is_boolean(pattern)){ |
52 | | - return Resolvers.resolveBoolean(pattern); |
53 | | - } |
54 | | - |
55 | | - if(Checks.is_symbol(pattern)){ |
56 | | - return Resolvers.resolveSymbol(pattern); |
57 | | - } |
58 | | - |
59 | | - if(Checks.is_null(pattern)){ |
60 | | - return Resolvers.resolveNull(pattern); |
61 | | - } |
62 | | - |
63 | | - if(Checks.is_bitstring(pattern)){ |
64 | | - return Resolvers.resolveBitString(pattern); |
65 | | - } |
| 38 | + const type = pattern.constructor.prototype; |
| 39 | + const resolver = patternMap.get(type); |
66 | 40 |
|
67 | | - if(Checks.is_object(pattern)){ |
68 | | - return Resolvers.resolveObject(pattern); |
| 41 | + if (resolver) { |
| 42 | + return resolver(pattern); |
69 | 43 | } |
70 | 44 |
|
71 | 45 | return Resolvers.resolveNoMatch(); |
|
0 commit comments