Skip to content

refactor(template-require-presentational-children): source role list from aria-query#26

Closed
johanrd wants to merge 3 commits intomasterfrom
refactor/presentational-children-from-aria-query
Closed

refactor(template-require-presentational-children): source role list from aria-query#26
johanrd wants to merge 3 commits intomasterfrom
refactor/presentational-children-from-aria-query

Conversation

@johanrd
Copy link
Copy Markdown
Owner

@johanrd johanrd commented Apr 21, 2026

Replaces the hand-maintained list of 14 roles that require presentational children with a derivation from aria-query:

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

Before/after

Before After
Roles covered 14 (WAI-ARIA core) 16 (adds doc-pagebreak, graphics-symbol)

aria-query's childrenPresentational flag is set on the 16 roles that the WAI-ARIA 1.2 + DPUB-ARIA + Graphics-ARIA specs mark with the Children Presentational rule.

Net behavior change: previously <div role="doc-pagebreak"><span>text</span></div> and <svg role="graphics-symbol"><text>…</text></svg> were silently accepted despite being spec-invalid. They now correctly flag.

Spec reference

Part of the aria-query cleanup campaign — see also #11, #14, #25.

…from aria-query

Replaces a hand-maintained list of 14 roles with a derivation from
aria-query's role.childrenPresentational flag.

Coverage grows from 14 to 16 roles — aria-query also includes
doc-pagebreak (DPUB-ARIA) and graphics-symbol (Graphics-ARIA), both
of which spec-require presentational children. Previously those would
have been silently accepted.

Spec: WAI-ARIA 1.2 — Children Presentational
https://www.w3.org/TR/wai-aria-1.2/#childrenArePresentational
@github-actions
Copy link
Copy Markdown

github-actions Bot commented Apr 21, 2026

🏎️ Benchmark Comparison

Benchmark Control (p50) Experiment (p50) Δ
js small 13.58 ms 13.58 ms +0.0%
🟢 js medium 6.86 ms 6.52 ms -4.8%
🟢 js large 2.71 ms 2.63 ms -3.0%
gjs small 1.11 ms 1.10 ms -0.9%
gjs medium 549.29 µs 546.09 µs -0.6%
gjs large 216.80 µs 216.24 µs -0.3%
gts small 1.09 ms 1.09 ms -0.1%
gts medium 550.74 µs 547.32 µs -0.6%
gts large 217.64 µs 217.61 µs -0.0%

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

Full mitata output
clk: ~2.75 GHz
cpu: AMD EPYC 9V74 80-Core Processor
runtime: node 24.14.1 (x64-linux)

benchmark                   avg (min … max) p75 / p99    (min … top 1%)
------------------------------------------- -------------------------------
js small (control)            16.62 ms/iter  17.73 ms █ ▅                  
                      (11.35 ms … 31.54 ms)  28.91 ms █▂█    ▂             
                    (  5.70 mb …  10.28 mb)   7.29 mb ███▇▇▄▇█▄▁▁▁▁▁▇▁▁▄▄▄▇

js small (experiment)         14.14 ms/iter  15.23 ms    █ █▄              
                      (12.11 ms … 20.45 ms)  17.51 ms ▅▅ █▅██     ▅▅       
                    (  6.23 mb …   8.30 mb)   6.83 mb ██▅████▅▁█▅▅██▁▅█▅▁▁▅

                             ┌                                            ┐
                             ╷┌────────────┬─┐                            ╷
          js small (control) ├┤            │ ├────────────────────────────┤
                             ╵└────────────┴─┘                            ╵
                               ╷ ┌──┬──┐     ╷
       js small (experiment)   ├─┤  │  ├─────┤
                               ╵ └──┴──┘     ╵
                             └                                            ┘
                             11.35 ms           20.13 ms           28.91 ms

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

