@code-pushup/models 0.56.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.
Files changed (49) hide show
  1. package/package.json +6 -5
  2. package/src/index.d.ts +21 -21
  3. package/src/index.js +22 -0
  4. package/src/index.js.map +1 -0
  5. package/src/lib/audit-output.js +37 -0
  6. package/src/lib/audit-output.js.map +1 -0
  7. package/src/lib/audit.js +32 -0
  8. package/src/lib/audit.js.map +1 -0
  9. package/src/lib/category-config.js +47 -0
  10. package/src/lib/category-config.js.map +1 -0
  11. package/src/lib/commit.js +16 -0
  12. package/src/lib/commit.js.map +1 -0
  13. package/src/lib/core-config.d.ts +1019 -263
  14. package/src/lib/core-config.js +31 -0
  15. package/src/lib/core-config.js.map +1 -0
  16. package/src/lib/group.js +40 -0
  17. package/src/lib/group.js.map +1 -0
  18. package/src/lib/implementation/configuration.js +3 -0
  19. package/src/lib/implementation/configuration.js.map +1 -0
  20. package/src/lib/implementation/constants.d.ts +1 -1
  21. package/src/lib/implementation/constants.js +4 -0
  22. package/src/lib/implementation/constants.js.map +1 -0
  23. package/src/lib/implementation/limits.js +5 -0
  24. package/src/lib/implementation/limits.js.map +1 -0
  25. package/src/lib/implementation/schemas.d.ts +1 -13
  26. package/src/lib/implementation/schemas.js +128 -0
  27. package/src/lib/implementation/schemas.js.map +1 -0
  28. package/src/lib/implementation/utils.d.ts +3 -3
  29. package/src/lib/implementation/utils.js +72 -0
  30. package/src/lib/implementation/utils.js.map +1 -0
  31. package/src/lib/issue.js +14 -0
  32. package/src/lib/issue.js.map +1 -0
  33. package/src/lib/persist-config.js +11 -0
  34. package/src/lib/persist-config.js.map +1 -0
  35. package/src/lib/plugin-config.js +37 -0
  36. package/src/lib/plugin-config.js.map +1 -0
  37. package/src/lib/report.js +49 -0
  38. package/src/lib/report.js.map +1 -0
  39. package/src/lib/reports-diff.js +79 -0
  40. package/src/lib/reports-diff.js.map +1 -0
  41. package/src/lib/runner-config.js +26 -0
  42. package/src/lib/runner-config.js.map +1 -0
  43. package/src/lib/source.js +14 -0
  44. package/src/lib/source.js.map +1 -0
  45. package/src/lib/table.js +37 -0
  46. package/src/lib/table.js.map +1 -0
  47. package/src/lib/upload-config.js +16 -0
  48. package/src/lib/upload-config.js.map +1 -0
  49. 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"}
