Skip to content

Commit 8d16719

Browse files
committed
chore(models): rename AuditGroup entities to Group
1 parent 355fcf1 commit 8d16719

17 files changed

Lines changed: 94 additions & 96 deletions

File tree

examples/plugins/src/package-json/src/scoring.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
import { AuditGroup, CategoryRef } from '@code-pushup/models';
1+
import { CategoryRef, Group } from '@code-pushup/models';
22
import { pluginSlug } from './constants';
33
import { dependenciesAuditMeta } from './integration/dependencies.audit';
44
import { licenseAuditMeta } from './integration/license.audit';
55
import { typeAuditInfoMeta } from './integration/type.audit';
66

77
const documentationGroupSlug = 'documentation';
8-
export const documentationGroup: AuditGroup = {
8+
export const documentationGroup: Group = {
99
slug: documentationGroupSlug,
1010
title: 'Documentation specific audits',
1111
description:
@@ -25,7 +25,7 @@ export const documentationGroupRef: CategoryRef = {
2525
};
2626

2727
const performanceGroupSlug = 'performance';
28-
export const performanceGroup: AuditGroup = {
28+
export const performanceGroup: Group = {
2929
slug: performanceGroupSlug,
3030
title: 'Performance specific audits',
3131
description: 'A set of audits focusing on compile and runtime performance',
@@ -44,7 +44,7 @@ export const performanceGroupRef: CategoryRef = {
4444
};
4545

4646
const versionControlGroupSlug = 'version-control';
47-
export const versionControlGroup: AuditGroup = {
47+
export const versionControlGroup: Group = {
4848
slug: versionControlGroupSlug,
4949
title: 'Version Control',
5050
description: 'A set of audits related to version control',

packages/cli/docs/custom-plugins.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -501,21 +501,21 @@ async function runnerFunction(options: Options): Promise<AuditOutputs> {
501501

502502
### Audit groups
503503

504-
As an optional property a plugin can maintain `groups` as an array of [`AuditGroup`s](@TODO).
504+
As an optional property a plugin can maintain `groups` as an array of [`Group`s](@TODO).
505505
While [categories](#plugins-and-categories) can score audits across plugins, groups are only targeting plugins within a plugin.
506506
For simple plugins this is not needed but it is beneficial in bigger plugins as audit groups also simplify the configuration.
507507

508508
An audit group maintains:
509509

510-
- metadata about the group [AuditGroupMeta](@TODO)
511-
- a list of referenced audits under `refs` as [AuditGroupRef](@TODO) array
510+
- metadata about the group [GroupMeta](@TODO)
511+
- a list of referenced audits under `refs` as [GroupRef](@TODO) array
512512

513513
The minimum information of an audit group looks like this:
514514

515515
```typescript
516-
import { AuditGroup } from '@code-pushup/models';
516+
import { Group } from '@code-pushup/models';
517517

518-
const myAuditGroup: AuditGroup = {
518+
const myGroup: Group = {
519519
slug: 'performance',
520520
refs: [
521521
{

packages/models/src/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ export {
1717
refineCoreConfig,
1818
unrefinedCoreConfigSchema,
1919
} from './lib/core-config';
20-
export { AuditGroup, AuditGroupRef, auditGroupSchema } from './lib/group';
20+
export { Group, GroupRef, groupSchema } from './lib/group';
2121
export {
2222
PERSIST_FILENAME,
2323
PERSIST_FORMAT,

packages/models/src/lib/group.ts

Lines changed: 20 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -11,31 +11,31 @@ import {
1111
hasDuplicateStrings,
1212
} from './implementation/utils';
1313

14-
export const auditGroupRefSchema = weightedRefSchema(
15-
'Weighted references to audits',
16-
"Reference slug to an audit within this plugin (e.g. 'max-lines')",
14+
export const groupRefSchema = weightedRefSchema(
15+
'Weighted reference to a group',
16+
"Reference slug to a group within this plugin (e.g. 'max-lines')",
1717
);
18-
export type AuditGroupRef = z.infer<typeof auditGroupRefSchema>;
18+
export type GroupRef = z.infer<typeof groupRefSchema>;
1919

20-
export const auditGroupMetaSchema = metaSchema({
20+
export const groupMetaSchema = metaSchema({
2121
titleDescription: 'Descriptive name for the group',
2222
descriptionDescription: 'Description of the group (markdown)',
2323
docsUrlDescription: 'Group documentation site',
2424
description: 'Group metadata',
2525
});
26-
export type AuditGroupMeta = z.infer<typeof auditGroupMetaSchema>;
26+
export type GroupMeta = z.infer<typeof groupMetaSchema>;
2727

28-
export const auditGroupSchema = scorableSchema(
29-
'An audit group aggregates a set of audits into a single score which can be referenced from a category. ' +
28+
export const groupSchema = scorableSchema(
29+
'A group aggregates a set of audits into a single score which can be referenced from a category. ' +
3030
'E.g. the group slug "performance" groups audits and can be referenced in a category',
31-
auditGroupRefSchema,
31+
groupRefSchema,
3232
getDuplicateRefsInGroups,
3333
duplicateRefsInGroupsErrorMsg,
34-
).merge(auditGroupMetaSchema);
35-
export type AuditGroup = z.infer<typeof auditGroupSchema>;
34+
).merge(groupMetaSchema);
35+
export type Group = z.infer<typeof groupSchema>;
3636

37-
export const auditGroupsSchema = z
38-
.array(auditGroupSchema, {
37+
export const groupsSchema = z
38+
.array(groupSchema, {
3939
description: 'List of groups',
4040
})
4141
.optional()
@@ -49,26 +49,24 @@ export const auditGroupsSchema = z
4949
// ============
5050

5151
// helper for validator: group refs are unique
52-
function duplicateRefsInGroupsErrorMsg(groupAudits: WeightedRef[]) {
53-
const duplicateRefs = getDuplicateRefsInGroups(groupAudits);
54-
return `In plugin groups the audit refs are not unique: ${errorItems(
52+
function duplicateRefsInGroupsErrorMsg(groups: WeightedRef[]) {
53+
const duplicateRefs = getDuplicateRefsInGroups(groups);
54+
return `In plugin groups the following references are not unique: ${errorItems(
5555
duplicateRefs,
5656
)}`;
5757
}
5858

59-
function getDuplicateRefsInGroups(groupAudits: WeightedRef[]) {
60-
return hasDuplicateStrings(
61-
groupAudits.map(({ slug: ref }) => ref).filter(exists),
62-
);
59+
function getDuplicateRefsInGroups(groups: WeightedRef[]) {
60+
return hasDuplicateStrings(groups.map(({ slug: ref }) => ref).filter(exists));
6361
}
6462

6563
// helper for validator: group refs are unique
66-
function duplicateSlugsInGroupsErrorMsg(groups: AuditGroup[] | undefined) {
64+
function duplicateSlugsInGroupsErrorMsg(groups: Group[] | undefined) {
6765
const duplicateRefs = getDuplicateSlugsInGroups(groups);
6866
return `In groups the slugs are not unique: ${errorItems(duplicateRefs)}`;
6967
}
7068

71-
function getDuplicateSlugsInGroups(groups: AuditGroup[] | undefined) {
69+
function getDuplicateSlugsInGroups(groups: Group[] | undefined) {
7270
return Array.isArray(groups)
7371
? hasDuplicateStrings(groups.map(({ slug }) => slug))
7472
: false;
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
import { describe, expect, it } from 'vitest';
22
import { config } from '../../test';
3-
import { auditGroupSchema } from './group';
3+
import { groupSchema } from './group';
44

5-
describe('auditGroupSchema', () => {
5+
describe('groupSchema', () => {
66
it('should throw if a group has duplicate audit refs', () => {
77
const group = config().plugins[1].groups[0];
88
group.refs = [...group.refs, group.refs[0]];
99

10-
expect(() => auditGroupSchema.parse(group)).toThrow(
11-
'In plugin groups the audit refs are not unique',
10+
expect(() => groupSchema.parse(group)).toThrow(
11+
'In plugin groups the following references are not unique',
1212
);
1313
});
1414
});

packages/models/src/lib/plugin-config.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { z } from 'zod';
22
import { pluginAuditsSchema } from './audit';
3-
import { auditGroupsSchema } from './group';
3+
import { groupsSchema } from './group';
44
import {
55
materialIconSchema,
66
metaSchema,
@@ -32,7 +32,7 @@ export type PluginMeta = z.infer<typeof pluginMetaSchema>;
3232
export const pluginDataSchema = z.object({
3333
runner: z.union([runnerConfigSchema, runnerFunctionSchema]),
3434
audits: pluginAuditsSchema,
35-
groups: auditGroupsSchema,
35+
groups: groupsSchema,
3636
});
3737
type PluginData = z.infer<typeof pluginDataSchema>;
3838

packages/models/src/lib/report.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { z } from 'zod';
22
import { auditSchema } from './audit';
33
import { auditOutputSchema } from './audit-output';
44
import { categoryConfigSchema } from './category-config';
5-
import { auditGroupSchema } from './group';
5+
import { groupSchema } from './group';
66
import {
77
executionMetaSchema,
88
packageVersionSchema,
@@ -22,7 +22,7 @@ export const pluginReportSchema = pluginMetaSchema
2222
.merge(
2323
z.object({
2424
audits: z.array(auditReportSchema),
25-
groups: z.array(auditGroupSchema).optional(),
25+
groups: z.array(groupSchema).optional(),
2626
}),
2727
);
2828
export type PluginReport = z.infer<typeof pluginReportSchema>;

packages/models/test/fixtures/lighthouse-plugin.mock.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import { join } from 'path';
2-
import type { AuditGroup, PluginReport } from '../../src';
2+
import type { Group, PluginReport } from '../../src';
33
import { Audit, PluginConfig } from '../../src';
44
import { LIGHTHOUSE_AUDIT_REPORTS_MAP } from './lighthouse-audits.mock';
55
import { echoRunnerConfig } from './runner-config.mock';
66

7-
const PLUGIN_GROUP_PERFORMANCE: AuditGroup = {
7+
const PLUGIN_GROUP_PERFORMANCE: Group = {
88
slug: 'performance',
99
title: 'Performance',
1010
refs: [

packages/plugin-eslint/src/lib/meta/groups.ts

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
import type { Rule } from 'eslint';
2-
import type { AuditGroup, AuditGroupRef } from '@code-pushup/models';
2+
import type { Group, GroupRef } from '@code-pushup/models';
33
import { objectToKeys, slugify } from '@code-pushup/utils';
44
import { ruleIdToSlug } from './hash';
55
import { type RuleData, parseRuleId } from './rules';
66

77
type RuleType = NonNullable<Rule.RuleMetaData['type']>;
88

99
// docs on meta.type: https://eslint.org/docs/latest/extend/custom-rules#rule-structure
10-
const typeGroups: Record<RuleType, Omit<AuditGroup, 'refs'>> = {
10+
const typeGroups: Record<RuleType, Omit<Group, 'refs'>> = {
1111
problem: {
1212
slug: 'problems',
1313
title: 'Problems',
@@ -28,7 +28,7 @@ const typeGroups: Record<RuleType, Omit<AuditGroup, 'refs'>> = {
2828
},
2929
};
3030

31-
export function groupsFromRuleTypes(rules: RuleData[]): AuditGroup[] {
31+
export function groupsFromRuleTypes(rules: RuleData[]): Group[] {
3232
const allTypes = objectToKeys(typeGroups);
3333

3434
const auditSlugsMap = rules.reduce<Partial<Record<RuleType, string[]>>>(
@@ -46,14 +46,13 @@ export function groupsFromRuleTypes(rules: RuleData[]): AuditGroup[] {
4646
.map(type => ({
4747
...typeGroups[type],
4848
refs:
49-
auditSlugsMap[type]?.map(
50-
(slug): AuditGroupRef => ({ slug, weight: 1 }),
51-
) ?? [],
49+
auditSlugsMap[type]?.map((slug): GroupRef => ({ slug, weight: 1 })) ??
50+
[],
5251
}))
5352
.filter(group => group.refs.length);
5453
}
5554

56-
export function groupsFromRuleCategories(rules: RuleData[]): AuditGroup[] {
55+
export function groupsFromRuleCategories(rules: RuleData[]): Group[] {
5756
const categoriesMap = rules.reduce<Record<string, Record<string, string[]>>>(
5857
(acc, { meta: { docs }, ruleId, options }) => {
5958
// meta.docs.category still used by some popular plugins (e.g. import, react, functional)
@@ -80,7 +79,7 @@ export function groupsFromRuleCategories(rules: RuleData[]): AuditGroup[] {
8079
return Object.entries(categoriesMap)
8180
.flatMap(([plugin, categories]) =>
8281
Object.entries(categories).map(
83-
([category, slugs]): AuditGroup => ({
82+
([category, slugs]): Group => ({
8483
slug: `${slugify(plugin)}-${slugify(category)}`,
8584
title: `${category} (${plugin})`,
8685
refs: slugs.map(slug => ({ slug, weight: 1 })),

packages/plugin-eslint/src/lib/meta/groups.unit.test.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type { AuditGroup } from '@code-pushup/models';
1+
import type { Group } from '@code-pushup/models';
22
import { groupsFromRuleCategories, groupsFromRuleTypes } from './groups';
33
import type { RuleData } from './rules';
44

@@ -121,7 +121,7 @@ const eslintRules: RuleData[] = [
121121

122122
describe('groupsFromRuleTypes', () => {
123123
it("should create groups based on rules' meta.type", () => {
124-
expect(groupsFromRuleTypes(eslintRules)).toEqual<AuditGroup[]>([
124+
expect(groupsFromRuleTypes(eslintRules)).toEqual<Group[]>([
125125
{
126126
slug: 'problems',
127127
title: 'Problems',
@@ -148,7 +148,7 @@ describe('groupsFromRuleTypes', () => {
148148

149149
describe('groupsFromRuleCategories', () => {
150150
it("should create groups based on rules' meta.docs.category", () => {
151-
expect(groupsFromRuleCategories(eslintRules)).toEqual<AuditGroup[]>([
151+
expect(groupsFromRuleCategories(eslintRules)).toEqual<Group[]>([
152152
{
153153
slug: 'react-best-practices',
154154
title: 'Best Practices (react)',

0 commit comments

Comments
 (0)