testilo 3.9.3 → 3.9.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/procs/score/sp15a.js +279 -67
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "testilo",
3
- "version": "3.9.3",
3
+ "version": "3.9.4",
4
4
  "description": "Client that scores and digests Testaro reports",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -58,14 +58,25 @@ const otherPackages = ['alfa', 'axe', 'continuum', 'htmlcs', 'ibm', 'nuVal', 'te
58
58
  const preWeightedPackages = ['axe', 'tenon', 'testaro'];
59
59
  const testMatchers = {
60
60
  nuVal: [
61
- /^CSS: background-image: .+ is not a background-image value.*$/,
62
- /^CSS: background: .+ is not a color value.*$/,
63
- /^CSS: cursor: .+ is not a cursor value.*$/,
64
- /^CSS: transform: .+ is not a transform value.*$/,
65
- /^Bad value for attribute id on element .+: An ID must not be the empty string.+$/,
61
+ /^CSS: .+: .+ is not a .+ value.*$/,
62
+ /^CSS: .+: Too many values or values are not recognized.+$/,
63
+ /^CSS: .+: Parse Error.*$/,
64
+ /^CSS: .+: Invalid type: .+$/,
65
+ /^CSS: .+: The types are incompatible.*$/,
66
+ /^CSS: .+: Unknown dimension.*$/,
67
+ /^The role attribute must not be used on a .+ element which has a table ancestor with no role attribute, or with a role attribute whose value is table, grid, or treegrid.*$/,
68
+ /^Bad value for attribute .+ on element .+: An ID must not be the empty string.+$/,
69
+ /^Bad value for attribute aria-owns on element .+: An IDREFS value must contain at least one non-whitespace character.*$/,
70
+ /^Bad value for attribute src on element .+: Must be non-empty.*$/,
71
+ /^Bad value for attribute tabindex on element .+: The empty string is not a valid integer.*$/,
72
+ /^The aria-hidden attribute must not be specified on the .+ element.*$/,
73
+ /^Element meta is missing one or more of the following attributes: .+$/,
66
74
  /^Duplicate ID .+$|^The first occurrence of ID .* was here.*$/,
67
75
  /^Start tag .+ seen but an element of the same type was already open.*$/,
76
+ /^Bad start tag in .+$/,
68
77
  /^End tag .+ violates nesting rules.*$/,
78
+ /^Stray end tag .+$/,
79
+ /^Element name .+ cannot be represented as XML 1\.0.*$/,
69
80
  /^Attribute .+ is not serializable as XML 1\.0.*$/,
70
81
  /^Attribute .+ not allowed on element meta at this point.*$/,
71
82
  /^Attribute .+ not allowed on element .+ at this point.*$/,
@@ -73,10 +84,16 @@ const testMatchers = {
73
84
  /^Bad value .+ for attribute .+ on element .+$/,
74
85
  /^Bad value .+ for the attribute .+$/,
75
86
  /^Attribute .+ not allowed here.*$/,
87
+ /^Attribute .+ is only allowed when .+$/,
88
+ /^The .+ attribute on the .+ element is obsolete.+$/,
76
89
  /^The .+ role is unnecessary for element .+$/,
77
90
  /^CSS: .+: Property .+ doesn't exist.*$/,
78
91
  /^CSS: .+: only 0 can be a length. You must put a unit after your number.*$/,
79
- /^Element .+ not allowed as child of element .+ in this context.*$/
92
+ /^CSS: .+: only 0 can be a unit. You must put a unit after your number.*$/,
93
+ /^Element .+ not allowed as child of element .+ in this context.*$/,
94
+ /^Forbidden code point U+.+$/,
95
+ /^Internal encoding declaration .+ disagrees with the actual encoding of the document.*$/,
96
+ /^Potentially bad value .+ for attribute sandbox on element iframe: Setting both allow-scripts and allow-same-origin is not recommended, because it effectively enables an embedded page to break out of all sandboxing.*$/
80
97
  ]
81
98
  };
82
99
  const groups = {
@@ -401,6 +418,17 @@ const groups = {
401
418
  }
402
419
  }
403
420
  },
421
+ sourceEmpty: {
422
+ weight: 4,
423
+ packages: {
424
+ nuVal: {
425
+ '^Bad value for attribute src on element .+: Must be non-empty.*$': {
426
+ quality: 1,
427
+ what: 'src attribute is empty'
428
+ }
429
+ }
430
+ }
431
+ },
404
432
  backgroundBad: {
405
433
  weight: 4,
406
434
  packages: {
@@ -485,7 +513,7 @@ const groups = {
485
513
  }
486
514
  },
487
515
  decorativeElementExposed: {
488
- weight: 1,
516
+ weight: 2,
489
517
  packages: {
490
518
  alfa: {
491
519
  r67: {
@@ -496,6 +524,12 @@ const groups = {
496
524
  quality: 1,
497
525
  what: 'Element marked as decorative is in the accessibility tree or has no none/presentation role'
498
526
  }
527
+ },
528
+ nuVal: {
529
+ 'An img element which has an alt attribute whose value is the empty string must not have a role attribute.': {
530
+ quality: 1,
531
+ what: 'img element with alt="" has a role attribute'
532
+ }
499
533
  }
500
534
  }
501
535
  },
@@ -532,6 +566,12 @@ const groups = {
532
566
  what: 'Page detected as HTML, but has no lang attribute'
533
567
  }
534
568
  },
569
+ nuVal: {
570
+ 'Consider adding a lang attribute to the html start tag to declare the language of this document.': {
571
+ quality: 1,
572
+ what: 'html start tag has no lang attribute to declare the language of the page'
573
+ }
574
+ },
535
575
  wave: {
536
576
  'e:language_missing': {
537
577
  quality: 1,
@@ -788,10 +828,6 @@ const groups = {
788
828
  }
789
829
  },
790
830
  wave: {
791
- 'a:label_orphaned': {
792
- quality: 1,
793
- what: 'Orphaned form label'
794
- },
795
831
  'a:link_internal_broken': {
796
832
  quality: 1,
797
833
  what: 'Broken same-page link'
@@ -799,13 +835,19 @@ const groups = {
799
835
  }
800
836
  }
801
837
  },
802
- labelForWrongRisk: {
803
- weight: 1,
838
+ labelForBad: {
839
+ weight: 3,
804
840
  packages: {
805
841
  htmlcs: {
806
842
  'w:AA.1_3_1.H44.NotFormControl': {
807
843
  quality: 1,
808
- what: 'Label for attribute may reference the wrong element, because it is not a form control'
844
+ what: 'referent of the for attribute of the label is not a form control, so may be wrong'
845
+ }
846
+ },
847
+ nuVal: {
848
+ 'The value of the for attribute of the label element must be the ID of a non-hidden form control.': {
849
+ quality: 1,
850
+ what: 'for attribute of the label element does not reference a non-hidden form control'
809
851
  }
810
852
  }
811
853
  }
@@ -846,6 +888,12 @@ const groups = {
846
888
  quality: 1,
847
889
  what: 'aria-controls attribute references an invalid or duplicate ID'
848
890
  }
891
+ },
892
+ nuVal: {
893
+ 'The aria-controls attribute must point to an element in the same document.': {
894
+ quality: 1,
895
+ what: 'aria-controls attribute references an element not in the document'
896
+ }
849
897
  }
850
898
  }
851
899
  },
@@ -904,6 +952,10 @@ const groups = {
904
952
  'The aria-labelledby attribute must point to an element in the same document.': {
905
953
  quality: 1,
906
954
  what: 'aria-labelledby attribute references an element not in the document'
955
+ },
956
+ 'The aria-describedby attribute must point to an element in the same document.': {
957
+ quality: 1,
958
+ what: 'aria-describedby attribute references an element not in the document'
907
959
  }
908
960
  },
909
961
  wave: {
@@ -985,6 +1037,12 @@ const groups = {
985
1037
  what: 'Hyperlink has no text description'
986
1038
  }
987
1039
  },
1040
+ nuVal: {
1041
+ 'Bad value for attribute href on element link: Must be non-empty.': {
1042
+ quality: 1,
1043
+ what: 'link element has an empty href attribute'
1044
+ }
1045
+ },
988
1046
  tenon: {
989
1047
  57: {
990
1048
  quality: 1,
@@ -1354,6 +1412,12 @@ const groups = {
1354
1412
  quality: 1,
1355
1413
  what: 'meta element in the head sets the viewport maximum-scale to less than 2'
1356
1414
  }
1415
+ },
1416
+ nuVal: {
1417
+ 'Consider avoiding viewport values that prevent users from resizing documents.': {
1418
+ quality: 1,
1419
+ what: 'viewport value prevents users from resizing the document'
1420
+ }
1357
1421
  }
1358
1422
  }
1359
1423
  },
@@ -1510,6 +1574,10 @@ const groups = {
1510
1574
  'A link element must not appear as a descendant of a body element unless the link element has an itemprop attribute or has a rel attribute whose value contains dns-prefetch, modulepreload, pingback, preconnect, prefetch, preload, prerender, or stylesheet.': {
1511
1575
  quality: 1,
1512
1576
  what: 'link element with a body ancestor has no itemprop or valid rel attribute'
1577
+ },
1578
+ 'A link element with an as attribute must have a rel attribute that contains the value preload or the value modulepreload or the value prefetch.': {
1579
+ quality: 1,
1580
+ what: 'link element with an as attribute has no rel attribute with preload, modulepreload, or prefetch as its value'
1513
1581
  }
1514
1582
  }
1515
1583
  }
