Skip to content

Commit f52cc75

Browse files
committed
feat(models): validate plugin icons using portal-client package
1 parent dd0a180 commit f52cc75

17 files changed

+95
-22
lines changed

esbuild.config.js

+7-3
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,13 @@ esbuild.build({
1212
build.onEnd(result => {
1313
if (result.errors.length > 0) return;
1414

15-
execSync(
16-
`tsc --emitDeclarationOnly --project packages/${project}/tsconfig.lib.json --outDir dist`,
17-
);
15+
try {
16+
execSync(
17+
`tsc --emitDeclarationOnly --project packages/${project}/tsconfig.lib.json --outDir dist`,
18+
);
19+
} catch (err) {
20+
console.error(err);
21+
}
1822
});
1923
},
2024
},

package-lock.json

+62-5
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
"node": ">=18.16"
1212
},
1313
"dependencies": {
14+
"@code-pushup/portal-client": "^0.1.2",
1415
"bundle-require": "^4.0.1",
1516
"chalk": "^5.3.0",
1617
"cliui": "^8.0.1",

packages/cli/src/lib/cli.spec.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1+
import { CollectOptions } from '@quality-metrics/utils';
12
import { join } from 'path';
23
import { describe, expect, it } from 'vitest';
34
import { yargsCli } from './cli';
4-
import { middlewares } from './middlewares';
5-
import { options as defaultOptions } from './options';
6-
import { CollectOptions } from '@quality-metrics/core';
75
import { getDirname } from './implementation/helper.mock';
6+
import { middlewares } from './middlewares';
87
import { GlobalOptions } from './model';
8+
import { options as defaultOptions } from './options';
99

1010
const __dirname = getDirname(import.meta.url);
1111
const withDirName = (path: string) => join(__dirname, path);

packages/cli/src/lib/implementation/mock/cli-config.mock.js

+1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ module.exports = {
1616
},
1717
slug: 'execute-plugin',
1818
title: 'execute plugin',
19+
icon: 'javascript',
1920
},
2021
],
2122
};
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
module.exports = {
2-
persist: { outputPath: 'cjs-out.json' },
2+
persist: { outputPath: 'tmp/cjs-out.json' },
33
plugins: [],
44
categories: [],
55
};
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
export default {
2-
persist: { outputPath: 'mjs-out.json' },
2+
persist: { outputPath: 'tmp/mjs-out.json' },
33
plugins: [],
44
categories: [],
55
};

packages/core/src/lib/execute-plugin.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@ import {
33
PluginOutput,
44
auditOutputsSchema,
55
} from '@quality-metrics/models';
6+
import { ProcessObserver, executeProcess } from '@quality-metrics/utils';
67
import { readFile } from 'fs/promises';
78
import { join } from 'path';
8-
import { executeProcess, ProcessObserver } from '@quality-metrics/utils';
99

