Для работы с библиотекой aria-query требуется наличие Node.js. Установка производится через npm:
npm install aria-query
После установки библиотеку можно подключить в проекте:
const { roles, elements } = require('aria-query');
Здесь roles предоставляет информацию о всех ARIA-ролях,
а elements — соответствие HTML-тегов и их
ARIA-атрибутов.
Объект roles является картой (Map) всех
ARIA-ролей. Каждая запись содержит имя роли в качестве ключа и объект с
подробной информацией в качестве значения.
Пример структуры:
console.log(roles.get('button'));
/* Вывод:
{
abstract: false,
baseConcepts: [{ name: 'button', attributes: [] }],
requiredProps: [],
superClass: [...],
props: new Map([...]),
name: null
}
*/
Ключевые свойства:
Библиотека предоставляет карту elements, где ключ —
HTML-тег, а значение — объект с данными о поддерживаемых ARIA-ролях.
Пример структуры объекта для тега <button>:
console.log(elements.get('button'));
/* Вывод:
{
name: null,
roles: new Map([
['button', { required: true, implicit: true }]
])
}
*/
roles — карта ролей, которые могут быть ассоциированы с тегом.
Ключ — имя роли.
Значение — объект с флагами:
Для поиска всех ролей, поддерживаемых конкретным тегом:
const buttonRoles = elements.get('button').roles;
for (const [role, details] of buttonRoles) {
console.log(role, details);
}
Иногда необходимо получить только неабстрактные роли или те, которые могут быть использованы явно. Для этого используется фильтрация:
const explicitRoles = Array.from(roles.entries())
.filter(([roleName, roleData]) => !roleData.abstract)
.map(([roleName]) => roleName);
console.log(explicitRoles.includes('button')); // true
Такой подход позволяет исключить роли, предназначенные только для наследования или внутренних целей спецификации ARIA.
После нахождения роли по тегу, можно получить её доступные свойства и атрибуты:
const buttonRole = roles.get('button');
console.log([...buttonRole.props.keys()]);
// Выводит список всех ARIA-свойств, поддерживаемых ролью button
Эта информация важна для проверки соответствия HTML-элементов требованиям доступности.
Каждая роль хранит массив baseConcepts, который
связывает её с конкретными HTML-тегами и атрибутами:
roles.get('checkbox').baseConcepts.forEach(concept => {
console.log(concept.name, concept.attributes);
});
input).type="checkbox").Это позволяет строить логику проверки ARIA для конкретных HTML-элементов на странице.
Можно проверить, подходит ли роль для конкретного тега:
function canTagHaveRole(tag, role) {
const element = elements.get(tag);
return element?.roles.has(role);
}
console.log(canTagHaveRole('button', 'button')); // true
console.log(canTagHaveRole('div', 'button')); // false
Такой механизм используется при автоматизированной проверке доступности, например в тестах ESLint или инструментов типа axe-core.
roles для проверки свойств роли и
elements для связи с HTML-тегами.baseConcepts для автоматической проверки
корректного использования ARIA-атрибутов.Библиотека aria-query позволяет строить точные модели доступности, опираясь на спецификацию ARIA, и обеспечивает основу для автоматизированного контроля семантики и соответствия стандартам.