@@ -1522,21 +1590,29 @@ const groups = {
1522
1590
  quality: 1,
1523
1591
  what: 'Attribute is not allowed on a meta element here'
1524
1592
  },
1525
- 'Element meta is missing one or more of the following attributes: charset, content, http-equiv, itemprop, name, property.': {
1593
+ '^Element meta is missing one or more of the following attributes: .+$': {
1526
1594
  quality: 1,
1527
- what: 'meta element is missing a charset, content, http-equiv, itemprop, name, or property attribute'
1595
+ what: 'meta element is missing a required attribute'
1528
1596
  },
1529
1597
  'A document must not include more than one meta element with its name attribute set to the value description.': {
1530
1598
  quality: 1,
1531
1599
  what: 'meta element with name="description" is not the only one'
1532
1600
  },
1601
+ 'A document must not include both a meta element with an http-equiv attribute whose value is content-type, and a meta element with a charset attribute.': {
1602
+ quality: 1,
1603
+ what: 'meta element with http-equiv="content-type" is incompatible with the meta element with a charset attribute'
1604
+ },
1605
+ 'A document must not include more than one meta element with a http-equiv attribute whose value is content-type.': {
1606
+ quality: 1,
1607
+ what: 'Page has more than 1 meta element with http-equiv="content-type"'
1608
+ },
1533
1609
  'A meta element with an http-equiv attribute whose value is X-UA-Compatible must have a content attribute with the value IE=edge.': {
1534
1610
  quality: 1,
1535
1611
  what: 'meta element with http-equiv="X-UA-Compatible" has no content="IE=edge"'
1536
1612
  },
1537
- 'Element meta is missing one or more of the following attributes: itemprop, property.': {
1613
+ 'A document must not include more than one meta element with a charset attribute.': {
1538
1614
  quality: 1,
1539
- what: 'meta element is missing an itemprop or property attribute'
1615
+ what: 'More than 1 meta element has a charset attribute'
1540
1616
  },
1541
1617
  'A charset attribute on a meta element found after the first 1024 bytes.': {
1542
1618
  quality: 1,
@@ -1549,13 +1625,17 @@ const groups = {
1549
1625
  }
1550
1626
  }
1551
1627
  },
1552
- scriptDeferBad: {
1628
+ scriptElementBad: {
1553
1629
  weight: 4,
1554
1630
  packages: {
1555
1631
  nuVal: {
1556
1632
  'Element script must not have attribute defer unless attribute src is also specified.': {
1557
1633
  quality: 1,
1558
1634
  what: 'script element has a defer attribute without a src attribute'
1635
+ },
1636
+ 'A script element with a src attribute must not have a type attribute whose value is anything other than the empty string, a JavaScript MIME type, or module.': {
1637
+ quality: 1,
1638
+ what: 'script element has a src attribute but its type is not empty, a JS MIME type, or module'
1559
1639
  }
1560
1640
  }
1561
1641
  }
@@ -1685,6 +1765,14 @@ const groups = {
1685
1765
  'Bad value dialog for attribute role on element li.': {
1686
1766
  quality: 1,
1687
1767
  what: 'dialog role is not valid for an li element'
1768
+ },
1769
+ 'An img element with no alt attribute must not have a role attribute.': {
1770
+ quality: 1,
1771
+ what: 'img element has a role attribute but no alt attribute'
1772
+ },
1773
+ '^The role attribute must not be used on a .+ element which has a table ancestor with no role attribute, or with a role attribute whose value is table, grid, or treegrid.*$': {
1774
+ quality: 1,
1775
+ what: 'Table cell has a role attribute'
1688
1776
  }
1689
1777
  },
1690
1778
  testaro: {
@@ -1708,6 +1796,10 @@ const groups = {
1708
1796
  '^The .+ role is unnecessary for element .+$': {
1709
1797
  quality: 1,
1710
1798
  what: 'explicit role is redundant for its element'
1799
+ },
1800
+ 'The textbox role is unnecessary for an input element that has no list attribute and whose type is text.': {
1801
+ quality: 1,
1802
+ what: 'explicit role is redundant for a text-type input element without a list attribute'
1711
1803
  }
1712
1804
  }
1713
1805
  }
@@ -1731,6 +1823,10 @@ const groups = {
1731
1823
  'Element a is missing required attribute aria-valuenow.': {
1732
1824
  quality: 1,
1733
1825
  what: 'a element has no aria-valuenow attribute'
1826
+ },
1827
+ 'Element a is missing one or more of the following attributes: aria-checked, role.': {
1828
+ quality: 1,
1829
+ what: 'a element has no aria-checked attribute or has no role attribute'
1734
1830
  }
1735
1831
  }
1736
1832
  }
@@ -1873,6 +1969,14 @@ const groups = {
1873
1969
  'The aria-hidden attribute must not be specified on the noscript element.': {
1874
1970
  quality: 1,
1875
1971
  what: 'noscript element has an aria-hidden attribute'
1972
+ },
1973
+ 'Attribute aria-activedescendant value should either refer to a descendant element, or should be accompanied by attribute aria-owns.': {
1974
+ quality: 1,
1975
+ what: 'element has no aria-owns attribute but its aria-activedescendant attribute references a non-descendant'
1976
+ },
1977
+ 'The aria-checked attribute should not be used on an input element which has a type attribute whose value is checkbox.': {
1978
+ quality: 1,
1979
+ what: 'input element with type="checkbox" has an aria-checked attribute'
1876
1980
  }
1877
1981
  }
1878
1982
  }
@@ -1885,6 +1989,12 @@ const groups = {
1885
1989
  quality: 1,
1886
1990
  what: 'ARIA attribute is used when there is a corresponding HTML attribute'
1887
1991
  }
1992
+ },
1993
+ nuVal: {
1994
+ 'Attribute aria-required is unnecessary for elements that have attribute required.': {
1995
+ quality: 1,
1996
+ what: 'aria-required attribute is redundant with required attribute'
1997
+ }
1888
1998
  }
