|
12 | 12 | 'use strict';
|
13 | 13 |
|
14 | 14 | function normalizeColor(color: string | number): ?number {
|
| 15 | + const matchers = getMatchers(); |
15 | 16 | let match;
|
16 | 17 |
|
17 | 18 | if (typeof color === 'number') {
|
@@ -156,16 +157,23 @@ function call(...args) {
|
156 | 157 | return '\\(\\s*(' + args.join(')\\s*,\\s*(') + ')\\s*\\)';
|
157 | 158 | }
|
158 | 159 |
|
159 |
| -const matchers = { |
160 |
| - rgb: new RegExp('rgb' + call(NUMBER, NUMBER, NUMBER)), |
161 |
| - rgba: new RegExp('rgba' + call(NUMBER, NUMBER, NUMBER, NUMBER)), |
162 |
| - hsl: new RegExp('hsl' + call(NUMBER, PERCENTAGE, PERCENTAGE)), |
163 |
| - hsla: new RegExp('hsla' + call(NUMBER, PERCENTAGE, PERCENTAGE, NUMBER)), |
164 |
| - hex3: /^#([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/, |
165 |
| - hex4: /^#([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/, |
166 |
| - hex6: /^#([0-9a-fA-F]{6})$/, |
167 |
| - hex8: /^#([0-9a-fA-F]{8})$/, |
168 |
| -}; |
| 160 | +let cachedMatchers; |
| 161 | + |
| 162 | +function getMatchers() { |
| 163 | + if (cachedMatchers === undefined) { |
| 164 | + cachedMatchers = { |
| 165 | + rgb: new RegExp('rgb' + call(NUMBER, NUMBER, NUMBER)), |
| 166 | + rgba: new RegExp('rgba' + call(NUMBER, NUMBER, NUMBER, NUMBER)), |
| 167 | + hsl: new RegExp('hsl' + call(NUMBER, PERCENTAGE, PERCENTAGE)), |
| 168 | + hsla: new RegExp('hsla' + call(NUMBER, PERCENTAGE, PERCENTAGE, NUMBER)), |
| 169 | + hex3: /^#([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/, |
| 170 | + hex4: /^#([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/, |
| 171 | + hex6: /^#([0-9a-fA-F]{6})$/, |
| 172 | + hex8: /^#([0-9a-fA-F]{8})$/, |
| 173 | + }; |
| 174 | + } |
| 175 | + return cachedMatchers; |
| 176 | +} |
169 | 177 |
|
170 | 178 | function parse255(str: string): number {
|
171 | 179 | const int = parseInt(str, 10);
|
|
0 commit comments