diff --git a/src/index.js b/src/index.js index 7b931fe..f7c1f91 100644 --- a/src/index.js +++ b/src/index.js @@ -1,47 +1,87 @@ /* eslint-disable global-require */ +// @ts-check +import accessibleEmoji from './rules/accessible-emoji'; +import altText from './rules/alt-text'; +import anchorAmbiguousText from './rules/anchor-ambiguous-text'; +import anchorHasContent from './rules/anchor-has-content'; +import anchorIsValid from './rules/anchor-is-valid'; +import ariaActivedescendantHasTabindex from './rules/aria-activedescendant-has-tabindex'; +import ariaProps from './rules/aria-props'; +import ariaProptypes from './rules/aria-proptypes'; +import ariaRole from './rules/aria-role'; +import ariaUnsupportedElements from './rules/aria-unsupported-elements'; +import autocompleteValid from './rules/autocomplete-valid'; +import clickEventsHaveKeyEvents from './rules/click-events-have-key-events'; +import controlHasAssociatedLabel from './rules/control-has-associated-label'; +import headingHasContent from './rules/heading-has-content'; +import htmlHasLang from './rules/html-has-lang'; +import iframeHasTitle from './rules/iframe-has-title'; +import imgRedundantAlt from './rules/img-redundant-alt'; +import interactiveSupportsFocus from './rules/interactive-supports-focus'; +import labelHasAssociatedControl from './rules/label-has-associated-control'; +import labelHasFor from './rules/label-has-for'; +import lang from './rules/lang'; +import mediaHasCaption from './rules/media-has-caption'; +import mouseEventsHaveKeyEvents from './rules/mouse-events-have-key-events'; +import noAriaHiddenOnFocusable from './rules/no-aria-hidden-on-focusable'; +import noAccessKey from './rules/no-access-key'; +import noAutofocus from './rules/no-autofocus'; +import noDistractingElements from './rules/no-distracting-elements'; +import noInteractiveElementToNoninteractiveRole from './rules/no-interactive-element-to-noninteractive-role'; +import noNoninteractiveElementInteractions from './rules/no-noninteractive-element-interactions'; +import noNoninteractiveElementToInteractiveRole from './rules/no-noninteractive-element-to-interactive-role'; +import noNoninteractiveTabindex from './rules/no-noninteractive-tabindex'; +import noOnChange from './rules/no-onchange'; +import noRedundantRoles from './rules/no-redundant-roles'; +import noStaticElementInteractions from './rules/no-static-element-interactions'; +import preferTagOverRole from './rules/prefer-tag-over-role'; +import roleHasRequiredAriaProps from './rules/role-has-required-aria-props'; +import roleSupportsAriaProps from './rules/role-supports-aria-props'; +import scope from './rules/scope'; +import tabindexNoPositive from './rules/tabindex-no-positive'; module.exports = { - rules: { - 'accessible-emoji': require('./rules/accessible-emoji'), - 'alt-text': require('./rules/alt-text'), - 'anchor-ambiguous-text': require('./rules/anchor-ambiguous-text'), - 'anchor-has-content': require('./rules/anchor-has-content'), - 'anchor-is-valid': require('./rules/anchor-is-valid'), - 'aria-activedescendant-has-tabindex': require('./rules/aria-activedescendant-has-tabindex'), - 'aria-props': require('./rules/aria-props'), - 'aria-proptypes': require('./rules/aria-proptypes'), - 'aria-role': require('./rules/aria-role'), - 'aria-unsupported-elements': require('./rules/aria-unsupported-elements'), - 'autocomplete-valid': require('./rules/autocomplete-valid'), - 'click-events-have-key-events': require('./rules/click-events-have-key-events'), - 'control-has-associated-label': require('./rules/control-has-associated-label'), - 'heading-has-content': require('./rules/heading-has-content'), - 'html-has-lang': require('./rules/html-has-lang'), - 'iframe-has-title': require('./rules/iframe-has-title'), - 'img-redundant-alt': require('./rules/img-redundant-alt'), - 'interactive-supports-focus': require('./rules/interactive-supports-focus'), - 'label-has-associated-control': require('./rules/label-has-associated-control'), - 'label-has-for': require('./rules/label-has-for'), - lang: require('./rules/lang'), - 'media-has-caption': require('./rules/media-has-caption'), - 'mouse-events-have-key-events': require('./rules/mouse-events-have-key-events'), - 'no-access-key': require('./rules/no-access-key'), - 'no-aria-hidden-on-focusable': require('./rules/no-aria-hidden-on-focusable'), - 'no-autofocus': require('./rules/no-autofocus'), - 'no-distracting-elements': require('./rules/no-distracting-elements'), - 'no-interactive-element-to-noninteractive-role': require('./rules/no-interactive-element-to-noninteractive-role'), - 'no-noninteractive-element-interactions': require('./rules/no-noninteractive-element-interactions'), - 'no-noninteractive-element-to-interactive-role': require('./rules/no-noninteractive-element-to-interactive-role'), - 'no-noninteractive-tabindex': require('./rules/no-noninteractive-tabindex'), - 'no-onchange': require('./rules/no-onchange'), - 'no-redundant-roles': require('./rules/no-redundant-roles'), - 'no-static-element-interactions': require('./rules/no-static-element-interactions'), - 'prefer-tag-over-role': require('./rules/prefer-tag-over-role'), - 'role-has-required-aria-props': require('./rules/role-has-required-aria-props'), - 'role-supports-aria-props': require('./rules/role-supports-aria-props'), - scope: require('./rules/scope'), - 'tabindex-no-positive': require('./rules/tabindex-no-positive'), - }, + rules: kebabCase({ + accessibleEmoji, + altText, + anchorAmbiguousText, + anchorHasContent, + anchorIsValid, + ariaActivedescendantHasTabindex, + ariaProps, + ariaProptypes, + ariaRole, + ariaUnsupportedElements, + autocompleteValid, + clickEventsHaveKeyEvents, + controlHasAssociatedLabel, + headingHasContent, + htmlHasLang, + iframeHasTitle, + imgRedundantAlt, + interactiveSupportsFocus, + labelHasAssociatedControl, + labelHasFor, + lang, + mediaHasCaption, + mouseEventsHaveKeyEvents, + noAccessKey, + noAriaHiddenOnFocusable, + noAutofocus, + noDistractingElements, + noInteractiveElementToNoninteractiveRole, + noNoninteractiveElementInteractions, + noNoninteractiveElementToInteractiveRole, + noNoninteractiveTabindex, + noOnChange, + noRedundantRoles, + noStaticElementInteractions, + preferTagOverRole, + roleHasRequiredAriaProps, + roleSupportsAriaProps, + scope, + tabindexNoPositive, + }), configs: { recommended: { plugins: [ @@ -294,3 +334,9 @@ module.exports = { }, }, }; + +function kebabCase(obj) { + return Object.fromEntries( + Object.entries(obj).map(([key, value]) => [key.replace(/([A-Z])/g, '-$1').toLowerCase(), value]) + ) +} \ No newline at end of file