1010
/**
1111
* Error thrown when plugin output is invalid.
@@ -48,7 +48,7 @@ export async function executePlugin(
4848
pluginConfig: PluginConfig,
4949
observer?: ProcessObserver,
5050
): Promise<PluginOutput> {
51-
const { slug, title, description, docsUrl, version, packageName } =
51+
const { slug, title, icon, description, docsUrl, version, packageName } =
5252
pluginConfig;
5353
const { args, command } = pluginConfig.runner;
5454

@@ -73,6 +73,7 @@ export async function executePlugin(
7373
packageName,
7474
slug,
7575
title,
76+
icon,
7677
description,
7778
docsUrl,
7879
date,

packages/core/src/lib/index.spec.ts

-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import { CollectOptions, collect } from './collect';
66
const baseOptions: CollectOptions = {
77
...mockCoreConfig(),
88
configPath: '',
9-
interactive: true,
109
verbose: false,
1110
};
1211

packages/models/package.json

+1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
"name": "@quality-metrics/models",
33
"version": "0.0.1",
44
"dependencies": {
5+
"@code-pushup/portal-client": "^0.1.2",
56
"zod": "^3.22.1"
67
}
78
}

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

+7-3
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { MATERIAL_ICONS, MaterialIcon } from '@code-pushup/portal-client';
12
import { z } from 'zod';
23
import {
34
executionMetaSchema,
@@ -17,6 +18,11 @@ import {
1718
hasMissingStrings,
1819
} from './implementation/utils';
1920

21+
export const materialIconSchema = z.enum(
22+
MATERIAL_ICONS as [MaterialIcon, MaterialIcon, ...MaterialIcon[]],
23+
{ description: 'Icon from VSCode Material Icons extension' },
24+
);
25+
2026
export const pluginSchema = packageVersionSchema({
2127
optional: true,
2228
})
@@ -31,9 +37,7 @@ export const pluginSchema = packageVersionSchema({
3137
.merge(
3238
z.object({
3339
slug: slugSchema('References plugin. ID (unique within core config)'),
34-
icon: z.union([z.unknown(), z.string()], {
35-
description: 'Icon from VSCode Material Icons extension',
36-
}),
40+
icon: materialIconSchema,
3741
}),
3842
);
3943

packages/models/test/schema.mock.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ export function mockPluginConfig(opt?: {
5959
},
6060
slug: pluginSlug,
6161
title: 'execute plugin',
62+
icon: 'nrwl',
6263
description: 'Plugin description for ' + pluginSlug,
6364
docsUrl: 'https://my-plugin.docs.dev?' + pluginSlug,
6465
};
@@ -204,7 +205,7 @@ export function mockPluginReport(opt?: {
204205
title: 'Title of ' + pluginSlug,
205206
description: 'Plugin description of ' + pluginSlug,
206207
docsUrl: `http://plugin.io/docs/${pluginSlug}`,
207-
icon: 'socket',
208+
icon: 'nrwl',
208209
version: '0.0.1',
209210
packageName: '@' + pluginSlug,
210211
audits: Array.isArray(auditSlug)
@@ -256,7 +257,7 @@ export function mockUploadConfig(opt?: Partial<UploadConfig>): UploadConfig {
256257

257258
export function mockAuditOutputs(opt?: {
258259
auditSlug: string | string[];
259-
}): AuditOutputs {
260+
}): AuditOutput[] {
260261
let { auditSlug } = opt || {};
261262
auditSlug = auditSlug || 'mock-audit-output-slug';
262263
return Array.isArray(auditSlug)

packages/models/test/test-data/config-and-report-lighthouse.mock.ts

+1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ export const lighthousePlugin: () => PluginConfig = () =>
1010
},
1111
slug: 'lighthouse',
1212
title: 'lighthouse',
13+
icon: 'lighthouse',
1314
description: '',
1415
docsUrl: `https://github.com/GoogleChrome/lighthouse/tree/main/README.md`,
1516
groups: [],

packages/models/test/test-data/config-and-report-nx-validators.mock.ts

+1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ export const nxValidatorsPlugin: () => PluginConfig = (): PluginConfig =>
1010
},
1111
slug: 'nx-validators',
1212
title: 'NxValidatorsPlugin',
13+
icon: 'nrwl',
1314
docsUrl: `https://github.com/BioPhoton/nx-validators/tree/main/README.md`,
1415
groups: [
1516
{

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

+1
Original file line numberDiff line numberDiff line change
@@ -33,5 +33,6 @@ export function eslintPlugin(_: ESLintPluginConfig): PluginConfig {
3333
},
3434
slug: 'eslint',
3535
title: 'execute plugin',
36+
icon: 'eslint',
3637
};
3738
}

packages/plugin-lighthouse/src/lib/lighthouse-plugin.ts

+1
Original file line numberDiff line numberDiff line change
@@ -33,5 +33,6 @@ export function lighthousePlugin(_: LighthousePluginConfig): PluginConfig {
3333
},
3434
slug: 'lighthouse',
3535
title: 'ChromeDevTools Lighthouse',
36+
icon: 'lighthouse',
3637
};
3738
}

packages/utils/src/lib/collect/implementation/mock/schema-helper.mock.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ export function mockPluginReport(opt?: {
178178
slug: pluginSlug,
179179
docsUrl: `http://plugin.io/docs/${pluginSlug}`,
180180
title: 'Mock plugin Name',
181-
icon: 'socket',
181+
icon: 'nrwl',
182182
audits: Array.isArray(auditSlug)
183183
? auditSlug.map(a => mockAuditReport({ auditSlug: a }))
184184
: [mockAuditReport({ auditSlug })],

0 commit comments

Comments
 (0)