@@ -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,3 @@
1
+ export const CONFIG_FILE_NAME = 'code-pushup.config';
2
+ export const SUPPORTED_CONFIG_FILE_FORMATS = ['ts', 'mjs', 'js'];
3
+ //# sourceMappingURL=configuration.js.map
@@ -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,4 @@
1
+ export const DEFAULT_PERSIST_OUTPUT_DIR = '.code-pushup';
2
+ export const DEFAULT_PERSIST_FILENAME = 'report';
3
+ export const DEFAULT_PERSIST_FORMAT = ['json', 'md'];
4
+ //# sourceMappingURL=constants.js.map
@@ -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,5 @@
1
+ export const MAX_SLUG_LENGTH = 128;
2
+ export const MAX_TITLE_LENGTH = 256;
3
+ export const MAX_DESCRIPTION_LENGTH = 65_536;
4
+ export const MAX_ISSUE_MESSAGE_LENGTH = 1024;
5
+ //# sourceMappingURL=limits.js.map
@@ -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
- }, z.UnknownKeysParam, z.ZodTypeAny, z.objectUtil.addQuestionMarks<z.baseObjectOutputType<{
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":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAoD,CAAC,EAAE,MAAM,KAAK,CAAC;AAC1E,OAAO,EACL,sBAAsB,EACtB,eAAe,EACf,gBAAgB,GACjB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEtD,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC;KAClC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;KACtD,OAAO,CAAC,IAAI,CAAC,CAAC;AAGjB;;GAEG;AACH,MAAM,UAAU,mBAAmB,CACjC,UAGI;IACF,eAAe,EAAE,+BAA+B;IAChD,mBAAmB,EAAE,0BAA0B;CAChD;IAED,OAAO,CAAC,CAAC,MAAM,CAAC;QACd,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,eAAe,EAAE,CAAC;QACxD,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,mBAAmB,EAAE,CAAC;KACjE,CAAC,CAAC;AACL,CAAC;AAED,4DAA4D;AAC5D,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC;KACxB,MAAM,CAAC,EAAE,WAAW,EAAE,sCAAsC,EAAE,CAAC;KAC/D,KAAK,CAAC,SAAS,EAAE;IAChB,OAAO,EACL,6GAA6G;CAChH,CAAC;KACD,GAAG,CAAC,eAAe,EAAE;IACpB,OAAO,EAAE,uBAAuB,eAAe,kBAAkB;CAClE,CAAC,CAAC;AAEL,iDAAiD;AACjD,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC;KAC/B,MAAM,CAAC,EAAE,WAAW,EAAE,wBAAwB,EAAE,CAAC;KACjD,GAAG,CAAC,sBAAsB,CAAC;KAC3B,QAAQ,EAAE,CAAC;AAEd,sBAAsB;AACtB,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC;AAE1C,4BAA4B;AAC5B,MAAM,CAAC,MAAM,aAAa,GAAG,SAAS;KACnC,QAAQ,EAAE;KACV,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;KACjB,QAAQ,CAAC,oBAAoB,CAAC,CAAC,CAAC,yCAAyC;AAE5E,yDAAyD;AACzD,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC;KACzB,MAAM,CAAC,EAAE,WAAW,EAAE,kBAAkB,EAAE,CAAC;KAC3C,GAAG,CAAC,gBAAgB,CAAC,CAAC;AAEzB,mDAAmD;AACnD,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC;KACzB,MAAM,CAAC;IACN,WAAW,EAAE,uBAAuB;CACrC,CAAC;KACD,GAAG,CAAC,CAAC,CAAC;KACN,GAAG,CAAC,CAAC,CAAC,CAAC;AAEV;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,OAK1B;IACC,MAAM,EACJ,sBAAsB,EACtB,gBAAgB,EAChB,kBAAkB,EAClB,WAAW,GACZ,GAAG,OAAO,IAAI,EAAE,CAAC;IAClB,OAAO,CAAC,CAAC,MAAM,CACb;QACE,KAAK,EAAE,gBAAgB;YACrB,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,gBAAgB,CAAC;YACxC,CAAC,CAAC,WAAW;QACf,WAAW,EAAE,sBAAsB;YACjC,CAAC,CAAC,iBAAiB,CAAC,QAAQ,CAAC,sBAAsB,CAAC;YACpD,CAAC,CAAC,iBAAiB;QACrB,OAAO,EAAE,kBAAkB;YACzB,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,kBAAkB,CAAC;YAC5C,CAAC,CAAC,aAAa;KAClB,EACD,EAAE,WAAW,EAAE,CAChB,CAAC;AACJ,CAAC;AAED,mCAAmC;AACnC,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC;KAC5B,MAAM,EAAE;KACR,IAAI,EAAE;KACN,GAAG,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,qBAAqB,EAAE,CAAC,CAAC;AAE9C,kCAAkC;AAClC,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC;KAC5B,MAAM,EAAE;KACR,IAAI,EAAE;KACN,KAAK,CAAC,aAAa,EAAE;IACpB,OAAO,EAAE,8BAA8B;CACxC,CAAC;KACD,GAAG,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,0BAA0B,EAAE,CAAC,CAAC;AAEnD,+BAA+B;AAC/B,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;AAE7D,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE,CAAC;AAEhE,MAAM,UAAU,oBAAoB,CAA4B,OAG/D;IACC,MAAM,EAAE,kBAAkB,GAAG,4BAA4B,EAAE,QAAQ,EAAE,GACnE,OAAO,IAAI,EAAE,CAAC;IAChB,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,kBAAkB,EAAE,CAAC,CAAC;IACpE,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,kBAAkB,EAAE,CAAC,CAAC;IACpE,OAAO,CAAC,CAAC,MAAM,CACb;QACE,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE;QAChE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE;KAC7D,EACD,EAAE,WAAW,EAAE,qDAAqD,EAAE,CAItE,CAAC;AACL,CAAC;AAED,0BAA0B;AAC1B,MAAM,CAAC,MAAM,YAAY,GAAG,uBAAuB,CAAC,QAAQ,CAC1D,oEAAoE,CACrE,CAAC;AAEF,MAAM,UAAU,iBAAiB,CAC/B,WAAmB,EACnB,eAAuB;IAEvB,OAAO,CAAC,CAAC,MAAM,CACb;QACE,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,eAAe,CAAC;QAC1C,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC,gCAAgC,CAAC;KAChE,EACD,EAAE,WAAW,EAAE,CAChB,CAAC;AACJ,CAAC;AAID,MAAM,UAAU,cAAc,CAC5B,WAAmB,EACnB,SAAY,EACZ,gBAA6D,EAC7D,kBAAqD;IAErD,OAAO,CAAC,CAAC,MAAM,CACb;QACE,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,8CAA8C,CAAC;QACzE,IAAI,EAAE,CAAC;aACJ,KAAK,CAAC,SAAS,CAAC;aAChB,GAAG,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,iDAAiD,EAAE,CAAC;YACvE,kBAAkB;aACjB,MAAM,CACL,IAAI,CAAC,EAAE,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAC/B,IAAI,CAAC,EAAE,CAAC,CAAC;YACP,OAAO,EAAE,kBAAkB,CAAC,IAAI,CAAC;SAClC,CAAC,CACH;YACD,+BAA+B;aAC9B,MAAM,CAAC,qBAAqB,EAAE,IAAI,CAAC,EAAE;YACpC,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1D,OAAO;gBACL,OAAO,EAAE,mFAAmF,YAAY,EAAE;aAC3G,CAAC;QACJ,CAAC,CAAC;KACL,EACD,EAAE,WAAW,EAAE,CAChB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,IAAI,CAAC,cAAc,EAAE;IACvD,WAAW,EAAE,2CAA2C;CACzD,CAAC,CAAC;AAKH,SAAS,qBAAqB,CAAC,IAAW;IACxC,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;AACjE,CAAC"}
@@ -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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"}
@@ -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":"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"}
@@ -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":"AAAA,OAAO,EAAmB,CAAC,EAAE,MAAM,KAAK,CAAC;AACzC,OAAO,EACL,uBAAuB,EACvB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,oBAAoB,EACpB,WAAW,EACX,UAAU,EACV,WAAW,EACX,SAAS,GACV,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,SAAS,oBAAoB,CAAuB,MAAS;IAC3D,MAAM,iBAAiB,GAAG,MAAM,CAAC,WAAW,IAAI,QAAQ,CAAC;IACzD,OAAO,CAAC,CAAC,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,iBAAiB,kBAAkB,CAAC;QAC/D,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,iBAAiB,kBAAkB,CAAC;KAC/D,CAAC,CAAC;AACL,CAAC;AAED,SAAS,0BAA0B,CAGjC,UAAiB,EAAE,YAAqB,EAAE,WAAmB;IAC7D,OAAO,CAAC,CAAC,MAAM,CACb;QACE,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC;QAC5B,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC;QAChC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC;QAC5B,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC;KAC/B,EACD,EAAE,WAAW,EAAE,CAChB,CAAC;AACJ,CAAC;AAED,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,IAAI,EAAE,UAAU;IAChB,KAAK,EAAE,WAAW;IAClB,OAAO,EAAE,aAAa;CACvB,CAAC,CAAC;AACH,MAAM,4BAA4B,GAAG,kBAAkB,CAAC,KAAK,CAC3D,CAAC,CAAC,MAAM,CAAC;IACP,MAAM,EAAE,gBAAgB;SACrB,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;SAChD,QAAQ,CAAC,yBAAyB,CAAC;CACvC,CAAC,CACH,CAAC;AAEF,MAAM,kBAAkB,GAAG,kBAAkB,CAAC,KAAK,CACjD,CAAC,CAAC,MAAM,CAAC;IACP,MAAM,EAAE,oBAAoB,CAAC,WAAW,CAAC;SACtC,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;QACP,IAAI,EAAE,CAAC;aACJ,MAAM,EAAE;aACR,GAAG,CAAC,CAAC,CAAC,CAAC;aACP,GAAG,CAAC,CAAC,CAAC;aACN,QAAQ,CAAC,+CAA+C,CAAC;KAC7D,CAAC,CACH;SACA,QAAQ,CAAC,kBAAkB,CAAC;CAChC,CAAC,CACH,CAAC;AACF,MAAM,4BAA4B,GAAG,kBAAkB,CAAC,KAAK,CAC3D,4BAA4B,CAC7B,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,kBAAkB,CAAC;AACrD,MAAM,CAAC,MAAM,eAAe,GAAG,4BAA4B,CAAC;AAC5D,MAAM,CAAC,MAAM,eAAe,GAAG,4BAA4B,CAAC,KAAK,CAC/D,CAAC,CAAC,MAAM,CAAC;IACP,MAAM,EAAE,oBAAoB,CAAC,gBAAgB,CAAC;SAC3C,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;QACP,IAAI,EAAE,CAAC;aACJ,MAAM,EAAE;aACR,QAAQ,CAAC,+CAA+C,CAAC;KAC7D,CAAC,CACH;SACA,QAAQ,CAAC,0BAA0B,CAAC;IACvC,aAAa,EAAE,oBAAoB,CAAC,uBAAuB,CAAC,CAAC,QAAQ,CACnE,iCAAiC,CAClC;CACF,CAAC,CACH,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG,kBAAkB,CAAC,KAAK,CAC1D,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CACjC,CAAC;AACF,MAAM,CAAC,MAAM,iBAAiB,GAAG,4BAA4B,CAAC,KAAK,CACjE,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CACjC,CAAC;AACF,MAAM,CAAC,MAAM,iBAAiB,GAAG,4BAA4B,CAAC,KAAK,CACjE,iBAAiB,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CACzE,CAAC;AASF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC;KAC/B,MAAM,CAAC;IACN,OAAO,EAAE,oBAAoB,CAAC,YAAY,CAAC;SACxC,QAAQ,EAAE;SACV,QAAQ,CAAC,sCAAsC,CAAC;IACnD,SAAS,EAAE,SAAS;SACjB,QAAQ,EAAE;SACV,QAAQ,CAAC,+CAA+C,CAAC;IAC5D,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IAClE,UAAU,EAAE,0BAA0B,CACpC,kBAAkB,EAClB,oBAAoB,EACpB,8BAA8B,CAC/B;IACD,MAAM,EAAE,0BAA0B,CAChC,eAAe,EACf,iBAAiB,EACjB,0BAA0B,CAC3B;IACD,MAAM,EAAE,0BAA0B,CAChC,eAAe,EACf,iBAAiB,EACjB,0BAA0B,CAC3B;CACF,CAAC;KACD,KAAK,CACJ,oBAAoB,CAAC;IACnB,kBAAkB,EAAE,iDAAiD;IACrE,QAAQ,EAAE,IAAI;CACf,CAAC,CACH;KACA,KAAK,CACJ,mBAAmB,CAAC;IAClB,eAAe,EAAE,wCAAwC;IACzD,mBAAmB,EAAE,mCAAmC;CACzD,CAAC,CACH,CAAC"}
@@ -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"}