1889
1999
  }
1890
2000
  },
@@ -1917,19 +2027,25 @@ const groups = {
1917
2027
  axe: {
1918
2028
  'autocomplete-valid': {
1919
2029
  quality: 1,
1920
- what: 'Autocomplete attribute is used incorrectly'
2030
+ what: 'autocomplete attribute is used incorrectly'
1921
2031
  }
1922
2032
  },
1923
2033
  htmlcs: {
1924
2034
  'e:AA.1_3_5.H98': {
1925
2035
  quality: 1,
1926
- what: 'Autocomplete attribute and the input type are mismatched'
2036
+ what: 'autocomplete attribute and the input type are mismatched'
1927
2037
  }
1928
2038
  },
1929
2039
  ibm: {
1930
2040
  WCAG21_Input_Autocomplete: {
1931
2041
  quality: 1,
1932
- what: 'Autocomplete attribute token is not appropriate for the input form field'
2042
+ what: 'autocomplete attribute token is not appropriate for the input form field'
2043
+ }
2044
+ },
2045
+ nuVal: {
2046
+ 'Bad value for attribute autocomplete on element input: Must not be empty.': {
2047
+ quality: 1,
2048
+ what: 'autocomplete attribute has an empty value'
1933
2049
  }
1934
2050
  }
1935
2051
  }
