Skip to content

Commit c094e3e

Browse files
committed
chore(models): fix ESLint issues, enable all rules
1 parent 0accec7 commit c094e3e

5 files changed

Lines changed: 50 additions & 78 deletions

File tree

packages/models/.eslintrc.json

Lines changed: 26 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,28 @@
11
{
2-
"extends": ["./code-pushup.eslintrc.json"],
3-
// temporarily disable failing rules so `nx lint` passes
4-
// number of errors/warnings per rule recorded at Tue Nov 28 2023 15:38:24 GMT+0100 (Central European Standard Time)
5-
"rules": {
6-
"arrow-body-style": "off", // 3 warnings
7-
"no-magic-numbers": "off", // 4 warnings
8-
"no-param-reassign": "off", // 1 error
9-
"@typescript-eslint/no-shadow": "off", // 10 warnings
10-
"@typescript-eslint/no-unnecessary-condition": "off", // 7 warnings
11-
"@typescript-eslint/no-unsafe-argument": "off", // 2 errors
12-
"@typescript-eslint/no-unsafe-call": "off", // 1 error
13-
"@typescript-eslint/prefer-nullish-coalescing": "off", // 2 warnings
14-
"functional/immutable-data": "off", // 2 errors, 22 warnings
15-
"functional/no-let": "off", // 1 warning
16-
"unicorn/better-regex": "off", // 1 warning
17-
"unicorn/explicit-length-check": "off", // 1 warning
18-
"unicorn/numeric-separators-style": "off", // 1 warning
19-
"unicorn/prefer-logical-operator-over-ternary": "off", // 1 warning
20-
"unicorn/prefer-spread": "off" // 1 warning
21-
}
2+
"extends": ["../../.eslintrc.json"],
3+
"ignorePatterns": ["!**/*"],
4+
"overrides": [
5+
{
6+
"files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
7+
"rules": {}
8+
},
9+
{
10+
"files": ["*.ts", "*.tsx"],
11+
"parserOptions": {
12+
"project": ["packages/models/tsconfig.*?.json"]
13+
},
14+
"rules": {}
15+
},
16+
{
17+
"files": ["*.js", "*.jsx"],
18+
"rules": {}
19+
},
20+
{
21+
"files": ["*.json"],
22+
"parser": "jsonc-eslint-parser",
23+
"rules": {
24+
"@nx/dependency-checks": ["error"]
25+
}
26+
}
27+
]
2228
}

packages/models/code-pushup.eslintrc.json

Lines changed: 0 additions & 28 deletions
This file was deleted.

packages/models/src/lib/implementation/schemas.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ export function metaSchema(options?: {
9090
titleDescription,
9191
docsUrlDescription,
9292
description,
93-
} = options || {};
93+
} = options ?? {};
9494
return z.object(
9595
{
9696
title: titleSchema(titleDescription),

packages/models/src/lib/implementation/utils.ts

Lines changed: 19 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import type { PluginReport } from '../report';
88
* - category (e.g. 'performance')
99
* Also validates ``and ` `
1010
*/
11-
export const slugRegex = /^[a-z0-9]+(?:-[a-z0-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
*/
2323
export 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
*/
5149
export 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

5956
export 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
}
114104
export function missingRefsForCategoriesErrorMsg(
115105
categories: CategoryConfig[],

packages/models/src/lib/implementation/utils.unit.test.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,10 @@ describe('hasDuplicateStrings', () => {
6868
expect(hasDuplicateStrings(['a', 'b', 'a', 'c'])).toEqual(['a']);
6969
});
7070

71+
it('should return a duplicate only once', () => {
72+
expect(hasDuplicateStrings(['a', 'b', 'a', 'a'])).toEqual(['a']);
73+
});
74+
7175
it('should return false for a list with 1 item', () => {
7276
expect(hasDuplicateStrings(['a'])).toBe(false);
7377
});

0 commit comments

Comments
 (0)