------------------------------------------- -------------------------------
js medium (control)            7.63 ms/iter   8.09 ms  █                   
                       (6.38 ms … 15.40 ms)  14.44 ms  █                   
                    (  2.35 mb …   4.66 mb)   3.53 mb ██▇▃▄▄▃▂▂▄▁▁▂▁▂▂▁▁▁▁▂

js medium (experiment)         7.29 ms/iter   7.74 ms  █                   
                       (6.22 ms … 14.27 ms)  12.09 ms ▃█                   
                    (  1.39 mb …   5.58 mb)   3.53 mb ██▄▃▃▄▄▃▃▂▂▂▂▁▂▁▂▂▁▁▂

                             ┌                                            ┐
                              ╷┌─────┬─┐                                  ╷
         js medium (control)  ├┤     │ ├──────────────────────────────────┤
                              ╵└─────┴─┘                                  ╵
                             ╷┌────┬─┐                       ╷
      js medium (experiment) ├┤    │ ├───────────────────────┤
                             ╵└────┴─┘                       ╵
                             └                                            ┘
                             6.22 ms           10.33 ms            14.44 ms

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

------------------------------------------- -------------------------------
js large (control)             3.18 ms/iter   3.00 ms  ▃█                  
                        (2.27 ms … 8.81 ms)   7.82 ms ▅██                  
                    (136.62 kb …   3.62 mb)   1.44 mb ███▄▄▃▂▂▂▁▁▂▁▁▂▂▁▁▂▁▁

js large (experiment)          2.93 ms/iter   2.75 ms  █                   
                        (2.40 ms … 7.82 ms)   6.23 ms  █                   
                    (350.75 kb …   2.52 mb)   1.42 mb ██▇▃▂▂▂▁▂▁▁▁▁▁▁▁▁▁▁▁▁

                             ┌                                            ┐
                             ╷  ┌───┬                                     ╷
          js large (control) ├──┤   │─────────────────────────────────────┤
                             ╵  └───┴                                     ╵
                              ╷┌──┬                          ╷
       js large (experiment)  ├┤  │──────────────────────────┤
                              ╵└──┴                          ╵
                             └                                            ┘
                             2.27 ms            5.05 ms             7.82 ms

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

------------------------------------------- -------------------------------
gjs small (control)            1.23 ms/iter   1.14 ms █                    
                        (1.08 ms … 7.14 ms)   5.53 ms █                    
                    (583.95 kb …   1.60 mb)   1.06 mb █▂▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁

gjs small (experiment)         1.21 ms/iter   1.11 ms █                    
                        (1.07 ms … 6.59 ms)   5.27 ms █                    
                    (260.43 kb …   1.83 mb)   1.06 mb █▂▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁

                             ┌                                            ┐
                             ┌─┬                                          ╷
         gjs small (control) │ │──────────────────────────────────────────┤
                             └─┴                                          ╵
                             ┌┬                                        ╷
      gjs small (experiment) ││────────────────────────────────────────┤
                             └┴                                        ╵
                             └                                            ┘
                             1.07 ms            3.30 ms             5.53 ms

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

------------------------------------------- -------------------------------
gjs medium (control)         598.10 µs/iter 557.01 µs █                    
                      (529.82 µs … 6.06 ms)   2.87 ms █                    
                    (124.63 kb …   1.15 mb) 541.86 kb █▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁

gjs medium (experiment)      590.31 µs/iter 553.30 µs █                    
                      (526.51 µs … 5.67 ms)   1.80 ms █                    
                    ( 40.06 kb … 993.23 kb) 540.62 kb █▄▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁

                             ┌                                            ┐
                             ┌┬                                           ╷
        gjs medium (control) ││───────────────────────────────────────────┤
                             └┴                                           ╵
                             ┌┬                      ╷
     gjs medium (experiment) ││──────────────────────┤
                             └┴                      ╵
                             └                                            ┘
                             526.51 µs           1.70 ms            2.87 ms

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

