@code-pushup/models 0.55.0 → 0.57.0
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.
- package/package.json +6 -5
- package/src/index.d.ts +21 -21
- package/src/index.js +22 -0
- package/src/index.js.map +1 -0
- package/src/lib/audit-output.js +37 -0
- package/src/lib/audit-output.js.map +1 -0
- package/src/lib/audit.js +32 -0
- package/src/lib/audit.js.map +1 -0
- package/src/lib/category-config.js +47 -0
- package/src/lib/category-config.js.map +1 -0
- package/src/lib/commit.js +16 -0
- package/src/lib/commit.js.map +1 -0
- package/src/lib/core-config.d.ts +1019 -263
- package/src/lib/core-config.js +31 -0
- package/src/lib/core-config.js.map +1 -0
- package/src/lib/group.js +40 -0
- package/src/lib/group.js.map +1 -0
- package/src/lib/implementation/configuration.js +3 -0
- package/src/lib/implementation/configuration.js.map +1 -0
- package/src/lib/implementation/constants.d.ts +1 -1
- package/src/lib/implementation/constants.js +4 -0
- package/src/lib/implementation/constants.js.map +1 -0
- package/src/lib/implementation/limits.js +5 -0
- package/src/lib/implementation/limits.js.map +1 -0
- package/src/lib/implementation/schemas.d.ts +1 -13
- package/src/lib/implementation/schemas.js +128 -0
- package/src/lib/implementation/schemas.js.map +1 -0
- package/src/lib/implementation/utils.d.ts +3 -3
- package/src/lib/implementation/utils.js +72 -0
- package/src/lib/implementation/utils.js.map +1 -0
- package/src/lib/issue.js +14 -0
- package/src/lib/issue.js.map +1 -0
- package/src/lib/persist-config.js +11 -0
- package/src/lib/persist-config.js.map +1 -0
- package/src/lib/plugin-config.js +37 -0
- package/src/lib/plugin-config.js.map +1 -0
- package/src/lib/report.js +49 -0
- package/src/lib/report.js.map +1 -0
- package/src/lib/reports-diff.js +79 -0
- package/src/lib/reports-diff.js.map +1 -0
- package/src/lib/runner-config.js +26 -0
- package/src/lib/runner-config.js.map +1 -0
- package/src/lib/source.js +14 -0
- package/src/lib/source.js.map +1 -0
- package/src/lib/table.js +37 -0
- package/src/lib/table.js.map +1 -0
- package/src/lib/upload-config.js +16 -0
- package/src/lib/upload-config.js.map +1 -0
- package/index.js +0 -753
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { categoriesSchema } from './category-config.js';
|
|
3
|
+
import { getMissingRefsForCategories, missingRefsForCategoriesErrorMsg, } from './implementation/utils.js';
|
|
4
|
+
import { persistConfigSchema } from './persist-config.js';
|
|
5
|
+
import { pluginConfigSchema } from './plugin-config.js';
|
|
6
|
+
import { uploadConfigSchema } from './upload-config.js';
|
|
7
|
+
export const unrefinedCoreConfigSchema = z.object({
|
|
8
|
+
plugins: z
|
|
9
|
+
.array(pluginConfigSchema, {
|
|
10
|
+
description: 'List of plugins to be used (official, community-provided, or custom)',
|
|
11
|
+
})
|
|
12
|
+
.min(1),
|
|
13
|
+
/** portal configuration for persisting results */
|
|
14
|
+
persist: persistConfigSchema.optional(),
|
|
15
|
+
/** portal configuration for uploading results */
|
|
16
|
+
upload: uploadConfigSchema.optional(),
|
|
17
|
+
categories: categoriesSchema.optional(),
|
|
18
|
+
});
|
|
19
|
+
export const coreConfigSchema = refineCoreConfig(unrefinedCoreConfigSchema);
|
|
20
|
+
/**
|
|
21
|
+
* Add refinements to coreConfigSchema
|
|
22
|
+
* workaround for zod issue: https://github.com/colinhacks/zod/issues/454
|
|
23
|
+
*
|
|
24
|
+
*/
|
|
25
|
+
export function refineCoreConfig(schema) {
|
|
26
|
+
// categories point to existing audit or group refs
|
|
27
|
+
return schema.refine(({ categories, plugins }) => !getMissingRefsForCategories(categories, plugins), ({ categories, plugins }) => ({
|
|
28
|
+
message: missingRefsForCategoriesErrorMsg(categories, plugins),
|
|
29
|
+
}));
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=core-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core-config.js","sourceRoot":"","sources":["../../../../../packages/models/src/lib/core-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EACL,2BAA2B,EAC3B,gCAAgC,GACjC,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD,OAAO,EAAE,CAAC;SACP,KAAK,CAAC,kBAAkB,EAAE;QACzB,WAAW,EACT,sEAAsE;KACzE,CAAC;SACD,GAAG,CAAC,CAAC,CAAC;IACT,kDAAkD;IAClD,OAAO,EAAE,mBAAmB,CAAC,QAAQ,EAAE;IACvC,iDAAiD;IACjD,MAAM,EAAE,kBAAkB,CAAC,QAAQ,EAAE;IACrC,UAAU,EAAE,gBAAgB,CAAC,QAAQ,EAAE;CACxC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,yBAAyB,CAAC,CAAC;AAE5E;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAwC;IACvE,mDAAmD;IACnD,OAAO,MAAM,CAAC,MAAM,CAClB,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,EAAE,CAC1B,CAAC,2BAA2B,CAAC,UAAU,EAAE,OAAO,CAAC,EACnD,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QAC5B,OAAO,EAAE,gCAAgC,CAAC,UAAU,EAAE,OAAO,CAAC;KAC/D,CAAC,CACH,CAAC;AACJ,CAAC"}
|
package/src/lib/group.js
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { metaSchema, scorableSchema, weightedRefSchema, } from './implementation/schemas.js';
|
|
3
|
+
import { errorItems, exists, hasDuplicateStrings, } from './implementation/utils.js';
|
|
4
|
+
export const groupRefSchema = weightedRefSchema('Weighted reference to a group', "Reference slug to a group within this plugin (e.g. 'max-lines')");
|
|
5
|
+
export const groupMetaSchema = metaSchema({
|
|
6
|
+
titleDescription: 'Descriptive name for the group',
|
|
7
|
+
descriptionDescription: 'Description of the group (markdown)',
|
|
8
|
+
docsUrlDescription: 'Group documentation site',
|
|
9
|
+
description: 'Group metadata',
|
|
10
|
+
});
|
|
11
|
+
export const groupSchema = scorableSchema('A group aggregates a set of audits into a single score which can be referenced from a category. ' +
|
|
12
|
+
'E.g. the group slug "performance" groups audits and can be referenced in a category', groupRefSchema, getDuplicateRefsInGroups, duplicateRefsInGroupsErrorMsg).merge(groupMetaSchema);
|
|
13
|
+
export const groupsSchema = z
|
|
14
|
+
.array(groupSchema, {
|
|
15
|
+
description: 'List of groups',
|
|
16
|
+
})
|
|
17
|
+
.optional()
|
|
18
|
+
.refine(groups => !getDuplicateSlugsInGroups(groups), groups => ({
|
|
19
|
+
message: duplicateSlugsInGroupsErrorMsg(groups),
|
|
20
|
+
}));
|
|
21
|
+
// ============
|
|
22
|
+
// helper for validator: group refs are unique
|
|
23
|
+
function duplicateRefsInGroupsErrorMsg(groups) {
|
|
24
|
+
const duplicateRefs = getDuplicateRefsInGroups(groups);
|
|
25
|
+
return `In plugin groups the following references are not unique: ${errorItems(duplicateRefs)}`;
|
|
26
|
+
}
|
|
27
|
+
function getDuplicateRefsInGroups(groups) {
|
|
28
|
+
return hasDuplicateStrings(groups.map(({ slug: ref }) => ref).filter(exists));
|
|
29
|
+
}
|
|
30
|
+
// helper for validator: group refs are unique
|
|
31
|
+
function duplicateSlugsInGroupsErrorMsg(groups) {
|
|
32
|
+
const duplicateRefs = getDuplicateSlugsInGroups(groups);
|
|
33
|
+
return `In groups the following slugs are not unique: ${errorItems(duplicateRefs)}`;
|
|
34
|
+
}
|
|
35
|
+
function getDuplicateSlugsInGroups(groups) {
|
|
36
|
+
return Array.isArray(groups)
|
|
37
|
+
? hasDuplicateStrings(groups.map(({ slug }) => slug))
|
|
38
|
+
: false;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=group.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"group.js","sourceRoot":"","sources":["../../../../../packages/models/src/lib/group.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAEL,UAAU,EACV,cAAc,EACd,iBAAiB,GAClB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,UAAU,EACV,MAAM,EACN,mBAAmB,GACpB,MAAM,2BAA2B,CAAC;AAEnC,MAAM,CAAC,MAAM,cAAc,GAAG,iBAAiB,CAC7C,+BAA+B,EAC/B,iEAAiE,CAClE,CAAC;AAGF,MAAM,CAAC,MAAM,eAAe,GAAG,UAAU,CAAC;IACxC,gBAAgB,EAAE,gCAAgC;IAClD,sBAAsB,EAAE,qCAAqC;IAC7D,kBAAkB,EAAE,0BAA0B;IAC9C,WAAW,EAAE,gBAAgB;CAC9B,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,WAAW,GAAG,cAAc,CACvC,kGAAkG;IAChG,qFAAqF,EACvF,cAAc,EACd,wBAAwB,EACxB,6BAA6B,CAC9B,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;AAIzB,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC;KAC1B,KAAK,CAAC,WAAW,EAAE;IAClB,WAAW,EAAE,gBAAgB;CAC9B,CAAC;KACD,QAAQ,EAAE;KACV,MAAM,CACL,MAAM,CAAC,EAAE,CAAC,CAAC,yBAAyB,CAAC,MAAM,CAAC,EAC5C,MAAM,CAAC,EAAE,CAAC,CAAC;IACT,OAAO,EAAE,8BAA8B,CAAC,MAAM,CAAC;CAChD,CAAC,CACH,CAAC;AAEJ,eAAe;AAEf,8CAA8C;AAC9C,SAAS,6BAA6B,CAAC,MAAqB;IAC1D,MAAM,aAAa,GAAG,wBAAwB,CAAC,MAAM,CAAC,CAAC;IACvD,OAAO,6DAA6D,UAAU,CAC5E,aAAa,CACd,EAAE,CAAC;AACN,CAAC;AAED,SAAS,wBAAwB,CAAC,MAAqB;IACrD,OAAO,mBAAmB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;AAChF,CAAC;AAED,8CAA8C;AAC9C,SAAS,8BAA8B,CAAC,MAA2B;IACjE,MAAM,aAAa,GAAG,yBAAyB,CAAC,MAAM,CAAC,CAAC;IACxD,OAAO,iDAAiD,UAAU,CAChE,aAAa,CACd,EAAE,CAAC;AACN,CAAC;AAED,SAAS,yBAAyB,CAAC,MAA2B;IAC5D,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAC1B,CAAC,CAAC,mBAAmB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;QACrD,CAAC,CAAC,KAAK,CAAC;AACZ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configuration.js","sourceRoot":"","sources":["../../../../../../packages/models/src/lib/implementation/configuration.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAAG,oBAAoB,CAAC;AACrD,MAAM,CAAC,MAAM,6BAA6B,GAAa,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Format } from '../persist-config';
|
|
1
|
+
import type { Format } from '../persist-config.js';
|
|
2
2
|
export declare const DEFAULT_PERSIST_OUTPUT_DIR = ".code-pushup";
|
|
3
3
|
export declare const DEFAULT_PERSIST_FILENAME = "report";
|
|
4
4
|
export declare const DEFAULT_PERSIST_FORMAT: Format[];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../../../packages/models/src/lib/implementation/constants.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,0BAA0B,GAAG,cAAc,CAAC;AACzD,MAAM,CAAC,MAAM,wBAAwB,GAAG,QAAQ,CAAC;AACjD,MAAM,CAAC,MAAM,sBAAsB,GAAa,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"limits.js","sourceRoot":"","sources":["../../../../../../packages/models/src/lib/implementation/limits.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,CAAC;AACnC,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,CAAC;AACpC,MAAM,CAAC,MAAM,sBAAsB,GAAG,MAAM,CAAC;AAC7C,MAAM,CAAC,MAAM,wBAAwB,GAAG,IAAI,CAAC"}
|
|
@@ -63,19 +63,7 @@ export declare function packageVersionSchema<TRequired extends boolean>(options?
|
|
|
63
63
|
}): ZodObject<{
|
|
64
64
|
packageName: TRequired extends true ? ZodString : ZodOptional<ZodString>;
|
|
65
65
|
version: TRequired extends true ? ZodString : ZodOptional<ZodString>;
|
|
66
|
-
}
|
|
67
|
-
packageName: TRequired extends true ? ZodString : ZodOptional<ZodString>;
|
|
68
|
-
version: TRequired extends true ? ZodString : ZodOptional<ZodString>;
|
|
69
|
-
}>, any> extends infer T ? { [k in keyof T]: z.objectUtil.addQuestionMarks<z.baseObjectOutputType<{
|
|
70
|
-
packageName: TRequired extends true ? ZodString : ZodOptional<ZodString>;
|
|
71
|
-
version: TRequired extends true ? ZodString : ZodOptional<ZodString>;
|
|
72
|
-
}>, any>[k]; } : never, z.baseObjectInputType<{
|
|
73
|
-
packageName: TRequired extends true ? ZodString : ZodOptional<ZodString>;
|
|
74
|
-
version: TRequired extends true ? ZodString : ZodOptional<ZodString>;
|
|
75
|
-
}> extends infer T_1 ? { [k_1 in keyof T_1]: z.baseObjectInputType<{
|
|
76
|
-
packageName: TRequired extends true ? ZodString : ZodOptional<ZodString>;
|
|
77
|
-
version: TRequired extends true ? ZodString : ZodOptional<ZodString>;
|
|
78
|
-
}>[k_1]; } : never>;
|
|
66
|
+
}>;
|
|
79
67
|
/** Schema for a weight */
|
|
80
68
|
export declare const weightSchema: z.ZodNumber;
|
|
81
69
|
export declare function weightedRefSchema(description: string, slugDescription: string): ZodObject<{
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { MATERIAL_ICONS } from 'vscode-material-icons';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { MAX_DESCRIPTION_LENGTH, MAX_SLUG_LENGTH, MAX_TITLE_LENGTH, } from './limits.js';
|
|
4
|
+
import { filenameRegex, slugRegex } from './utils.js';
|
|
5
|
+
export const tableCellValueSchema = z
|
|
6
|
+
.union([z.string(), z.number(), z.boolean(), z.null()])
|
|
7
|
+
.default(null);
|
|
8
|
+
/**
|
|
9
|
+
* Schema for execution meta date
|
|
10
|
+
*/
|
|
11
|
+
export function executionMetaSchema(options = {
|
|
12
|
+
descriptionDate: 'Execution start date and time',
|
|
13
|
+
descriptionDuration: 'Execution duration in ms',
|
|
14
|
+
}) {
|
|
15
|
+
return z.object({
|
|
16
|
+
date: z.string({ description: options.descriptionDate }),
|
|
17
|
+
duration: z.number({ description: options.descriptionDuration }),
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
/** Schema for a slug of a categories, plugins or audits. */
|
|
21
|
+
export const slugSchema = z
|
|
22
|
+
.string({ description: 'Unique ID (human-readable, URL-safe)' })
|
|
23
|
+
.regex(slugRegex, {
|
|
24
|
+
message: 'The slug has to follow the pattern [0-9a-z] followed by multiple optional groups of -[0-9a-z]. e.g. my-slug',
|
|
25
|
+
})
|
|
26
|
+
.max(MAX_SLUG_LENGTH, {
|
|
27
|
+
message: `The slug can be max ${MAX_SLUG_LENGTH} characters long`,
|
|
28
|
+
});
|
|
29
|
+
/** Schema for a general description property */
|
|
30
|
+
export const descriptionSchema = z
|
|
31
|
+
.string({ description: 'Description (markdown)' })
|
|
32
|
+
.max(MAX_DESCRIPTION_LENGTH)
|
|
33
|
+
.optional();
|
|
34
|
+
/* Schema for a URL */
|
|
35
|
+
export const urlSchema = z.string().url();
|
|
36
|
+
/** Schema for a docsUrl */
|
|
37
|
+
export const docsUrlSchema = urlSchema
|
|
38
|
+
.optional()
|
|
39
|
+
.or(z.literal(''))
|
|
40
|
+
.describe('Documentation site'); // allow empty string (no URL validation)
|
|
41
|
+
/** Schema for a title of a plugin, category and audit */
|
|
42
|
+
export const titleSchema = z
|
|
43
|
+
.string({ description: 'Descriptive name' })
|
|
44
|
+
.max(MAX_TITLE_LENGTH);
|
|
45
|
+
/** Schema for score of audit, category or group */
|
|
46
|
+
export const scoreSchema = z
|
|
47
|
+
.number({
|
|
48
|
+
description: 'Value between 0 and 1',
|
|
49
|
+
})
|
|
50
|
+
.min(0)
|
|
51
|
+
.max(1);
|
|
52
|
+
/**
|
|
53
|
+
* Used for categories, plugins and audits
|
|
54
|
+
* @param options
|
|
55
|
+
*/
|
|
56
|
+
export function metaSchema(options) {
|
|
57
|
+
const { descriptionDescription, titleDescription, docsUrlDescription, description, } = options ?? {};
|
|
58
|
+
return z.object({
|
|
59
|
+
title: titleDescription
|
|
60
|
+
? titleSchema.describe(titleDescription)
|
|
61
|
+
: titleSchema,
|
|
62
|
+
description: descriptionDescription
|
|
63
|
+
? descriptionSchema.describe(descriptionDescription)
|
|
64
|
+
: descriptionSchema,
|
|
65
|
+
docsUrl: docsUrlDescription
|
|
66
|
+
? docsUrlSchema.describe(docsUrlDescription)
|
|
67
|
+
: docsUrlSchema,
|
|
68
|
+
}, { description });
|
|
69
|
+
}
|
|
70
|
+
/** Schema for a generalFilePath */
|
|
71
|
+
export const filePathSchema = z
|
|
72
|
+
.string()
|
|
73
|
+
.trim()
|
|
74
|
+
.min(1, { message: 'The path is invalid' });
|
|
75
|
+
/** Schema for a fileNameSchema */
|
|
76
|
+
export const fileNameSchema = z
|
|
77
|
+
.string()
|
|
78
|
+
.trim()
|
|
79
|
+
.regex(filenameRegex, {
|
|
80
|
+
message: `The filename has to be valid`,
|
|
81
|
+
})
|
|
82
|
+
.min(1, { message: 'The file name is invalid' });
|
|
83
|
+
/** Schema for a positiveInt */
|
|
84
|
+
export const positiveIntSchema = z.number().int().positive();
|
|
85
|
+
export const nonnegativeNumberSchema = z.number().nonnegative();
|
|
86
|
+
export function packageVersionSchema(options) {
|
|
87
|
+
const { versionDescription = 'NPM version of the package', required } = options ?? {};
|
|
88
|
+
const packageSchema = z.string({ description: 'NPM package name' });
|
|
89
|
+
const versionSchema = z.string({ description: versionDescription });
|
|
90
|
+
return z.object({
|
|
91
|
+
packageName: required ? packageSchema : packageSchema.optional(),
|
|
92
|
+
version: required ? versionSchema : versionSchema.optional(),
|
|
93
|
+
}, { description: 'NPM package name and version of a published package' });
|
|
94
|
+
}
|
|
95
|
+
/** Schema for a weight */
|
|
96
|
+
export const weightSchema = nonnegativeNumberSchema.describe('Coefficient for the given score (use weight 0 if only for display)');
|
|
97
|
+
export function weightedRefSchema(description, slugDescription) {
|
|
98
|
+
return z.object({
|
|
99
|
+
slug: slugSchema.describe(slugDescription),
|
|
100
|
+
weight: weightSchema.describe('Weight used to calculate score'),
|
|
101
|
+
}, { description });
|
|
102
|
+
}
|
|
103
|
+
export function scorableSchema(description, refSchema, duplicateCheckFn, duplicateMessageFn) {
|
|
104
|
+
return z.object({
|
|
105
|
+
slug: slugSchema.describe('Human-readable unique ID, e.g. "performance"'),
|
|
106
|
+
refs: z
|
|
107
|
+
.array(refSchema)
|
|
108
|
+
.min(1, { message: 'In a category, there has to be at least one ref' })
|
|
109
|
+
// refs are unique
|
|
110
|
+
.refine(refs => !duplicateCheckFn(refs), refs => ({
|
|
111
|
+
message: duplicateMessageFn(refs),
|
|
112
|
+
}))
|
|
113
|
+
// category weights are correct
|
|
114
|
+
.refine(hasNonZeroWeightedRef, refs => {
|
|
115
|
+
const affectedRefs = refs.map(ref => ref.slug).join(', ');
|
|
116
|
+
return {
|
|
117
|
+
message: `In a category, there has to be at least one ref with weight > 0. Affected refs: ${affectedRefs}`,
|
|
118
|
+
};
|
|
119
|
+
}),
|
|
120
|
+
}, { description });
|
|
121
|
+
}
|
|
122
|
+
export const materialIconSchema = z.enum(MATERIAL_ICONS, {
|
|
123
|
+
description: 'Icon from VSCode Material Icons extension',
|
|
124
|
+
});
|
|
125
|
+
function hasNonZeroWeightedRef(refs) {
|
|
126
|
+
return refs.reduce((acc, { weight }) => weight + acc, 0) !== 0;
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=schemas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../../../../../packages/models/src/lib/implementation/schemas.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { CategoryConfig } from '../category-config';
|
|
2
|
-
import type { PluginConfig } from '../plugin-config';
|
|
3
|
-
import type { PluginReport } from '../report';
|
|
1
|
+
import type { CategoryConfig } from '../category-config.js';
|
|
2
|
+
import type { PluginConfig } from '../plugin-config.js';
|
|
3
|
+
import type { PluginReport } from '../report.js';
|
|
4
4
|
/**
|
|
5
5
|
* Regular expression to validate a slug for categories, plugins and audits.
|
|
6
6
|
* - audit (e.g. 'max-lines')
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Regular expression to validate a slug for categories, plugins and audits.
|
|
3
|
+
* - audit (e.g. 'max-lines')
|
|
4
|
+
* - category (e.g. 'performance')
|
|
5
|
+
* Also validates ``and ` `
|
|
6
|
+
*/
|
|
7
|
+
export const slugRegex = /^[a-z\d]+(?:-[a-z\d]+)*$/;
|
|
8
|
+
/**
|
|
9
|
+
* Regular expression to validate a filename.
|
|
10
|
+
*/
|
|
11
|
+
export const filenameRegex = /^(?!.*[ \\/:*?"<>|]).+$/;
|
|
12
|
+
/**
|
|
13
|
+
* helper function to validate string arrays
|
|
14
|
+
*
|
|
15
|
+
* @param strings
|
|
16
|
+
*/
|
|
17
|
+
export function hasDuplicateStrings(strings) {
|
|
18
|
+
const sortedStrings = strings.toSorted();
|
|
19
|
+
const duplStrings = sortedStrings.filter((item, index) => index !== 0 && item === sortedStrings[index - 1]);
|
|
20
|
+
return duplStrings.length === 0 ? false : [...new Set(duplStrings)];
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* helper function to validate string arrays
|
|
24
|
+
*
|
|
25
|
+
* @param toCheck
|
|
26
|
+
* @param existing
|
|
27
|
+
*/
|
|
28
|
+
export function hasMissingStrings(toCheck, existing) {
|
|
29
|
+
const nonExisting = toCheck.filter(s => !existing.includes(s));
|
|
30
|
+
return nonExisting.length === 0 ? false : nonExisting;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* helper for error items
|
|
34
|
+
*/
|
|
35
|
+
export function errorItems(items, transform = itemArr => itemArr.join(', ')) {
|
|
36
|
+
return transform(items || []);
|
|
37
|
+
}
|
|
38
|
+
export function exists(value) {
|
|
39
|
+
return value != null;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Get category references that do not point to any audit or group
|
|
43
|
+
* @param categories
|
|
44
|
+
* @param plugins
|
|
45
|
+
* @returns Array of missing references.
|
|
46
|
+
*/
|
|
47
|
+
export function getMissingRefsForCategories(categories, plugins) {
|
|
48
|
+
if (!categories || categories.length === 0) {
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
const auditRefsFromCategory = categories.flatMap(({ refs }) => refs
|
|
52
|
+
.filter(({ type }) => type === 'audit')
|
|
53
|
+
.map(({ plugin, slug }) => `${plugin}/${slug}`));
|
|
54
|
+
const auditRefsFromPlugins = plugins.flatMap(({ audits, slug: pluginSlug }) => audits.map(({ slug }) => `${pluginSlug}/${slug}`));
|
|
55
|
+
const missingAuditRefs = hasMissingStrings(auditRefsFromCategory, auditRefsFromPlugins);
|
|
56
|
+
const groupRefsFromCategory = categories.flatMap(({ refs }) => refs
|
|
57
|
+
.filter(({ type }) => type === 'group')
|
|
58
|
+
.map(({ plugin, slug }) => `${plugin}#${slug} (group)`));
|
|
59
|
+
const groupRefsFromPlugins = plugins.flatMap(({ groups, slug: pluginSlug }) => Array.isArray(groups)
|
|
60
|
+
? groups.map(({ slug }) => `${pluginSlug}#${slug} (group)`)
|
|
61
|
+
: []);
|
|
62
|
+
const missingGroupRefs = hasMissingStrings(groupRefsFromCategory, groupRefsFromPlugins);
|
|
63
|
+
const missingRefs = [missingAuditRefs, missingGroupRefs]
|
|
64
|
+
.filter((refs) => Array.isArray(refs) && refs.length > 0)
|
|
65
|
+
.flat();
|
|
66
|
+
return missingRefs.length > 0 ? missingRefs : false;
|
|
67
|
+
}
|
|
68
|
+
export function missingRefsForCategoriesErrorMsg(categories, plugins) {
|
|
69
|
+
const missingRefs = getMissingRefsForCategories(categories, plugins);
|
|
70
|
+
return `The following category references need to point to an audit or group: ${errorItems(missingRefs)}`;
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../../packages/models/src/lib/implementation/utils.ts"],"names":[],"mappings":"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"}
|
package/src/lib/issue.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { MAX_ISSUE_MESSAGE_LENGTH } from './implementation/limits.js';
|
|
3
|
+
import { sourceFileLocationSchema } from './source.js';
|
|
4
|
+
export const issueSeveritySchema = z.enum(['info', 'warning', 'error'], {
|
|
5
|
+
description: 'Severity level',
|
|
6
|
+
});
|
|
7
|
+
export const issueSchema = z.object({
|
|
8
|
+
message: z
|
|
9
|
+
.string({ description: 'Descriptive error message' })
|
|
10
|
+
.max(MAX_ISSUE_MESSAGE_LENGTH),
|
|
11
|
+
severity: issueSeveritySchema,
|
|
12
|
+
source: sourceFileLocationSchema.optional(),
|
|
13
|
+
}, { description: 'Issue information' });
|
|
14
|
+
//# sourceMappingURL=issue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"issue.js","sourceRoot":"","sources":["../../../../../packages/models/src/lib/issue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAEvD,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE;IACtE,WAAW,EAAE,gBAAgB;CAC9B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CACjC;IACE,OAAO,EAAE,CAAC;SACP,MAAM,CAAC,EAAE,WAAW,EAAE,2BAA2B,EAAE,CAAC;SACpD,GAAG,CAAC,wBAAwB,CAAC;IAChC,QAAQ,EAAE,mBAAmB;IAC7B,MAAM,EAAE,wBAAwB,CAAC,QAAQ,EAAE;CAC5C,EACD,EAAE,WAAW,EAAE,mBAAmB,EAAE,CACrC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { fileNameSchema, filePathSchema } from './implementation/schemas.js';
|
|
3
|
+
export const formatSchema = z.enum(['json', 'md']);
|
|
4
|
+
export const persistConfigSchema = z.object({
|
|
5
|
+
outputDir: filePathSchema.describe('Artifacts folder').optional(),
|
|
6
|
+
filename: fileNameSchema
|
|
7
|
+
.describe('Artifacts file name (without extension)')
|
|
8
|
+
.optional(),
|
|
9
|
+
format: z.array(formatSchema).optional(),
|
|
10
|
+
});
|
|
11
|
+
//# sourceMappingURL=persist-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persist-config.js","sourceRoot":"","sources":["../../../../../packages/models/src/lib/persist-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7E,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;AAGnD,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,SAAS,EAAE,cAAc,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,QAAQ,EAAE;IACjE,QAAQ,EAAE,cAAc;SACrB,QAAQ,CAAC,yCAAyC,CAAC;SACnD,QAAQ,EAAE;IACb,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE;CACzC,CAAC,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { pluginAuditsSchema } from './audit.js';
|
|
3
|
+
import { groupsSchema } from './group.js';
|
|
4
|
+
import { materialIconSchema, metaSchema, packageVersionSchema, slugSchema, } from './implementation/schemas.js';
|
|
5
|
+
import { errorItems, hasMissingStrings } from './implementation/utils.js';
|
|
6
|
+
import { runnerConfigSchema, runnerFunctionSchema } from './runner-config.js';
|
|
7
|
+
export const pluginMetaSchema = packageVersionSchema()
|
|
8
|
+
.merge(metaSchema({
|
|
9
|
+
titleDescription: 'Descriptive name',
|
|
10
|
+
descriptionDescription: 'Description (markdown)',
|
|
11
|
+
docsUrlDescription: 'Plugin documentation site',
|
|
12
|
+
description: 'Plugin metadata',
|
|
13
|
+
}))
|
|
14
|
+
.merge(z.object({
|
|
15
|
+
slug: slugSchema.describe('Unique plugin slug within core config'),
|
|
16
|
+
icon: materialIconSchema,
|
|
17
|
+
}));
|
|
18
|
+
export const pluginDataSchema = z.object({
|
|
19
|
+
runner: z.union([runnerConfigSchema, runnerFunctionSchema]),
|
|
20
|
+
audits: pluginAuditsSchema,
|
|
21
|
+
groups: groupsSchema,
|
|
22
|
+
});
|
|
23
|
+
export const pluginConfigSchema = pluginMetaSchema
|
|
24
|
+
.merge(pluginDataSchema)
|
|
25
|
+
// every listed group ref points to an audit within the plugin
|
|
26
|
+
.refine(pluginCfg => !getMissingRefsFromGroups(pluginCfg), pluginCfg => ({
|
|
27
|
+
message: missingRefsFromGroupsErrorMsg(pluginCfg),
|
|
28
|
+
}));
|
|
29
|
+
// helper for validator: every listed group ref points to an audit within the plugin
|
|
30
|
+
function missingRefsFromGroupsErrorMsg(pluginCfg) {
|
|
31
|
+
const missingRefs = getMissingRefsFromGroups(pluginCfg);
|
|
32
|
+
return `The following group references need to point to an existing audit in this plugin config: ${errorItems(missingRefs)}`;
|
|
33
|
+
}
|
|
34
|
+
function getMissingRefsFromGroups(pluginCfg) {
|
|
35
|
+
return hasMissingStrings(pluginCfg.groups?.flatMap(({ refs: audits }) => audits.map(({ slug: ref }) => ref)) ?? [], pluginCfg.audits.map(({ slug }) => slug));
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=plugin-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-config.js","sourceRoot":"","sources":["../../../../../packages/models/src/lib/plugin-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EACL,kBAAkB,EAClB,UAAU,EACV,oBAAoB,EACpB,UAAU,GACX,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE9E,MAAM,CAAC,MAAM,gBAAgB,GAAG,oBAAoB,EAAE;KACnD,KAAK,CACJ,UAAU,CAAC;IACT,gBAAgB,EAAE,kBAAkB;IACpC,sBAAsB,EAAE,wBAAwB;IAChD,kBAAkB,EAAE,2BAA2B;IAC/C,WAAW,EAAE,iBAAiB;CAC/B,CAAC,CACH;KACA,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;IACP,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,uCAAuC,CAAC;IAClE,IAAI,EAAE,kBAAkB;CACzB,CAAC,CACH,CAAC;AAGJ,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,kBAAkB,EAAE,oBAAoB,CAAC,CAAC;IAC3D,MAAM,EAAE,kBAAkB;IAC1B,MAAM,EAAE,YAAY;CACrB,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,kBAAkB,GAAG,gBAAgB;KAC/C,KAAK,CAAC,gBAAgB,CAAC;IACxB,8DAA8D;KAC7D,MAAM,CACL,SAAS,CAAC,EAAE,CAAC,CAAC,wBAAwB,CAAC,SAAS,CAAC,EACjD,SAAS,CAAC,EAAE,CAAC,CAAC;IACZ,OAAO,EAAE,6BAA6B,CAAC,SAAS,CAAC;CAClD,CAAC,CACH,CAAC;AAIJ,oFAAoF;AACpF,SAAS,6BAA6B,CAAC,SAAqB;IAC1D,MAAM,WAAW,GAAG,wBAAwB,CAAC,SAAS,CAAC,CAAC;IACxD,OAAO,4FAA4F,UAAU,CAC3G,WAAW,CACZ,EAAE,CAAC;AACN,CAAC;AAED,SAAS,wBAAwB,CAAC,SAAqB;IACrD,OAAO,iBAAiB,CACtB,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAC7C,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CACnC,IAAI,EAAE,EACP,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CACzC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { auditOutputSchema } from './audit-output.js';
|
|
3
|
+
import { auditSchema } from './audit.js';
|
|
4
|
+
import { categoryConfigSchema } from './category-config.js';
|
|
5
|
+
import { commitSchema } from './commit.js';
|
|
6
|
+
import { groupSchema } from './group.js';
|
|
7
|
+
import { executionMetaSchema, packageVersionSchema, } from './implementation/schemas.js';
|
|
8
|
+
import { errorItems, getMissingRefsForCategories, hasMissingStrings, missingRefsForCategoriesErrorMsg, } from './implementation/utils.js';
|
|
9
|
+
import { pluginMetaSchema } from './plugin-config.js';
|
|
10
|
+
export const auditReportSchema = auditSchema.merge(auditOutputSchema);
|
|
11
|
+
export const pluginReportSchema = pluginMetaSchema
|
|
12
|
+
.merge(executionMetaSchema({
|
|
13
|
+
descriptionDate: 'Start date and time of plugin run',
|
|
14
|
+
descriptionDuration: 'Duration of the plugin run in ms',
|
|
15
|
+
}))
|
|
16
|
+
.merge(z.object({
|
|
17
|
+
audits: z.array(auditReportSchema).min(1),
|
|
18
|
+
groups: z.array(groupSchema).optional(),
|
|
19
|
+
}))
|
|
20
|
+
.refine(pluginReport => !getMissingRefsFromGroups(pluginReport.audits, pluginReport.groups ?? []), pluginReport => ({
|
|
21
|
+
message: missingRefsFromGroupsErrorMsg(pluginReport.audits, pluginReport.groups ?? []),
|
|
22
|
+
}));
|
|
23
|
+
// every listed group ref points to an audit within the plugin report
|
|
24
|
+
function missingRefsFromGroupsErrorMsg(audits, groups) {
|
|
25
|
+
const missingRefs = getMissingRefsFromGroups(audits, groups);
|
|
26
|
+
return `group references need to point to an existing audit in this plugin report: ${errorItems(missingRefs)}`;
|
|
27
|
+
}
|
|
28
|
+
function getMissingRefsFromGroups(audits, groups) {
|
|
29
|
+
return hasMissingStrings(groups.flatMap(({ refs: auditRefs }) => auditRefs.map(({ slug: ref }) => ref)), audits.map(({ slug }) => slug));
|
|
30
|
+
}
|
|
31
|
+
export const reportSchema = packageVersionSchema({
|
|
32
|
+
versionDescription: 'NPM version of the CLI',
|
|
33
|
+
required: true,
|
|
34
|
+
})
|
|
35
|
+
.merge(executionMetaSchema({
|
|
36
|
+
descriptionDate: 'Start date and time of the collect run',
|
|
37
|
+
descriptionDuration: 'Duration of the collect run in ms',
|
|
38
|
+
}))
|
|
39
|
+
.merge(z.object({
|
|
40
|
+
plugins: z.array(pluginReportSchema).min(1),
|
|
41
|
+
categories: z.array(categoryConfigSchema).optional(),
|
|
42
|
+
commit: commitSchema
|
|
43
|
+
.describe('Git commit for which report was collected')
|
|
44
|
+
.nullable(),
|
|
45
|
+
}, { description: 'Collect output data' }))
|
|
46
|
+
.refine(({ categories, plugins }) => !getMissingRefsForCategories(categories, plugins), ({ categories, plugins }) => ({
|
|
47
|
+
message: missingRefsForCategoriesErrorMsg(categories, plugins),
|
|
48
|
+
}));
|
|
49
|
+
//# sourceMappingURL=report.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"report.js","sourceRoot":"","sources":["../../../../../packages/models/src/lib/report.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAc,WAAW,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EACL,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,UAAU,EACV,2BAA2B,EAC3B,iBAAiB,EACjB,gCAAgC,GACjC,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,MAAM,CAAC,MAAM,iBAAiB,GAAG,WAAW,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;AAGtE,MAAM,CAAC,MAAM,kBAAkB,GAAG,gBAAgB;KAC/C,KAAK,CACJ,mBAAmB,CAAC;IAClB,eAAe,EAAE,mCAAmC;IACpD,mBAAmB,EAAE,kCAAkC;CACxD,CAAC,CACH;KACA,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;IACP,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACzC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE;CACxC,CAAC,CACH;KACA,MAAM,CACL,YAAY,CAAC,EAAE,CACb,CAAC,wBAAwB,CAAC,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,MAAM,IAAI,EAAE,CAAC,EAC3E,YAAY,CAAC,EAAE,CAAC,CAAC;IACf,OAAO,EAAE,6BAA6B,CACpC,YAAY,CAAC,MAAM,EACnB,YAAY,CAAC,MAAM,IAAI,EAAE,CAC1B;CACF,CAAC,CACH,CAAC;AAIJ,qEAAqE;AACrE,SAAS,6BAA6B,CAAC,MAAqB,EAAE,MAAe;IAC3E,MAAM,WAAW,GAAG,wBAAwB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7D,OAAO,8EAA8E,UAAU,CAC7F,WAAW,CACZ,EAAE,CAAC;AACN,CAAC;AAED,SAAS,wBAAwB,CAAC,MAAqB,EAAE,MAAe;IACtE,OAAO,iBAAiB,CACtB,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,CACrC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CACtC,EACD,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAC/B,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,oBAAoB,CAAC;IAC/C,kBAAkB,EAAE,wBAAwB;IAC5C,QAAQ,EAAE,IAAI;CACf,CAAC;KACC,KAAK,CACJ,mBAAmB,CAAC;IAClB,eAAe,EAAE,wCAAwC;IACzD,mBAAmB,EAAE,mCAAmC;CACzD,CAAC,CACH;KACA,KAAK,CACJ,CAAC,CAAC,MAAM,CACN;IACE,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3C,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,QAAQ,EAAE;IACpD,MAAM,EAAE,YAAY;SACjB,QAAQ,CAAC,2CAA2C,CAAC;SACrD,QAAQ,EAAE;CACd,EACD,EAAE,WAAW,EAAE,qBAAqB,EAAE,CACvC,CACF;KACA,MAAM,CACL,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,EAAE,CAC1B,CAAC,2BAA2B,CAAC,UAAU,EAAE,OAAO,CAAC,EACnD,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;IAC5B,OAAO,EAAE,gCAAgC,CAAC,UAAU,EAAE,OAAO,CAAC;CAC/D,CAAC,CACH,CAAC"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { auditDisplayValueSchema, auditOutputSchema, auditValueSchema, } from './audit-output.js';
|
|
3
|
+
import { commitSchema } from './commit.js';
|
|
4
|
+
import { docsUrlSchema, executionMetaSchema, packageVersionSchema, scoreSchema, slugSchema, titleSchema, urlSchema, } from './implementation/schemas.js';
|
|
5
|
+
import { pluginMetaSchema } from './plugin-config.js';
|
|
6
|
+
function makeComparisonSchema(schema) {
|
|
7
|
+
const sharedDescription = schema.description || 'Result';
|
|
8
|
+
return z.object({
|
|
9
|
+
before: schema.describe(`${sharedDescription} (source commit)`),
|
|
10
|
+
after: schema.describe(`${sharedDescription} (target commit)`),
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
function makeArraysComparisonSchema(diffSchema, resultSchema, description) {
|
|
14
|
+
return z.object({
|
|
15
|
+
changed: z.array(diffSchema),
|
|
16
|
+
unchanged: z.array(resultSchema),
|
|
17
|
+
added: z.array(resultSchema),
|
|
18
|
+
removed: z.array(resultSchema),
|
|
19
|
+
}, { description });
|
|
20
|
+
}
|
|
21
|
+
const scorableMetaSchema = z.object({
|
|
22
|
+
slug: slugSchema,
|
|
23
|
+
title: titleSchema,
|
|
24
|
+
docsUrl: docsUrlSchema,
|
|
25
|
+
});
|
|
26
|
+
const scorableWithPluginMetaSchema = scorableMetaSchema.merge(z.object({
|
|
27
|
+
plugin: pluginMetaSchema
|
|
28
|
+
.pick({ slug: true, title: true, docsUrl: true })
|
|
29
|
+
.describe('Plugin which defines it'),
|
|
30
|
+
}));
|
|
31
|
+
const scorableDiffSchema = scorableMetaSchema.merge(z.object({
|
|
32
|
+
scores: makeComparisonSchema(scoreSchema)
|
|
33
|
+
.merge(z.object({
|
|
34
|
+
diff: z
|
|
35
|
+
.number()
|
|
36
|
+
.min(-1)
|
|
37
|
+
.max(1)
|
|
38
|
+
.describe('Score change (`scores.after - scores.before`)'),
|
|
39
|
+
}))
|
|
40
|
+
.describe('Score comparison'),
|
|
41
|
+
}));
|
|
42
|
+
const scorableWithPluginDiffSchema = scorableDiffSchema.merge(scorableWithPluginMetaSchema);
|
|
43
|
+
export const categoryDiffSchema = scorableDiffSchema;
|
|
44
|
+
export const groupDiffSchema = scorableWithPluginDiffSchema;
|
|
45
|
+
export const auditDiffSchema = scorableWithPluginDiffSchema.merge(z.object({
|
|
46
|
+
values: makeComparisonSchema(auditValueSchema)
|
|
47
|
+
.merge(z.object({
|
|
48
|
+
diff: z
|
|
49
|
+
.number()
|
|
50
|
+
.describe('Value change (`values.after - values.before`)'),
|
|
51
|
+
}))
|
|
52
|
+
.describe('Audit `value` comparison'),
|
|
53
|
+
displayValues: makeComparisonSchema(auditDisplayValueSchema).describe('Audit `displayValue` comparison'),
|
|
54
|
+
}));
|
|
55
|
+
export const categoryResultSchema = scorableMetaSchema.merge(z.object({ score: scoreSchema }));
|
|
56
|
+
export const groupResultSchema = scorableWithPluginMetaSchema.merge(z.object({ score: scoreSchema }));
|
|
57
|
+
export const auditResultSchema = scorableWithPluginMetaSchema.merge(auditOutputSchema.pick({ score: true, value: true, displayValue: true }));
|
|
58
|
+
export const reportsDiffSchema = z
|
|
59
|
+
.object({
|
|
60
|
+
commits: makeComparisonSchema(commitSchema)
|
|
61
|
+
.nullable()
|
|
62
|
+
.describe('Commits identifying compared reports'),
|
|
63
|
+
portalUrl: urlSchema
|
|
64
|
+
.optional()
|
|
65
|
+
.describe('Link to comparison page in Code PushUp portal'),
|
|
66
|
+
label: z.string().optional().describe('Label (e.g. project name)'),
|
|
67
|
+
categories: makeArraysComparisonSchema(categoryDiffSchema, categoryResultSchema, 'Changes affecting categories'),
|
|
68
|
+
groups: makeArraysComparisonSchema(groupDiffSchema, groupResultSchema, 'Changes affecting groups'),
|
|
69
|
+
audits: makeArraysComparisonSchema(auditDiffSchema, auditResultSchema, 'Changes affecting audits'),
|
|
70
|
+
})
|
|
71
|
+
.merge(packageVersionSchema({
|
|
72
|
+
versionDescription: 'NPM version of the CLI (when `compare` was run)',
|
|
73
|
+
required: true,
|
|
74
|
+
}))
|
|
75
|
+
.merge(executionMetaSchema({
|
|
76
|
+
descriptionDate: 'Start date and time of the compare run',
|
|
77
|
+
descriptionDuration: 'Duration of the compare run in ms',
|
|
78
|
+
}));
|
|
79
|
+
//# sourceMappingURL=reports-diff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reports-diff.js","sourceRoot":"","sources":["../../../../../packages/models/src/lib/reports-diff.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { auditOutputsSchema } from './audit-output.js';
|
|
3
|
+
import { filePathSchema } from './implementation/schemas.js';
|
|
4
|
+
export const outputTransformSchema = z
|
|
5
|
+
.function()
|
|
6
|
+
.args(z.unknown())
|
|
7
|
+
.returns(z.union([auditOutputsSchema, z.promise(auditOutputsSchema)]));
|
|
8
|
+
export const runnerConfigSchema = z.object({
|
|
9
|
+
command: z.string({
|
|
10
|
+
description: 'Shell command to execute',
|
|
11
|
+
}),
|
|
12
|
+
args: z.array(z.string({ description: 'Command arguments' })).optional(),
|
|
13
|
+
outputFile: filePathSchema.describe('Output path'),
|
|
14
|
+
outputTransform: outputTransformSchema.optional(),
|
|
15
|
+
}, {
|
|
16
|
+
description: 'How to execute runner',
|
|
17
|
+
});
|
|
18
|
+
export const onProgressSchema = z
|
|
19
|
+
.function()
|
|
20
|
+
.args(z.unknown())
|
|
21
|
+
.returns(z.void());
|
|
22
|
+
export const runnerFunctionSchema = z
|
|
23
|
+
.function()
|
|
24
|
+
.args(onProgressSchema.optional())
|
|
25
|
+
.returns(z.union([auditOutputsSchema, z.promise(auditOutputsSchema)]));
|
|
26
|
+
//# sourceMappingURL=runner-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runner-config.js","sourceRoot":"","sources":["../../../../../packages/models/src/lib/runner-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC;KACnC,QAAQ,EAAE;KACV,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;KACjB,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,kBAAkB,EAAE,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;AAIzE,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CACxC;IACE,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;QAChB,WAAW,EAAE,0BAA0B;KACxC,CAAC;IACF,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,mBAAmB,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE;IACxE,UAAU,EAAE,cAAc,CAAC,QAAQ,CAAC,aAAa,CAAC;IAClD,eAAe,EAAE,qBAAqB,CAAC,QAAQ,EAAE;CAClD,EACD;IACE,WAAW,EAAE,uBAAuB;CACrC,CACF,CAAC;AAIF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC;KAC9B,QAAQ,EAAE;KACV,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;KACjB,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AAGrB,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC;KAClC,QAAQ,EAAE;KACV,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC;KACjC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,kBAAkB,EAAE,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC"}
|