@@ -2056,9 +2172,24 @@ const groups = {
2056
2172
  weight: 4,
2057
2173
  packages: {
2058
2174
  nuVal: {
2059
- '^Bad value for attribute id on element .+: An ID must not be the empty string.+$': {
2175
+ '^Bad value for attribute .+ on element .+: An ID must not be the empty string.+$': {
2060
2176
  quality: 1,
2061
2177
  what: 'id attribute has an empty value'
2178
+ },
2179
+ '^Bad value for attribute aria-owns on element .+: An IDREFS value must contain at least one non-whitespace character.*$': {
2180
+ quality: 1,
2181
+ what: 'aria-owns attribute has an empty value'
2182
+ }
2183
+ }
2184
+ }
2185
+ },
2186
+ targetEmpty: {
2187
+ weight: 4,
2188
+ packages: {
2189
+ nuVal: {
2190
+ 'Bad value for attribute target on element a: Browsing context name must be at least one character long.': {
2191
+ quality: 1,
2192
+ what: 'target attribute on an a element is empty'
2062
2193
  }
2063
2194
  }
2064
2195
  }
@@ -2533,6 +2664,12 @@ const groups = {
2533
2664
  quality: 1,
2534
2665
  what: 'List component with a group role has a non-listitem child'
2535
2666
  }
2667
+ },
2668
+ nuVal: {
2669
+ 'Element dl is missing a required child element.': {
2670
+ quality: 1,
2671
+ what: 'dl element has no child element.'
2672
+ }
2536
2673
  }
2537
2674
  }
