Skip to content

refactor(template-no-abstract-roles): source abstract-role list from aria-query#25

Closed
johanrd wants to merge 1 commit intomasterfrom
refactor/abstract-roles-from-aria-query
Closed

refactor(template-no-abstract-roles): source abstract-role list from aria-query#25
johanrd wants to merge 1 commit intomasterfrom
refactor/abstract-roles-from-aria-query

Conversation

@johanrd
Copy link
Copy Markdown
Owner

@johanrd johanrd commented Apr 21, 2026

Replaces the hand-maintained list of 12 abstract ARIA roles with a derivation from aria-query:

const { roles } = require('aria-query');
const PROHIBITED_ROLE_VALUES = new Set(
  [...roles.keys()].filter((role) => roles.get(role).abstract)
);

aria-query is already a dependency (used by several other rules; introduced consistently via bug fix PRs #9, #11, #14). Future WAI-ARIA additions of abstract roles flow in automatically on aria-query upgrade instead of requiring a hand edit here.

Before/after

Hand list (12 roles): command, composite, input, landmark, range, roletype, section, sectionhead, select, structure, widget, window.

aria-query's roles.keys().filter(r => roles.get(r).abstract) → same 12. No behavioural change.

Spec reference

Part of a cleanup campaign migrating hand-maintained lists in this plugin to authoritative sources where available. See also #11 (aria-unsupported-elements → aria-query dom.reserved), #14 (no-invalid-role → aria-query).

…aria-query

Replaces a hand-maintained list of 12 abstract ARIA roles with a
derivation from aria-query's role taxonomy (role.abstract === true).

aria-query is already a dependency. Future WAI-ARIA additions of
abstract roles flow in automatically on aria-query upgrade instead of
requiring a hand edit here.

No behavioural change — the derived set is identical to the hand list
today.
@github-actions
Copy link
Copy Markdown

🏎️ Benchmark Comparison

Benchmark Control (p50) Experiment (p50) Δ
🟢 js small 13.93 ms 12.72 ms -8.7%
🟢 js medium 6.45 ms 6.23 ms -3.4%
js large 2.49 ms 2.45 ms -1.5%
gjs small 1.18 ms 1.17 ms -0.6%
gjs medium 588.87 µs 584.33 µs -0.8%
gjs large 233.22 µs 230.61 µs -1.1%
gts small 1.18 ms 1.17 ms -0.6%
gts medium 587.29 µs 582.49 µs -0.8%
gts large 232.42 µs 231.53 µs -0.4%

🟢 faster · 🔴 slower · 🟠 slightly slower · ⚪ within 2%

Full mitata output
clk: ~3.33 GHz
cpu: Intel(R) Xeon(R) Platinum 8370C CPU @ 2.80GHz
runtime: node 24.14.1 (x64-linux)

benchmark                   avg (min … max) p75 / p99    (min … top 1%)
------------------------------------------- -------------------------------
js small (control)            15.77 ms/iter  17.07 ms █ ▃                  
                      (11.05 ms … 31.26 ms)  27.16 ms █ █ ▃                
                    (  5.82 mb …  10.13 mb)   7.22 mb █▆█▄██▄▆▄▁▄▁▁▆▁▁▆▁▄▁▆

js small (experiment)         13.34 ms/iter  13.94 ms   █                  
                      (11.36 ms … 19.18 ms)  17.98 ms   █ ▆                
                    (  6.75 mb …   7.91 mb)   6.84 mb █▅█▅█▅▇▃▅▃▅▅▃▁▁▁▁▁▅▃▃

                             ┌                                            ┐
                             ╷  ┌─────────┬───┐                           ╷
          js small (control) ├──┤         │   ├───────────────────────────┤
                             ╵  └─────────┴───┘                           ╵
                              ╷ ┌──┬─┐          ╷
       js small (experiment)  ├─┤  │ ├──────────┤
                              ╵ └──┴─┘          ╵
                             └                                            ┘
                             11.05 ms           19.10 ms           27.16 ms

summary
  js small (experiment)
   1.18x faster than js small (control)

------------------------------------------- -------------------------------
js medium (control)            7.13 ms/iter   7.56 ms  █                   
                       (5.94 ms … 13.83 ms)  13.33 ms ▇█                   
                    (  2.98 mb …   4.12 mb)   3.53 mb ███▇▂▄▆▂▂▂▁▃▂▂▁▂▁▁▂▁▂

js medium (experiment)         6.90 ms/iter   6.79 ms  █                   
                       (5.85 ms … 13.43 ms)  13.17 ms ▅█                   
                    (  2.27 mb …   4.73 mb)   3.51 mb ███▃▃▃▂▄▁▃▁▁▁▂▂▁▁▂▁▁▂

                             ┌                                            ┐
                              ╷┌─────┬─┐                                  ╷
         js medium (control)  ├┤     │ ├──────────────────────────────────┤
                              ╵└─────┴─┘                                  ╵
                             ╷┌────┬                                     ╷
      js medium (experiment) ├┤    │─────────────────────────────────────┤
                             ╵└────┴                                     ╵
                             └                                            ┘
                             5.85 ms            9.59 ms            13.33 ms

summary
  js medium (experiment)
   1.03x faster than js medium (control)

------------------------------------------- -------------------------------
js large (control)             2.92 ms/iter   2.77 ms █▅                   
                       (2.21 ms … 11.18 ms)   6.85 ms ██▂                  
                    (224.43 kb …   2.83 mb)   1.44 mb ███▃▃▃▃▃▁▂▁▂▁▂▂▃▁▂▁▁▁

js large (experiment)          2.71 ms/iter   2.55 ms  █                   
                        (2.31 ms … 6.57 ms)   5.78 ms ██                   
                    (179.59 kb …   3.23 mb)   1.43 mb ██▄▂▂▂▂▂▂▂▂▁▁▁▁▁▁▁▁▁▁

                             ┌                                            ┐
                             ╷┌─────┬                                     ╷
          js large (control) ├┤     │─────────────────────────────────────┤
                             ╵└─────┴                                     ╵
                              ╷┌──┬                             ╷
       js large (experiment)  ├┤  │─────────────────────────────┤
                              ╵└──┴                             ╵
                             └                                            ┘
                             2.21 ms            4.53 ms             6.85 ms

summary
  js large (experiment)
   1.08x faster than js large (control)

------------------------------------------- -------------------------------
gjs small (control)            1.31 ms/iter   1.25 ms █                    
                        (1.14 ms … 6.32 ms)   5.73 ms █                    
                    (220.49 kb …   1.84 mb)   1.06 mb █▅▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁

gjs small (experiment)         1.30 ms/iter   1.24 ms █                    
                        (1.13 ms … 6.50 ms)   5.39 ms █                    
                    (402.84 kb …   1.72 mb)   1.06 mb █▇▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁

                             ┌                                            ┐
                             ┌─┬                                          ╷
         gjs small (control) │ │──────────────────────────────────────────┤
                             └─┴                                          ╵
                             ┌─┬                                       ╷
      gjs small (experiment) │ │───────────────────────────────────────┤
                             └─┴                                       ╵
                             └                                            ┘
                             1.13 ms            3.43 ms             5.73 ms

summary
  gjs small (experiment)
   1.01x faster than gjs small (control)

------------------------------------------- -------------------------------
gjs medium (control)         641.07 µs/iter 601.95 µs █▃                   
                      (561.70 µs … 6.01 ms)   1.70 ms ██                   
                    (401.30 kb …   1.56 mb) 543.03 kb ██▂▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁

gjs medium (experiment)      636.62 µs/iter 604.81 µs █                    
                      (556.26 µs … 5.73 ms)   1.86 ms ██                   
                    (404.71 kb …   1.59 mb) 541.30 kb ██▂▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁

                             ┌                                            ┐
                             ╷┌─┬                                   ╷
        gjs medium (control) ├┤ │───────────────────────────────────┤
                             ╵└─┴                                   ╵
                             ╷┌─┬                                         ╷
     gjs medium (experiment) ├┤ │─────────────────────────────────────────┤
                             ╵└─┴                                         ╵
                             └                                            ┘
                             556.26 µs           1.21 ms            1.86 ms

summary
  gjs medium (experiment)
   1.01x faster than gjs medium (control)

------------------------------------------- -------------------------------
gjs large (control)          259.11 µs/iter 246.09 µs  █                   
                      (224.43 µs … 5.82 ms) 309.27 µs  ██                  
                    (106.34 kb … 966.55 kb) 217.16 kb ▆███▄█▇▅▃▂▂▂▁▁▁▁▁▁▁▁▁

gjs large (experiment)       254.71 µs/iter 242.15 µs  █▃                  
                      (222.24 µs … 6.07 ms) 304.95 µs  ██                  
                    (145.61 kb …   1.10 mb) 216.43 kb ▅███▄▇▇▄▂▂▂▂▁▁▁▁▁▁▁▁▁

                             ┌                                            ┐
                              ╷ ┌───────────────┬                         ╷
         gjs large (control)  ├─┤               │─────────────────────────┤
                              ╵ └───────────────┴                         ╵
                             ╷ ┌──────────────┬                         ╷
      gjs large (experiment) ├─┤              │─────────────────────────┤
                             ╵ └──────────────┴                         ╵
                             └                                            ┘
                             222.24 µs         265.76 µs          309.27 µs

summary
  gjs large (experiment)
   1.02x faster than gjs large (control)

------------------------------------------- -------------------------------
gts small (control)            1.30 ms/iter   1.20 ms █                    
                        (1.15 ms … 6.62 ms)   5.95 ms █                    
                    (224.96 kb …   1.91 mb)   1.06 mb █▃▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁

gts small (experiment)         1.27 ms/iter   1.19 ms █                    
                        (1.14 ms … 6.87 ms)   5.71 ms █                    
                    (479.09 kb …   1.66 mb)   1.05 mb █▂▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁

                             ┌                                            ┐
                             ┌─┬                                          ╷
         gts small (control) │ │──────────────────────────────────────────┤
                             └─┴                                          ╵
                             ┌┬                                         ╷
      gts small (experiment) ││─────────────────────────────────────────┤
                             └┴                                         ╵
                             └                                            ┘
                             1.14 ms            3.55 ms             5.95 ms

summary
  gts small (experiment)
   1.03x faster than gts small (control)

------------------------------------------- -------------------------------
gts medium (control)         638.00 µs/iter 604.12 µs ██                   
                      (559.85 µs … 6.00 ms)   1.59 ms ██                   
                    (242.49 kb …   1.65 mb) 542.44 kb ██▃▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁

gts medium (experiment)      642.38 µs/iter 601.83 µs █                    
                      (553.78 µs … 5.84 ms)   3.16 ms █                    
                    (161.09 kb …   1.20 mb) 540.50 kb █▅▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁

                             ┌                                            ┐
                             ┌┬                ╷
        gts medium (control) ││────────────────┤
                             └┴                ╵
                             ┌─┬                                          ╷
     gts medium (experiment) │ │──────────────────────────────────────────┤
                             └─┴                                          ╵
                             └                                            ┘
                             553.78 µs           1.86 ms            3.16 ms

summary
  gts medium (control)
   1.01x faster than gts medium (experiment)

------------------------------------------- -------------------------------
gts large (control)          255.93 µs/iter 244.04 µs  █                   
                      (224.09 µs … 5.46 ms) 313.08 µs  ██                  
                    ( 80.81 kb … 739.56 kb) 216.73 kb ▃██▅▄█▅▃▂▂▁▁▁▁▁▁▁▁▁▁▁

gts large (experiment)       257.19 µs/iter 244.30 µs  █                   
                      (221.36 µs … 6.04 ms) 303.56 µs  ██▂  ▂              
                    ( 79.04 kb …   1.27 mb) 216.63 kb ▅███▄██▆▃▂▂▂▂▁▁▁▁▁▁▁▁

                             ┌                                            ┐
                              ╷  ┌────────────┬                           ╷
         gts large (control)  ├──┤            │───────────────────────────┤
                              ╵  └────────────┴                           ╵
                             ╷ ┌───────────────┬                     ╷
      gts large (experiment) ├─┤               │─────────────────────┤
                             ╵ └───────────────┴                     ╵
                             └                                            ┘
                             221.36 µs         267.22 µs          313.08 µs

summary
  gts large (control)
   1x faster than gts large (experiment)

@johanrd
Copy link
Copy Markdown
Owner Author

johanrd commented Apr 21, 2026

Moved upstream to ember-cli#2721. See that PR for ongoing review.

@johanrd johanrd closed this Apr 21, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant