@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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-pushup/models",
3
- "version": "0.56.0",
3
+ "version": "0.57.0",
4
4
  "license": "MIT",
5
5
  "description": "Model definitions and validators for the Code PushUp CLI",
6
6
  "homepage": "https://github.com/code-pushup/cli/tree/main/packages/models#readme",
@@ -26,10 +26,11 @@
26
26
  "access": "public"
27
27
  },
28
28
  "type": "module",
29
- "main": "./index.js",
30
- "types": "./src/index.d.ts",
31
29
  "dependencies": {
32
30
  "zod": "^3.22.1",
33
31
  "vscode-material-icons": "^0.1.0"
34
- }
35
- }
32
+ },
33
+ "module": "./src/index.js",
34
+ "main": "./src/index.js",
35
+ "types": "./src/index.d.ts"
36
+ }
package/src/index.d.ts CHANGED
@@ -1,21 +1,21 @@
1
- export { type TableCellValue, tableCellValueSchema, } from './lib/implementation/schemas';
2
- export { type SourceFileLocation, sourceFileLocationSchema, } from './lib/source';
3
- export { type Audit, auditSchema } from './lib/audit';
4
- export { type AuditDetails, type AuditOutput, type AuditOutputs, auditDetailsSchema, auditOutputSchema, auditOutputsSchema, } from './lib/audit-output';
5
- export { type CategoryConfig, type CategoryRef, categoryConfigSchema, categoryRefSchema, } from './lib/category-config';
6
- export { type Commit, commitSchema } from './lib/commit';
7
- export { type CoreConfig, coreConfigSchema } from './lib/core-config';
8
- export { type Group, type GroupRef, type GroupMeta, groupRefSchema, groupSchema, } from './lib/group';
9
- export { CONFIG_FILE_NAME, SUPPORTED_CONFIG_FILE_FORMATS, } from './lib/implementation/configuration';
10
- export { DEFAULT_PERSIST_FILENAME, DEFAULT_PERSIST_FORMAT, DEFAULT_PERSIST_OUTPUT_DIR, } from './lib/implementation/constants';
11
- export { MAX_DESCRIPTION_LENGTH, MAX_ISSUE_MESSAGE_LENGTH, MAX_SLUG_LENGTH, MAX_TITLE_LENGTH, } from './lib/implementation/limits';
12
- export { type MaterialIcon, materialIconSchema, } from './lib/implementation/schemas';
13
- export { exists } from './lib/implementation/utils';
14
- export { type TableAlignment, tableAlignmentSchema, type TableRowPrimitive, tableRowPrimitiveSchema, type TableRowObject, tableRowObjectSchema, type TableColumnPrimitive, tableColumnPrimitiveSchema, type TableColumnObject, tableColumnObjectSchema, type Table, tableSchema, } from './lib/table';
15
- export { type Issue, type IssueSeverity, issueSchema, issueSeveritySchema, } from './lib/issue';
16
- export { type Format, type PersistConfig, formatSchema, persistConfigSchema, } from './lib/persist-config';
17
- export { type PluginConfig, type PluginMeta, pluginConfigSchema, pluginMetaSchema, } from './lib/plugin-config';
18
- export { type AuditReport, type PluginReport, type Report, auditReportSchema, pluginReportSchema, reportSchema, } from './lib/report';
19
- export { type AuditDiff, type AuditResult, type CategoryDiff, type CategoryResult, type GroupDiff, type GroupResult, type ReportsDiff, auditDiffSchema, auditResultSchema, categoryDiffSchema, categoryResultSchema, groupDiffSchema, groupResultSchema, reportsDiffSchema, } from './lib/reports-diff';
20
- export { type OnProgress, type RunnerConfig, type RunnerFunction, onProgressSchema, runnerConfigSchema, runnerFunctionSchema, } from './lib/runner-config';
21
- export { type UploadConfig, uploadConfigSchema } from './lib/upload-config';
1
+ export { type TableCellValue, tableCellValueSchema, } from './lib/implementation/schemas.js';
2
+ export { type SourceFileLocation, sourceFileLocationSchema, } from './lib/source.js';
3
+ export { type Audit, auditSchema } from './lib/audit.js';
4
+ export { type AuditDetails, type AuditOutput, type AuditOutputs, auditDetailsSchema, auditOutputSchema, auditOutputsSchema, } from './lib/audit-output.js';
5
+ export { type CategoryConfig, type CategoryRef, categoryConfigSchema, categoryRefSchema, } from './lib/category-config.js';
6
+ export { type Commit, commitSchema } from './lib/commit.js';
7
+ export { type CoreConfig, coreConfigSchema } from './lib/core-config.js';
8
+ export { type Group, type GroupRef, type GroupMeta, groupRefSchema, groupSchema, } from './lib/group.js';
9
+ export { CONFIG_FILE_NAME, SUPPORTED_CONFIG_FILE_FORMATS, } from './lib/implementation/configuration.js';
10
+ export { DEFAULT_PERSIST_FILENAME, DEFAULT_PERSIST_FORMAT, DEFAULT_PERSIST_OUTPUT_DIR, } from './lib/implementation/constants.js';
11
+ export { MAX_DESCRIPTION_LENGTH, MAX_ISSUE_MESSAGE_LENGTH, MAX_SLUG_LENGTH, MAX_TITLE_LENGTH, } from './lib/implementation/limits.js';
12
+ export { type MaterialIcon, materialIconSchema, } from './lib/implementation/schemas.js';
13
+ export { exists } from './lib/implementation/utils.js';
14
+ export { type TableAlignment, tableAlignmentSchema, type TableRowPrimitive, tableRowPrimitiveSchema, type TableRowObject, tableRowObjectSchema, type TableColumnPrimitive, tableColumnPrimitiveSchema, type TableColumnObject, tableColumnObjectSchema, type Table, tableSchema, } from './lib/table.js';
15
+ export { type Issue, type IssueSeverity, issueSchema, issueSeveritySchema, } from './lib/issue.js';
16
+ export { type Format, type PersistConfig, formatSchema, persistConfigSchema, } from './lib/persist-config.js';
17
+ export { type PluginConfig, type PluginMeta, pluginConfigSchema, pluginMetaSchema, } from './lib/plugin-config.js';
18
+ export { type AuditReport, type PluginReport, type Report, auditReportSchema, pluginReportSchema, reportSchema, } from './lib/report.js';
19
+ export { type AuditDiff, type AuditResult, type CategoryDiff, type CategoryResult, type GroupDiff, type GroupResult, type ReportsDiff, auditDiffSchema, auditResultSchema, categoryDiffSchema, categoryResultSchema, groupDiffSchema, groupResultSchema, reportsDiffSchema, } from './lib/reports-diff.js';
20
+ export { type OnProgress, type RunnerConfig, type RunnerFunction, onProgressSchema, runnerConfigSchema, runnerFunctionSchema, } from './lib/runner-config.js';
21
+ export { type UploadConfig, uploadConfigSchema } from './lib/upload-config.js';
package/src/index.js ADDED
@@ -0,0 +1,22 @@
1
+ export { tableCellValueSchema, } from './lib/implementation/schemas.js';
2
+ export { sourceFileLocationSchema, } from './lib/source.js';
3
+ export { auditSchema } from './lib/audit.js';
4
+ export { auditDetailsSchema, auditOutputSchema, auditOutputsSchema, } from './lib/audit-output.js';
5
+ export { categoryConfigSchema, categoryRefSchema, } from './lib/category-config.js';
6
+ export { commitSchema } from './lib/commit.js';
7
+ export { coreConfigSchema } from './lib/core-config.js';
8
+ export { groupRefSchema, groupSchema, } from './lib/group.js';
9
+ export { CONFIG_FILE_NAME, SUPPORTED_CONFIG_FILE_FORMATS, } from './lib/implementation/configuration.js';
10
+ export { DEFAULT_PERSIST_FILENAME, DEFAULT_PERSIST_FORMAT, DEFAULT_PERSIST_OUTPUT_DIR, } from './lib/implementation/constants.js';
11
+ export { MAX_DESCRIPTION_LENGTH, MAX_ISSUE_MESSAGE_LENGTH, MAX_SLUG_LENGTH, MAX_TITLE_LENGTH, } from './lib/implementation/limits.js';
12
+ export { materialIconSchema, } from './lib/implementation/schemas.js';
13
+ export { exists } from './lib/implementation/utils.js';
14
+ export { tableAlignmentSchema, tableRowPrimitiveSchema, tableRowObjectSchema, tableColumnPrimitiveSchema, tableColumnObjectSchema, tableSchema, } from './lib/table.js';
15
+ export { issueSchema, issueSeveritySchema, } from './lib/issue.js';
16
+ export { formatSchema, persistConfigSchema, } from './lib/persist-config.js';
17
+ export { pluginConfigSchema, pluginMetaSchema, } from './lib/plugin-config.js';
18
+ export { auditReportSchema, pluginReportSchema, reportSchema, } from './lib/report.js';
19
+ export { auditDiffSchema, auditResultSchema, categoryDiffSchema, categoryResultSchema, groupDiffSchema, groupResultSchema, reportsDiffSchema, } from './lib/reports-diff.js';
20
+ export { onProgressSchema, runnerConfigSchema, runnerFunctionSchema, } from './lib/runner-config.js';
21
+ export { uploadConfigSchema } from './lib/upload-config.js';
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/models/src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,oBAAoB,GACrB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAEL,wBAAwB,GACzB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAc,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAIL,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAGL,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAe,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAmB,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACzE,OAAO,EAIL,cAAc,EACd,WAAW,GACZ,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,gBAAgB,EAChB,6BAA6B,GAC9B,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EACL,wBAAwB,EACxB,sBAAsB,EACtB,0BAA0B,GAC3B,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,eAAe,EACf,gBAAgB,GACjB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAEL,kBAAkB,GACnB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AACvD,OAAO,EAEL,oBAAoB,EAEpB,uBAAuB,EAEvB,oBAAoB,EAEpB,0BAA0B,EAE1B,uBAAuB,EAEvB,WAAW,GACZ,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAGL,WAAW,EACX,mBAAmB,GACpB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAGL,YAAY,EACZ,mBAAmB,GACpB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAGL,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAIL,iBAAiB,EACjB,kBAAkB,EAClB,YAAY,GACb,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAQL,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,EACf,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAIL,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAqB,kBAAkB,EAAE,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,37 @@
1
+ import { z } from 'zod';
2
+ import { nonnegativeNumberSchema, scoreSchema, slugSchema, } from './implementation/schemas.js';
3
+ import { errorItems, hasDuplicateStrings } from './implementation/utils.js';
4
+ import { issueSchema } from './issue.js';
5
+ import { tableSchema } from './table.js';
6
+ export const auditValueSchema = nonnegativeNumberSchema.describe('Raw numeric value');
7
+ export const auditDisplayValueSchema = z
8
+ .string({ description: "Formatted value (e.g. '0.9 s', '2.1 MB')" })
9
+ .optional();
10
+ export const auditDetailsSchema = z.object({
11
+ issues: z
12
+ .array(issueSchema, { description: 'List of findings' })
13
+ .optional(),
14
+ table: tableSchema('Table of related findings').optional(),
15
+ }, { description: 'Detailed information' });
16
+ export const auditOutputSchema = z.object({
17
+ slug: slugSchema.describe('Reference to audit'),
18
+ displayValue: auditDisplayValueSchema,
19
+ value: auditValueSchema,
20
+ score: scoreSchema,
21
+ details: auditDetailsSchema.optional(),
22
+ }, { description: 'Audit information' });
23
+ export const auditOutputsSchema = z
24
+ .array(auditOutputSchema, {
25
+ description: 'List of JSON formatted audit output emitted by the runner process of a plugin',
26
+ })
27
+ // audit slugs are unique
28
+ .refine(audits => !getDuplicateSlugsInAudits(audits), audits => ({ message: duplicateSlugsInAuditsErrorMsg(audits) }));
29
+ // helper for validator: audit slugs are unique
30
+ function duplicateSlugsInAuditsErrorMsg(audits) {
31
+ const duplicateRefs = getDuplicateSlugsInAudits(audits);
32
+ return `In plugin audits the slugs are not unique: ${errorItems(duplicateRefs)}`;
33
+ }
34
+ function getDuplicateSlugsInAudits(audits) {
35
+ return hasDuplicateStrings(audits.map(({ slug }) => slug));
36
+ }
37
+ //# sourceMappingURL=audit-output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit-output.js","sourceRoot":"","sources":["../../../../../packages/models/src/lib/audit-output.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,uBAAuB,EACvB,WAAW,EACX,UAAU,GACX,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,MAAM,CAAC,MAAM,gBAAgB,GAC3B,uBAAuB,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;AACxD,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC;KACrC,MAAM,CAAC,EAAE,WAAW,EAAE,0CAA0C,EAAE,CAAC;KACnE,QAAQ,EAAE,CAAC;AAEd,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CACxC;IACE,MAAM,EAAE,CAAC;SACN,KAAK,CAAC,WAAW,EAAE,EAAE,WAAW,EAAE,kBAAkB,EAAE,CAAC;SACvD,QAAQ,EAAE;IACb,KAAK,EAAE,WAAW,CAAC,2BAA2B,CAAC,CAAC,QAAQ,EAAE;CAC3D,EACD,EAAE,WAAW,EAAE,sBAAsB,EAAE,CACxC,CAAC;AAGF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CACvC;IACE,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,oBAAoB,CAAC;IAC/C,YAAY,EAAE,uBAAuB;IACrC,KAAK,EAAE,gBAAgB;IACvB,KAAK,EAAE,WAAW;IAClB,OAAO,EAAE,kBAAkB,CAAC,QAAQ,EAAE;CACvC,EACD,EAAE,WAAW,EAAE,mBAAmB,EAAE,CACrC,CAAC;AAIF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC;KAChC,KAAK,CAAC,iBAAiB,EAAE;IACxB,WAAW,EACT,+EAA+E;CAClF,CAAC;IACF,yBAAyB;KACxB,MAAM,CACL,MAAM,CAAC,EAAE,CAAC,CAAC,yBAAyB,CAAC,MAAM,CAAC,EAC5C,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,8BAA8B,CAAC,MAAM,CAAC,EAAE,CAAC,CAChE,CAAC;AAGJ,+CAA+C;AAC/C,SAAS,8BAA8B,CAAC,MAAqB;IAC3D,MAAM,aAAa,GAAG,yBAAyB,CAAC,MAAM,CAAC,CAAC;IACxD,OAAO,8CAA8C,UAAU,CAC7D,aAAa,CACd,EAAE,CAAC;AACN,CAAC;AAED,SAAS,yBAAyB,CAAC,MAAqB;IACtD,OAAO,mBAAmB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;AAC7D,CAAC"}
@@ -0,0 +1,32 @@
1
+ import { z } from 'zod';
2
+ import { metaSchema, slugSchema } from './implementation/schemas.js';
3
+ import { errorItems, hasDuplicateStrings } from './implementation/utils.js';
4
+ export const auditSchema = z
5
+ .object({
6
+ slug: slugSchema.describe('ID (unique within plugin)'),
7
+ })
8
+ .merge(metaSchema({
9
+ titleDescription: 'Descriptive name',
10
+ descriptionDescription: 'Description (markdown)',
11
+ docsUrlDescription: 'Link to documentation (rationale)',
12
+ description: 'List of scorable metrics for the given plugin',
13
+ }));
14
+ export const pluginAuditsSchema = z
15
+ .array(auditSchema, {
16
+ description: 'List of audits maintained in a plugin',
17
+ })
18
+ .min(1)
19
+ // audit slugs are unique
20
+ .refine(auditMetadata => !getDuplicateSlugsInAudits(auditMetadata), auditMetadata => ({
21
+ message: duplicateSlugsInAuditsErrorMsg(auditMetadata),
22
+ }));
23
+ // =======================
24
+ // helper for validator: audit slugs are unique
25
+ function duplicateSlugsInAuditsErrorMsg(audits) {
26
+ const duplicateRefs = getDuplicateSlugsInAudits(audits);
27
+ return `In plugin audits the following slugs are not unique: ${errorItems(duplicateRefs)}`;
28
+ }
29
+ function getDuplicateSlugsInAudits(audits) {
30
+ return hasDuplicateStrings(audits.map(({ slug }) => slug));
31
+ }
32
+ //# sourceMappingURL=audit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../../../../packages/models/src/lib/audit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAE5E,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC;KACzB,MAAM,CAAC;IACN,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,2BAA2B,CAAC;CACvD,CAAC;KACD,KAAK,CACJ,UAAU,CAAC;IACT,gBAAgB,EAAE,kBAAkB;IACpC,sBAAsB,EAAE,wBAAwB;IAChD,kBAAkB,EAAE,mCAAmC;IACvD,WAAW,EAAE,+CAA+C;CAC7D,CAAC,CACH,CAAC;AAGJ,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC;KAChC,KAAK,CAAC,WAAW,EAAE;IAClB,WAAW,EAAE,uCAAuC;CACrD,CAAC;KACD,GAAG,CAAC,CAAC,CAAC;IACP,yBAAyB;KACxB,MAAM,CACL,aAAa,CAAC,EAAE,CAAC,CAAC,yBAAyB,CAAC,aAAa,CAAC,EAC1D,aAAa,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,EAAE,8BAA8B,CAAC,aAAa,CAAC;CACvD,CAAC,CACH,CAAC;AAEJ,0BAA0B;AAE1B,+CAA+C;AAC/C,SAAS,8BAA8B,CAAC,MAAe;IACrD,MAAM,aAAa,GAAG,yBAAyB,CAAC,MAAM,CAAC,CAAC;IACxD,OAAO,wDAAwD,UAAU,CACvE,aAAa,CACd,EAAE,CAAC;AACN,CAAC;AAED,SAAS,yBAAyB,CAAC,MAAe;IAChD,OAAO,mBAAmB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;AAC7D,CAAC"}
@@ -0,0 +1,47 @@
1
+ import { z } from 'zod';
2
+ import { metaSchema, scorableSchema, slugSchema, weightedRefSchema, } from './implementation/schemas.js';
3
+ import { errorItems, hasDuplicateStrings } from './implementation/utils.js';
4
+ export const categoryRefSchema = weightedRefSchema('Weighted references to audits and/or groups for the category', 'Slug of an audit or group (depending on `type`)').merge(z.object({
5
+ type: z.enum(['audit', 'group'], {
6
+ description: 'Discriminant for reference kind, affects where `slug` is looked up',
7
+ }),
8
+ plugin: slugSchema.describe('Plugin slug (plugin should contain referenced audit or group)'),
9
+ }));
10
+ export const categoryConfigSchema = scorableSchema('Category with a score calculated from audits and groups from various plugins', categoryRefSchema, getDuplicateRefsInCategoryMetrics, duplicateRefsInCategoryMetricsErrorMsg)
11
+ .merge(metaSchema({
12
+ titleDescription: 'Category Title',
13
+ docsUrlDescription: 'Category docs URL',
14
+ descriptionDescription: 'Category description',
15
+ description: 'Meta info for category',
16
+ }))
17
+ .merge(z.object({
18
+ isBinary: z
19
+ .boolean({
20
+ description: 'Is this a binary category (i.e. only a perfect score considered a "pass")?',
21
+ })
22
+ .optional(),
23
+ }));
24
+ // helper for validator: categories have unique refs to audits or groups
25
+ export function duplicateRefsInCategoryMetricsErrorMsg(metrics) {
26
+ const duplicateRefs = getDuplicateRefsInCategoryMetrics(metrics);
27
+ return `In the categories, the following audit or group refs are duplicates: ${errorItems(duplicateRefs)}`;
28
+ }
29
+ function getDuplicateRefsInCategoryMetrics(metrics) {
30
+ return hasDuplicateStrings(metrics.map(({ slug, type, plugin }) => `${type} :: ${plugin} / ${slug}`));
31
+ }
32
+ export const categoriesSchema = z
33
+ .array(categoryConfigSchema, {
34
+ description: 'Categorization of individual audits',
35
+ })
36
+ .refine(categoryCfg => !getDuplicateSlugCategories(categoryCfg), categoryCfg => ({
37
+ message: duplicateSlugCategoriesErrorMsg(categoryCfg),
38
+ }));
39
+ // helper for validator: categories slugs are unique
40
+ function duplicateSlugCategoriesErrorMsg(categories) {
41
+ const duplicateStringSlugs = getDuplicateSlugCategories(categories);
42
+ return `In the categories, the following slugs are duplicated: ${errorItems(duplicateStringSlugs)}`;
43
+ }
44
+ function getDuplicateSlugCategories(categories) {
45
+ return hasDuplicateStrings(categories.map(({ slug }) => slug));
46
+ }
47
+ //# sourceMappingURL=category-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"category-config.js","sourceRoot":"","sources":["../../../../../packages/models/src/lib/category-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,UAAU,EACV,cAAc,EACd,UAAU,EACV,iBAAiB,GAClB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAE5E,MAAM,CAAC,MAAM,iBAAiB,GAAG,iBAAiB,CAChD,8DAA8D,EAC9D,iDAAiD,CAClD,CAAC,KAAK,CACL,CAAC,CAAC,MAAM,CAAC;IACP,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE;QAC/B,WAAW,EACT,oEAAoE;KACvE,CAAC;IACF,MAAM,EAAE,UAAU,CAAC,QAAQ,CACzB,+DAA+D,CAChE;CACF,CAAC,CACH,CAAC;AAGF,MAAM,CAAC,MAAM,oBAAoB,GAAG,cAAc,CAChD,8EAA8E,EAC9E,iBAAiB,EACjB,iCAAiC,EACjC,sCAAsC,CACvC;KACE,KAAK,CACJ,UAAU,CAAC;IACT,gBAAgB,EAAE,gBAAgB;IAClC,kBAAkB,EAAE,mBAAmB;IACvC,sBAAsB,EAAE,sBAAsB;IAC9C,WAAW,EAAE,wBAAwB;CACtC,CAAC,CACH;KACA,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;IACP,QAAQ,EAAE,CAAC;SACR,OAAO,CAAC;QACP,WAAW,EACT,4EAA4E;KAC/E,CAAC;SACD,QAAQ,EAAE;CACd,CAAC,CACH,CAAC;AAIJ,wEAAwE;AACxE,MAAM,UAAU,sCAAsC,CAAC,OAAsB;IAC3E,MAAM,aAAa,GAAG,iCAAiC,CAAC,OAAO,CAAC,CAAC;IACjE,OAAO,wEAAwE,UAAU,CACvF,aAAa,CACd,EAAE,CAAC;AACN,CAAC;AAED,SAAS,iCAAiC,CAAC,OAAsB;IAC/D,OAAO,mBAAmB,CACxB,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,OAAO,MAAM,MAAM,IAAI,EAAE,CAAC,CAC1E,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC;KAC9B,KAAK,CAAC,oBAAoB,EAAE;IAC3B,WAAW,EAAE,qCAAqC;CACnD,CAAC;KACD,MAAM,CACL,WAAW,CAAC,EAAE,CAAC,CAAC,0BAA0B,CAAC,WAAW,CAAC,EACvD,WAAW,CAAC,EAAE,CAAC,CAAC;IACd,OAAO,EAAE,+BAA+B,CAAC,WAAW,CAAC;CACtD,CAAC,CACH,CAAC;AAEJ,oDAAoD;AACpD,SAAS,+BAA+B,CAAC,UAA4B;IACnE,MAAM,oBAAoB,GAAG,0BAA0B,CAAC,UAAU,CAAC,CAAC;IACpE,OAAO,0DAA0D,UAAU,CACzE,oBAAoB,CACrB,EAAE,CAAC;AACN,CAAC;AAED,SAAS,0BAA0B,CAAC,UAA4B;IAC9D,OAAO,mBAAmB,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;AACjE,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { z } from 'zod';
2
+ export const commitSchema = z.object({
3
+ hash: z
4
+ .string({ description: 'Commit SHA (full)' })
5
+ .regex(/^[\da-f]{40}$/, 'Commit SHA should be a 40-character hexadecimal string'),
6
+ message: z.string({ description: 'Commit message' }),
7
+ date: z.coerce.date({
8
+ description: 'Date and time when commit was authored',
9
+ }),
10
+ author: z
11
+ .string({
12
+ description: 'Commit author name',
13
+ })
14
+ .trim(),
15
+ }, { description: 'Git commit' });
16
+ //# sourceMappingURL=commit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commit.js","sourceRoot":"","sources":["../../../../../packages/models/src/lib/commit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAClC;IACE,IAAI,EAAE,CAAC;SACJ,MAAM,CAAC,EAAE,WAAW,EAAE,mBAAmB,EAAE,CAAC;SAC5C,KAAK,CACJ,eAAe,EACf,wDAAwD,CACzD;IACH,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAAC;IACpD,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;QAClB,WAAW,EAAE,wCAAwC;KACtD,CAAC;IACF,MAAM,EAAE,CAAC;SACN,MAAM,CAAC;QACN,WAAW,EAAE,oBAAoB;KAClC,CAAC;SACD,IAAI,EAAE;CACV,EACD,EAAE,WAAW,EAAE,YAAY,EAAE,CAC9B,CAAC"}