2538
2675
  },
@@ -2618,6 +2755,28 @@ const groups = {
2618
2755
  }
2619
2756
  }
2620
2757
  },
2758
+ optionOrphan: {
2759
+ weight: 4,
2760
+ packages: {
2761
+ nuVal: {
2762
+ 'An element with role=option must be contained in, or owned by, an element with role=listbox.': {
2763
+ quality: 1,
2764
+ what: 'element with an option role is not contained by an element with a listbox role'
2765
+ }
2766
+ }
2767
+ }
2768
+ },
2769
+ optionNoText: {
2770
+ weight: 4,
2771
+ packages: {
2772
+ nuVal: {
2773
+ 'Element option without attribute label must not be empty.': {
2774
+ quality: 1,
2775
+ what: 'option element is empty but has no label attribute'
2776
+ }
2777
+ }
2778
+ }
2779
+ },
2621
2780
  selectFlatRisk: {
2622
2781
  weight: 1,
2623
2782
  packages: {
@@ -2984,6 +3143,20 @@ const groups = {
2984
3143
  what: 'Link contains an input, keygen, select, textarea, or button'
2985
3144
  }
2986
3145
  },
3146
+ nuVal: {
3147
+ 'The element a must not appear as a descendant of an element with the attribute role=link.': {
3148
+ quality: 1,
3149
+ what: 'a element is a descendant of an element with a link role'
3150
+ },
3151
+ 'An element with the attribute tabindex must not appear as a descendant of the a element.': {
3152
+ quality: 1,
3153
+ what: 'descendant of an a element has a tabindex attribute'
3154
+ },
3155
+ 'An element with the attribute tabindex must not appear as a descendant of an element with the attribute role=link.': {
3156
+ quality: 1,
3157
+ what: 'descendant of an element with a link role has a tabindex attribute'
3158
+ }
3159
+ },
2987
3160
  testaro: {
2988
3161
  embAc: {
2989
3162
  quality: 1,
@@ -3512,9 +3685,9 @@ const groups = {
3512
3685
  weight: 2,
3513
3686
  packages: {
3514
3687
  nuVal: {
3515
- 'Potentially bad value allow-scripts allow-same-origin for attribute sandbox on element iframe: Setting both allow-scripts and allow-same-origin is not recommended, because it effectively enables an embedded page to break out of all sandboxing.': {
3688
+ '^Potentially bad value .+ for attribute sandbox on element iframe: Setting both allow-scripts and allow-same-origin is not recommended, because it effectively enables an embedded page to break out of all sandboxing.*$': {
3516
3689
  quality: 1,
3517
- what: 'iframe element has vulnerable sandbox="allow-scripts allow-same-origin"'
3690
+ what: 'iframe element has a vulnerable sandbox value containing both allow-scripts and allow-same-origin'
3518
3691
  }
3519
3692
  }
3520
3693
  }
@@ -3608,6 +3781,10 @@ const groups = {
3608
3781
  '^Attribute .+ is not serializable as XML 1\\.0.*$': {
3609
3782
  quality: 1,
3610
3783
  what: 'Attribute is invalidly nonserializable'
3784
+ },
3785
+ '^Attribute .+ is only allowed when .+$': {
3786
+ quality: 1,
3787
+ what: 'Attribute is invalid here'
3611
3788
  }
3612
3789
  }
3613
3790
  }
@@ -3806,6 +3983,17 @@ const groups = {
3806
3983
  }
3807
3984
  }
3808
3985
  },
3986
+ tabIndexBad: {
3987
+ weight: 4,
3988
+ packages: {
3989
+ nuVal: {
3990
+ '^Bad value for attribute tabindex on element .+: The empty string is not a valid integer.*$': {
3991
+ quality: 1,
3992
+ what: 'tabindex attribute has an empty value instead of an integer'
3993
+ }
3994
+ }
3995
+ }
3996
+ },
3809
3997
  tabIndexMissing: {
3810
3998
  weight: 4,
3811
3999
  packages: {
@@ -4026,41 +4214,29 @@ const groups = {
4026
4214
  }
4027
4215
  },
4028
4216
  nuVal: {
4029
- 'The charset attribute on the script element is obsolete.': {
4217
+ 'The center element is obsolete. Use CSS instead.': {
4030
4218
  quality: 1,
4031
- what: 'charset attribute is obsolete on a script element'
4219
+ what: 'center element is obsolete'
4032
4220
  },
4033
- 'The only allowed value for the charset attribute for the script element is utf-8. (But the attribute is not needed and should be omitted altogether.)': {
4221
+ 'The font element is obsolete. Use CSS instead.': {
4034
4222
  quality: 1,
4035
- what: 'charset attribute has a value other than utf-8 and is unnecessary'
4223
+ what: 'font element is obsolete'
4036
4224
  },
4037
- 'The language attribute on the script element is obsolete. You can safely omit it.': {
4225
+ '^The .+ attribute on the .+ element is obsolete.+$': {
4038
4226
  quality: 1,
4039
- what: 'language attribute is obsolete on a script element'
4227
+ what: 'attribute is obsolete on its element'
4040
4228
  },
4041
- 'The language attribute on the script element is obsolete. Use the type attribute instead.': {
4229
+ 'The only allowed value for the charset attribute for the script element is utf-8. (But the attribute is not needed and should be omitted altogether.)': {
4042
4230
  quality: 1,
4043
- what: 'language attribute is obsolete on a script element'
4231
+ what: 'charset attribute has a value other than utf-8 and is unnecessary'
4044
4232
  },
4045
4233
  'Using the meta element to specify the document-wide default language is obsolete. Consider specifying the language on the root element instead.': {
4046
4234
  quality: 1,
4047
4235
  what: 'language declaration in a meta element is obsolete'
4048
4236
  },
4049
- 'The frameborder attribute on the iframe element is obsolete. Use CSS instead.': {
4050
- quality: 1,
4051
- what: 'frameborder attribute is obsolete'
4052
- },
4053
4237
  'The name attribute is obsolete. Consider putting an id attribute on the nearest container instead.': {
4054
4238
  quality: 1,
4055
4239
  what: 'name attribute is obsolete'
4056
- },
4057
- 'The allowtransparency attribute on the iframe element is obsolete. Use CSS instead.': {
4058
- quality: 1,
4059
- what: 'allowtransparency attribute on an iframe element is obsolete'
4060
- },
4061
- 'The scrolling attribute on the iframe element is obsolete. Use CSS instead.': {
4062
- quality: 1,
4063
- what: 'scrolling attribute on an iframe element is obsolete'
4064
4240
  }
4065
4241
  },
4066
4242
  wave: {
@@ -4075,54 +4251,70 @@ const groups = {
4075
4251
  weight: 3,
4076
4252
  packages: {
4077
4253
  nuVal: {
4078
- 'CSS: -webkit-box-flex: Parse Error.': {
4254
+ 'CSS: font-size: One operand must be a number.': {
4079
4255
  quality: 1,
4080
- what: 'Invalid -webkit-box-flex in CSS'
4256
+ what: 'CSS font-size property has no numeric operand'
4081
4257
  },
4082
- 'CSS: -webkit-flex: Parse Error.': {
4258
+ '^CSS: .+: Parse Error.*$': {
4083
4259
  quality: 1,
4084
- what: 'Invalid -webkit-flex in CSS'
4260
+ what: 'Invalid CSS'
4085
4261
  },
4086
- 'CSS: -ms-flex: Parse Error.': {
4262
+ '^CSS: .+: .+ is not a .+ value.*$': {
4087
4263
  quality: 1,
4088
- what: 'Invalid -ms-flex in CSS'
4264
+ what: 'Invalid value in CSS'
4089
4265
  },
4090
- 'CSS: -moz-box-flex: Parse Error.': {
4266
+ '^CSS: .+: Property .+ doesn\'t exist.*$': {
4091
4267
  quality: 1,
4092
- what: 'Invalid -moz-box-flex in CSS'
4268
+ what: 'Invalid property in CSS'
4093
4269
  },
4094
- 'CSS: flex: Parse Error.': {
4270
+ '^CSS: .+: only 0 can be a length. You must put a unit after your number.*$': {
4095
4271
  quality: 1,
4096
- what: 'Invalid flex in CSS'
4272
+ what: 'Length in CSS is nonzero but has no unit'
4097
4273
  },
4098
- '^CSS: cursor: .+ is not a cursor value.*$': {
4274
+ '^CSS: .+: only 0 can be a unit. You must put a unit after your number.*$': {
4099
4275
  quality: 1,
4100
- what: 'Invalid cursor in CSS'
4276
+ what: 'Number in CSS is nonzero but has no unit'
4101
4277
  },
4102
- '^CSS: transform: .+ is not a transform value.*$': {
4278
+ 'CSS: Parse Error.': {
4103
4279
  quality: 1,
4104
- what: 'Invalid transform in CSS'
4280
+ what: 'Invalid CSS'
4105
4281
  },
4106
- '^CSS: .+: Property .+ doesn\'t exist.*$': {
4282
+ '^CSS: .+: Too many values or values are not recognized.+$': {
4107
4283
  quality: 1,
4108
- what: 'Invalid property in CSS'
4284
+ what: 'Invalid CSS value or too many values'
4109
4285
  },
4110
- '^CSS: .+: only 0 can be a length. You must put a unit after your number.*$': {
4286
+ '^CSS: .+: Invalid type: .+$': {
4111
4287
  quality: 1,
4112
- what: 'Length in CSS is nonzero but has no unit'
4288
+ what: 'Invalid type of CSS value'
4113
4289
  },
4114
- 'CSS: Parse Error.': {
4290
+ '^CSS: .+: The types are incompatible.*$': {
4115
4291
  quality: 1,
4116
- what: 'Invalid CSS'
4292
+ what: 'Incompatible types of CSS values'
4293
+ },
4294
+ '^CSS: .+: Unknown dimension.*$': {
4295
+ quality: 1,
4296
+ what: 'Unknown CSS dimension'
4297
+ },
4298
+ '^The aria-hidden attribute must not be specified on the .+ element.*$': {
4299
+ quality: 1,
4300
+ what: 'aria-hidden attribute is invalid for its element'
4301
+ },
4302
+ 'The aria-hidden attribute must not be specified on an input element whose type attribute has the value hidden.': {
4303
+ quality: 1,
4304
+ what: 'aria-hidden attribute is invalid for an input element with type="hidden"'
4117
4305
  },
4118
- 'Stray end tag head.': {
4306
+ '^Stray end tag .+$': {
4119
4307
  quality: 1,
4120
- what: 'Invalid closing head tag'
4308
+ what: 'Invalid closing tag'
4121
4309
  },
4122
4310
  '^Start tag .+ seen but an element of the same type was already open.*$': {
4123
4311
  quality: 1,
4124
4312
  what: 'Element is invalidly a descendant of another such element'
4125
4313
  },
4314
+ '^Bad start tag in .+$': {
4315
+ quality: 1,
4316
+ what: 'Invalid start tag'
4317
+ },
4126
4318
  '^End tag .+ violates nesting rules.*$': {
4127
4319
  quality: 1,
4128
4320
  what: 'End tag violates nesting rules'
@@ -4130,6 +4322,26 @@ const groups = {
4130
4322
  '^Element .+ not allowed as child of element .+ in this context.*$': {
4131
4323
  quality: 1,
4132
4324
  what: 'Element not allowed as a child of its parent here'
4325
+ },
4326
+ 'Saw <!-- within a comment. Probable cause: Nested comment (not allowed).': {
4327
+ quality: 1,
4328
+ what: 'Comment is nested within a comment'
4329
+ },
4330
+ 'The document is not mappable to XML 1.0 due to two consecutive hyphens in a comment.': {
4331
+ quality: 1,
4332
+ what: 'Comment contains --'
4333
+ },
4334
+ '^Element name .+ cannot be represented as XML 1\\.0.*$': {
4335
+ quality: 1,
4336
+ what: 'Invalid element name'
4337
+ },
4338
+ '^Forbidden code point U+.+$': {
4339
+ quality: 1,
4340
+ what: 'Invalid Unicode code point'
4341
+ },
4342
+ '^Internal encoding declaration .+ disagrees with the actual encoding of the document.*$': {
4343
+ quality: 1,
4344
+ what: 'Encoding declaration disagrees with the actual encoding of the page'
4133
4345
  }
4134
4346
  }
4135
4347
  }