|
| 1 | +// Function to merge errors for a11y-engine. |
| 2 | +// Handles errors differently for check_errors and other errors. |
| 3 | +// It also adds the target selector to the errors for better identification. |
| 4 | + |
| 5 | +function mergeErrors(mergedErrors, frameErrors, frameSpec) { |
| 6 | + for (const [key, value] of Object.entries(frameErrors)) { |
| 7 | + if (key === 'check_errors') { |
| 8 | + if (!mergedErrors[key]) { |
| 9 | + mergedErrors[key] = {}; |
| 10 | + } |
| 11 | + |
| 12 | + for (const [checkNameKey, checkNameValue] of Object.entries(value)) { |
| 13 | + // Add the target if not present. If present then append parents target. |
| 14 | + checkNameValue.forEach(checkNameValueError => { |
| 15 | + if (!checkNameValueError.target && frameSpec) { |
| 16 | + checkNameValueError.target = frameSpec?.selector; |
| 17 | + } else if (checkNameValueError.target && frameSpec) { |
| 18 | + checkNameValueError.target = [ |
| 19 | + ...frameSpec.selector, |
| 20 | + ...checkNameValueError.target |
| 21 | + ]; |
| 22 | + } |
| 23 | + }); |
| 24 | + if (mergedErrors[key][checkNameKey]) { |
| 25 | + mergedErrors[key][checkNameKey].push(...checkNameValue); |
| 26 | + } else { |
| 27 | + mergedErrors[key][checkNameKey] = Array.isArray(checkNameValue) |
| 28 | + ? [...checkNameValue] |
| 29 | + : [checkNameValue]; |
| 30 | + } |
| 31 | + } |
| 32 | + } else { |
| 33 | + // Add the target if not present. If present then append parents target. |
| 34 | + value.forEach(errorValue => { |
| 35 | + if (!errorValue.target && frameSpec) { |
| 36 | + errorValue.target = frameSpec?.selector; |
| 37 | + } else if (errorValue.target && frameSpec) { |
| 38 | + errorValue.target = [...frameSpec.selector, ...errorValue.target]; |
| 39 | + } |
| 40 | + }); |
| 41 | + if (mergedErrors[key]) { |
| 42 | + mergedErrors[key] = [...mergedErrors[key], ...value]; |
| 43 | + } else { |
| 44 | + mergedErrors[key] = value; |
| 45 | + } |
| 46 | + } |
| 47 | + } |
| 48 | + |
| 49 | + return mergedErrors; |
| 50 | +} |
| 51 | + |
| 52 | +export default mergeErrors; |
0 commit comments