------------------------------------------- -------------------------------
gjs large (control)          237.11 µs/iter 223.58 µs  █                   
                      (210.70 µs … 5.05 ms) 295.48 µs  █▃                  
                    ( 17.62 kb … 802.52 kb) 217.03 kb ▅██▄▆▄▂▁▁▁▁▁▁▁▁▁▁▁▁▁▁

gjs large (experiment)       237.92 µs/iter 222.75 µs  █                   
                      (210.31 µs … 5.29 ms) 289.20 µs  █▄                  
                    (  6.97 kb …   1.27 mb) 216.77 kb ▄██▄▆▅▂▁▁▁▁▁▁▁▁▁▁▁▁▁▁

                             ┌                                            ┐
                             ╷ ┌───────────┬                              ╷
         gjs large (control) ├─┤           │──────────────────────────────┤
                             ╵ └───────────┴                              ╵
                             ╷ ┌────────────┬                          ╷
      gjs large (experiment) ├─┤            │──────────────────────────┤
                             ╵ └────────────┴                          ╵
                             └                                            ┘
                             210.31 µs         252.90 µs          295.48 µs

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

------------------------------------------- -------------------------------
gts small (control)            1.19 ms/iter   1.11 ms █                    
                        (1.07 ms … 6.09 ms)   5.34 ms █                    
                    (227.77 kb …   1.50 mb)   1.06 mb █▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁

gts small (experiment)         1.19 ms/iter   1.10 ms █                    
                        (1.07 ms … 6.33 ms)   5.27 ms █                    
                    (597.95 kb …   1.60 mb)   1.05 mb █▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁

                             ┌                                            ┐
                             ┌┬                                           ╷
         gts small (control) ││───────────────────────────────────────────┤
                             └┴                                           ╵
                             ┌┬                                          ╷
      gts small (experiment) ││──────────────────────────────────────────┤
                             └┴                                          ╵
                             └                                            ┘
                             1.07 ms            3.20 ms             5.34 ms

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

------------------------------------------- -------------------------------
gts medium (control)         595.01 µs/iter 558.94 µs  █                   
                      (530.10 µs … 6.39 ms)   1.16 ms ▅█                   
                    ( 89.77 kb …   1.03 mb) 541.27 kb ██▂▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁

gts medium (experiment)      626.72 µs/iter 556.80 µs █                    
                      (528.92 µs … 7.06 ms)   3.54 ms █                    
                    (106.58 kb …   1.09 mb) 540.53 kb █▂▂▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁

                             ┌                                            ┐
                             ┌┬       ╷
        gts medium (control) ││───────┤
                             └┴       ╵
                             ┌┬                                           ╷
     gts medium (experiment) ││───────────────────────────────────────────┤
                             └┴                                           ╵
                             └                                            ┘
                             528.92 µs           2.03 ms            3.54 ms

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

------------------------------------------- -------------------------------
gts large (control)          238.93 µs/iter 224.90 µs  █                   
                      (210.89 µs … 5.32 ms) 293.84 µs  █▆                  
                    (125.99 kb … 739.42 kb) 216.70 kb ▃██▅▇▅▂▁▁▁▁▁▁▁▁▁▁▁▁▁▁

gts large (experiment)       237.97 µs/iter 224.37 µs  █▆                  
                      (210.89 µs … 5.08 ms) 279.80 µs  ██                  
                    (183.81 kb … 901.10 kb) 216.63 kb ▂██▇▄▇▆▃▁▁▁▁▁▁▁▁▁▁▁▁▁

                             ┌                                            ┐
                             ╷ ┌────────────┬                             ╷
         gts large (control) ├─┤            │─────────────────────────────┤
                             ╵ └────────────┴                             ╵
                             ╷ ┌────────────┬                     ╷
      gts large (experiment) ├─┤            │─────────────────────┤
                             ╵ └────────────┴                     ╵
                             └                                            ┘
                             210.89 µs         252.36 µs          293.84 µs

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

@johanrd
Copy link
Copy Markdown
Owner Author

johanrd commented Apr 21, 2026

Moved upstream to ember-cli#2722. 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