Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 8x 8x 1x 1x 1x 1x 1x 1x 1x 1x 1x 30x 6x 6x 24x 24x 30x 4x 4x 4x 20x 20x 1x 1x 1x 1x 1x 1x 1x 1x 1x 22x 7x 7x 15x 15x | export const CORRECTION_LEVEL_L = 1
export const CORRECTION_LEVEL_M = 0
export const CORRECTION_LEVEL_Q = 3
export const CORRECTION_LEVEL_H = 2
const correctionLevelNames = ['Medium', 'Low', 'High', 'Quartile']
/** @type {Record<string, { bit: number, name: string }>} */
const correctionLevelMap = correctionLevelNames.reduce((acc, name, bit) => {
const result = { bit, name }
return { ...acc, [name.toUpperCase()]: result, [name[0]]: result }
}, {})
/**
* Get error correction level from string
* @param {string} string - correction level text
* @throws error on invalid correction level
* @returns {{ bit: number, name: string }} correction level object
*/
export function fromString (string) {
if (typeof string !== 'string') {
throw new Error(`expected string instead of ${typeof string}`)
}
const result = correctionLevelMap[string.toUpperCase()]
if (!result) {
const validKeys = [1, 0, 3, 2].flatMap(idx => [correctionLevelNames[idx][0], correctionLevelNames[idx]]).map(name => `"${name}"`).join(', ')
throw new Error(`Unknown Error Correction Level: "${string}" expected one of the following values (case insensitive): ${validKeys}`)
}
return result
}
/**
* Checks if error correction level is valid.
*
* Error correction is valid if `string` is one of the following values (case insensitive): `L`,`Low`,`M`,`Medium`,`Q`,`Quartile`,`H` and `High`
* @param {string} string - target string
* @returns {boolean} true if correction level is valid, false otherwise
*/
export function isValid (string) {
if (typeof string !== 'string') {
return false
}
return Object.hasOwn(correctionLevelMap, string.toUpperCase())
}
|