@@ -8,7 +8,7 @@ import type { PluginReport } from '../report';
88 * - category (e.g. 'performance')
99 * Also validates ``and ` `
1010 */
11- export const slugRegex = / ^ [ a - z 0 - 9 ] + (?: - [ a - z 0 - 9 ] + ) * $ / ;
11+ export const slugRegex = / ^ [ a - z \d ] + (?: - [ a - z \d ] + ) * $ / ;
1212
1313/**
1414 * Regular expression to validate a filename.
@@ -21,14 +21,12 @@ export const filenameRegex = /^(?!.*[ \\/:*?"<>|]).+$/;
2121 * @param strings
2222 */
2323export function hasDuplicateStrings ( strings : string [ ] ) : string [ ] | false {
24- const uniqueStrings = Array . from ( new Set ( strings ) ) ;
25- const duplicatedStrings = strings . filter (
26- (
27- i => v =>
28- uniqueStrings [ i ] !== v || ! ++ i
29- ) ( 0 ) ,
24+ const sortedStrings = [ ...strings ] . sort ( ) ;
25+ const duplStrings = sortedStrings . filter (
26+ ( item , index ) => index !== 0 && item === sortedStrings [ index - 1 ] ,
3027 ) ;
31- return duplicatedStrings . length === 0 ? false : duplicatedStrings ;
28+
29+ return duplStrings . length === 0 ? false : [ ...new Set ( duplStrings ) ] ;
3230}
3331
3432/**
@@ -50,10 +48,9 @@ export function hasMissingStrings(
5048 */
5149export function errorItems (
5250 items : string [ ] | false ,
53- transform : ( items : string [ ] ) => string = items => items . join ( ', ' ) ,
51+ transform : ( itemArr : string [ ] ) => string = itemArr => itemArr . join ( ', ' ) ,
5452) : string {
55- const paredItems = items ? items : [ ] ;
56- return transform ( paredItems ) ;
53+ return transform ( items || [ ] ) ;
5754}
5855
5956export function exists < T > ( value : T ) : value is NonNullable < T > {
@@ -70,46 +67,39 @@ export function getMissingRefsForCategories(
7067 categories : CategoryConfig [ ] ,
7168 plugins : PluginConfig [ ] | PluginReport [ ] ,
7269) {
73- const missingRefs : string [ ] = [ ] ;
7470 const auditRefsFromCategory = categories . flatMap ( ( { refs } ) =>
7571 refs
7672 . filter ( ( { type } ) => type === 'audit' )
7773 . map ( ( { plugin, slug } ) => `${ plugin } /${ slug } ` ) ,
7874 ) ;
79- const auditRefsFromPlugins = plugins . flatMap (
80- ( { audits, slug : pluginSlug } ) => {
81- return audits . map ( ( { slug } ) => `${ pluginSlug } /${ slug } ` ) ;
82- } ,
75+ const auditRefsFromPlugins = plugins . flatMap ( ( { audits, slug : pluginSlug } ) =>
76+ audits . map ( ( { slug } ) => `${ pluginSlug } /${ slug } ` ) ,
8377 ) ;
8478 const missingAuditRefs = hasMissingStrings (
8579 auditRefsFromCategory ,
8680 auditRefsFromPlugins ,
8781 ) ;
8882
89- if ( Array . isArray ( missingAuditRefs ) && missingAuditRefs . length > 0 ) {
90- missingRefs . push ( ...missingAuditRefs ) ;
91- }
9283 const groupRefsFromCategory = categories . flatMap ( ( { refs } ) =>
9384 refs
9485 . filter ( ( { type } ) => type === 'group' )
9586 . map ( ( { plugin, slug } ) => `${ plugin } #${ slug } (group)` ) ,
9687 ) ;
97- const groupRefsFromPlugins = plugins . flatMap (
98- ( { groups, slug : pluginSlug } ) => {
99- return Array . isArray ( groups )
100- ? groups . map ( ( { slug } ) => `${ pluginSlug } #${ slug } (group)` )
101- : [ ] ;
102- } ,
88+ const groupRefsFromPlugins = plugins . flatMap ( ( { groups, slug : pluginSlug } ) =>
89+ Array . isArray ( groups )
90+ ? groups . map ( ( { slug } ) => `${ pluginSlug } #${ slug } (group)` )
91+ : [ ] ,
10392 ) ;
10493 const missingGroupRefs = hasMissingStrings (
10594 groupRefsFromCategory ,
10695 groupRefsFromPlugins ,
10796 ) ;
108- if ( Array . isArray ( missingGroupRefs ) && missingGroupRefs . length > 0 ) {
109- missingRefs . push ( ...missingGroupRefs ) ;
110- }
11197
112- return missingRefs . length ? missingRefs : false ;
98+ const missingRefs = [ missingAuditRefs , missingGroupRefs ]
99+ . filter ( ( refs ) : refs is string [ ] => Array . isArray ( refs ) && refs . length > 0 )
100+ . flat ( ) ;
101+
102+ return missingRefs . length > 0 ? missingRefs : false ;
113103}
114104export function missingRefsForCategoriesErrorMsg (
115105 categories : CategoryConfig [ ] ,
0 commit comments