@code-pushup/models 0.56.0 → 0.58.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.d.ts +24 -0
- package/src/lib/audit-output.js +37 -0
- package/src/lib/audit-output.js.map +1 -0
- package/src/lib/audit.d.ts +16 -0
- package/src/lib/audit.js +33 -0
- package/src/lib/audit.js.map +1 -0
- package/src/lib/category-config.d.ts +24 -0
- package/src/lib/category-config.js +47 -0
- package/src/lib/category-config.js.map +1 -0
- package/src/lib/commit.d.ts +8 -0
- package/src/lib/commit.js +16 -0
- package/src/lib/commit.js.map +1 -0
- package/src/lib/core-config.d.ts +1785 -866
- package/src/lib/core-config.js +31 -0
- package/src/lib/core-config.js.map +1 -0
- package/src/lib/group.d.ts +35 -0
- package/src/lib/group.js +41 -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 +31 -13
- package/src/lib/implementation/schemas.js +133 -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.d.ts +16 -0
- package/src/lib/issue.js +14 -0
- package/src/lib/issue.js.map +1 -0
- package/src/lib/persist-config.d.ts +16 -0
- package/src/lib/persist-config.js +11 -0
- package/src/lib/persist-config.js.map +1 -0
- package/src/lib/plugin-config.d.ts +68 -0
- package/src/lib/plugin-config.js +37 -0
- package/src/lib/plugin-config.js.map +1 -0
- package/src/lib/report.d.ts +84 -0
- package/src/lib/report.js +49 -0
- package/src/lib/report.js.map +1 -0
- package/src/lib/reports-diff.d.ts +68 -0
- package/src/lib/reports-diff.js +79 -0
- package/src/lib/reports-diff.js.map +1 -0
- package/src/lib/runner-config.d.ts +54 -0
- package/src/lib/runner-config.js +31 -0
- package/src/lib/runner-config.js.map +1 -0
- package/src/lib/source.d.ts +8 -0
- package/src/lib/source.js +14 -0
- package/src/lib/source.js.map +1 -0
- package/src/lib/table.d.ts +48 -0
- package/src/lib/table.js +37 -0
- package/src/lib/table.js.map +1 -0
- package/src/lib/upload-config.d.ts +8 -0
- package/src/lib/upload-config.js +16 -0
- package/src/lib/upload-config.js.map +1 -0
- package/index.js +0 -753
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@code-pushup/models",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.58.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,
|
|
2
|
-
export { type SourceFileLocation,
|
|
3
|
-
export { type
|
|
4
|
-
export {
|
|
5
|
-
export { type CategoryConfig, type CategoryRef,
|
|
6
|
-
export { type Commit
|
|
7
|
-
export { type CoreConfig
|
|
8
|
-
export {
|
|
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 {
|
|
13
|
-
export { exists } from './lib/implementation/utils';
|
|
14
|
-
export {
|
|
15
|
-
export {
|
|
16
|
-
export {
|
|
17
|
-
export {
|
|
18
|
-
export { type
|
|
19
|
-
export {
|
|
20
|
-
export { type
|
|
21
|
-
export { type UploadConfig
|
|
1
|
+
export { tableCellValueSchema, type TableCellValue, } from './lib/implementation/schemas.js';
|
|
2
|
+
export { sourceFileLocationSchema, type SourceFileLocation, } from './lib/source.js';
|
|
3
|
+
export { auditDetailsSchema, auditOutputSchema, auditOutputsSchema, type AuditDetails, type AuditOutput, type AuditOutputs, } from './lib/audit-output.js';
|
|
4
|
+
export { auditSchema, type Audit } from './lib/audit.js';
|
|
5
|
+
export { categoryConfigSchema, categoryRefSchema, type CategoryConfig, type CategoryRef, } from './lib/category-config.js';
|
|
6
|
+
export { commitSchema, type Commit } from './lib/commit.js';
|
|
7
|
+
export { coreConfigSchema, type CoreConfig } from './lib/core-config.js';
|
|
8
|
+
export { groupRefSchema, groupSchema, type Group, type GroupMeta, type GroupRef, } 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 { fileNameSchema, filePathSchema, materialIconSchema, type MaterialIcon, } from './lib/implementation/schemas.js';
|
|
13
|
+
export { exists } from './lib/implementation/utils.js';
|
|
14
|
+
export { issueSchema, issueSeveritySchema, type Issue, type IssueSeverity, } from './lib/issue.js';
|
|
15
|
+
export { formatSchema, persistConfigSchema, type Format, type PersistConfig, } from './lib/persist-config.js';
|
|
16
|
+
export { pluginConfigSchema, pluginMetaSchema, type PluginConfig, type PluginMeta, } from './lib/plugin-config.js';
|
|
17
|
+
export { auditReportSchema, pluginReportSchema, reportSchema, type AuditReport, type PluginReport, type Report, } from './lib/report.js';
|
|
18
|
+
export { auditDiffSchema, auditResultSchema, categoryDiffSchema, categoryResultSchema, groupDiffSchema, groupResultSchema, reportsDiffSchema, type AuditDiff, type AuditResult, type CategoryDiff, type CategoryResult, type GroupDiff, type GroupResult, type ReportsDiff, } from './lib/reports-diff.js';
|
|
19
|
+
export { onProgressSchema, runnerConfigSchema, runnerFunctionSchema, runnerFilesPathsSchema, type OnProgress, type RunnerConfig, type RunnerFunction, type RunnerFilesPaths, } from './lib/runner-config.js';
|
|
20
|
+
export { tableAlignmentSchema, tableColumnObjectSchema, tableColumnPrimitiveSchema, tableRowObjectSchema, tableRowPrimitiveSchema, tableSchema, type Table, type TableAlignment, type TableColumnObject, type TableColumnPrimitive, type TableRowObject, type TableRowPrimitive, } from './lib/table.js';
|
|
21
|
+
export { uploadConfigSchema, type UploadConfig } 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 { auditDetailsSchema, auditOutputSchema, auditOutputsSchema, } from './lib/audit-output.js';
|
|
4
|
+
export { auditSchema } from './lib/audit.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 { fileNameSchema, filePathSchema, materialIconSchema, } from './lib/implementation/schemas.js';
|
|
13
|
+
export { exists } from './lib/implementation/utils.js';
|
|
14
|
+
export { issueSchema, issueSeveritySchema, } from './lib/issue.js';
|
|
15
|
+
export { formatSchema, persistConfigSchema, } from './lib/persist-config.js';
|
|
16
|
+
export { pluginConfigSchema, pluginMetaSchema, } from './lib/plugin-config.js';
|
|
17
|
+
export { auditReportSchema, pluginReportSchema, reportSchema, } from './lib/report.js';
|
|
18
|
+
export { auditDiffSchema, auditResultSchema, categoryDiffSchema, categoryResultSchema, groupDiffSchema, groupResultSchema, reportsDiffSchema, } from './lib/reports-diff.js';
|
|
19
|
+
export { onProgressSchema, runnerConfigSchema, runnerFunctionSchema, runnerFilesPathsSchema, } from './lib/runner-config.js';
|
|
20
|
+
export { tableAlignmentSchema, tableColumnObjectSchema, tableColumnPrimitiveSchema, tableRowObjectSchema, tableRowPrimitiveSchema, tableSchema, } from './lib/table.js';
|
|
21
|
+
export { uploadConfigSchema } from './lib/upload-config.js';
|
|
22
|
+
//# sourceMappingURL=index.js.map
|
package/src/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/models/src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,GAErB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,wBAAwB,GAEzB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,GAInB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAc,MAAM,gBAAgB,CAAC;AACzD,OAAO,EACL,oBAAoB,EACpB,iBAAiB,GAGlB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,YAAY,EAAe,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAmB,MAAM,sBAAsB,CAAC;AACzE,OAAO,EACL,cAAc,EACd,WAAW,GAIZ,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,EACL,cAAc,EACd,cAAc,EACd,kBAAkB,GAEnB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AACvD,OAAO,EACL,WAAW,EACX,mBAAmB,GAGpB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,YAAY,EACZ,mBAAmB,GAGpB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,kBAAkB,EAClB,gBAAgB,GAGjB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,YAAY,GAIb,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,EACf,iBAAiB,EACjB,iBAAiB,GAQlB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,EACpB,sBAAsB,GAKvB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,0BAA0B,EAC1B,oBAAoB,EACpB,uBAAuB,EACvB,WAAW,GAOZ,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,kBAAkB,EAAqB,MAAM,wBAAwB,CAAC"}
|
|
@@ -167,6 +167,14 @@ export declare const auditDetailsSchema: z.ZodObject<{
|
|
|
167
167
|
}[] | undefined;
|
|
168
168
|
} | undefined;
|
|
169
169
|
}>;
|
|
170
|
+
/**
|
|
171
|
+
* Type Definition: `AuditDetails`
|
|
172
|
+
*
|
|
173
|
+
* This type is derived from a Zod schema and represents
|
|
174
|
+
* the validated structure of `AuditDetails` used within the application.
|
|
175
|
+
*
|
|
176
|
+
* @see {@link https://github.com/code-pushup/cli/blob/main/packages/models/docs/models-reference.md#auditdetails}
|
|
177
|
+
*/
|
|
170
178
|
export type AuditDetails = z.infer<typeof auditDetailsSchema>;
|
|
171
179
|
export declare const auditOutputSchema: z.ZodObject<{
|
|
172
180
|
slug: z.ZodString;
|
|
@@ -406,6 +414,14 @@ export declare const auditOutputSchema: z.ZodObject<{
|
|
|
406
414
|
} | undefined;
|
|
407
415
|
} | undefined;
|
|
408
416
|
}>;
|
|
417
|
+
/**
|
|
418
|
+
* Type Definition: `AuditOutput`
|
|
419
|
+
*
|
|
420
|
+
* This type is derived from a Zod schema and represents
|
|
421
|
+
* the validated structure of `AuditOutput` used within the application.
|
|
422
|
+
*
|
|
423
|
+
* @see {@link https://github.com/code-pushup/cli/blob/main/packages/models/docs/models-reference.md#auditoutput}
|
|
424
|
+
*/
|
|
409
425
|
export type AuditOutput = z.infer<typeof auditOutputSchema>;
|
|
410
426
|
export declare const auditOutputsSchema: z.ZodEffects<z.ZodArray<z.ZodObject<{
|
|
411
427
|
slug: z.ZodString;
|
|
@@ -711,4 +727,12 @@ export declare const auditOutputsSchema: z.ZodEffects<z.ZodArray<z.ZodObject<{
|
|
|
711
727
|
} | undefined;
|
|
712
728
|
} | undefined;
|
|
713
729
|
}[]>;
|
|
730
|
+
/**
|
|
731
|
+
* Type Definition: `AuditOutputs`
|
|
732
|
+
*
|
|
733
|
+
* This type is derived from a Zod schema and represents
|
|
734
|
+
* the validated structure of `AuditOutputs` used within the application.
|
|
735
|
+
*
|
|
736
|
+
* @see {@link https://github.com/code-pushup/cli/blob/main/packages/models/docs/models-reference.md#auditoutputs}
|
|
737
|
+
*/
|
|
714
738
|
export type AuditOutputs = z.infer<typeof auditOutputsSchema>;
|
|
@@ -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"}
|
package/src/lib/audit.d.ts
CHANGED
|
@@ -5,17 +5,28 @@ export declare const auditSchema: z.ZodObject<z.objectUtil.extendShape<{
|
|
|
5
5
|
title: z.ZodString;
|
|
6
6
|
description: z.ZodOptional<z.ZodString>;
|
|
7
7
|
docsUrl: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
|
|
8
|
+
isSkipped: z.ZodOptional<z.ZodBoolean>;
|
|
8
9
|
}>, "strip", z.ZodTypeAny, {
|
|
9
10
|
slug: string;
|
|
10
11
|
title: string;
|
|
11
12
|
description?: string | undefined;
|
|
12
13
|
docsUrl?: string | undefined;
|
|
14
|
+
isSkipped?: boolean | undefined;
|
|
13
15
|
}, {
|
|
14
16
|
slug: string;
|
|
15
17
|
title: string;
|
|
16
18
|
description?: string | undefined;
|
|
17
19
|
docsUrl?: string | undefined;
|
|
20
|
+
isSkipped?: boolean | undefined;
|
|
18
21
|
}>;
|
|
22
|
+
/**
|
|
23
|
+
* Type Definition: `Audit`
|
|
24
|
+
*
|
|
25
|
+
* This type is derived from a Zod schema and represents
|
|
26
|
+
* the validated structure of `Audit` used within the application.
|
|
27
|
+
*
|
|
28
|
+
* @see {@link https://github.com/code-pushup/cli/blob/main/packages/models/docs/models-reference.md#audit}
|
|
29
|
+
*/
|
|
19
30
|
export type Audit = z.infer<typeof auditSchema>;
|
|
20
31
|
export declare const pluginAuditsSchema: z.ZodEffects<z.ZodArray<z.ZodObject<z.objectUtil.extendShape<{
|
|
21
32
|
slug: z.ZodString;
|
|
@@ -23,24 +34,29 @@ export declare const pluginAuditsSchema: z.ZodEffects<z.ZodArray<z.ZodObject<z.o
|
|
|
23
34
|
title: z.ZodString;
|
|
24
35
|
description: z.ZodOptional<z.ZodString>;
|
|
25
36
|
docsUrl: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
|
|
37
|
+
isSkipped: z.ZodOptional<z.ZodBoolean>;
|
|
26
38
|
}>, "strip", z.ZodTypeAny, {
|
|
27
39
|
slug: string;
|
|
28
40
|
title: string;
|
|
29
41
|
description?: string | undefined;
|
|
30
42
|
docsUrl?: string | undefined;
|
|
43
|
+
isSkipped?: boolean | undefined;
|
|
31
44
|
}, {
|
|
32
45
|
slug: string;
|
|
33
46
|
title: string;
|
|
34
47
|
description?: string | undefined;
|
|
35
48
|
docsUrl?: string | undefined;
|
|
49
|
+
isSkipped?: boolean | undefined;
|
|
36
50
|
}>, "many">, {
|
|
37
51
|
slug: string;
|
|
38
52
|
title: string;
|
|
39
53
|
description?: string | undefined;
|
|
40
54
|
docsUrl?: string | undefined;
|
|
55
|
+
isSkipped?: boolean | undefined;
|
|
41
56
|
}[], {
|
|
42
57
|
slug: string;
|
|
43
58
|
title: string;
|
|
44
59
|
description?: string | undefined;
|
|
45
60
|
docsUrl?: string | undefined;
|
|
61
|
+
isSkipped?: boolean | undefined;
|
|
46
62
|
}[]>;
|
package/src/lib/audit.js
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
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
|
+
isSkippedDescription: 'Indicates whether the audit is skipped',
|
|
14
|
+
}));
|
|
15
|
+
export const pluginAuditsSchema = z
|
|
16
|
+
.array(auditSchema, {
|
|
17
|
+
description: 'List of audits maintained in a plugin',
|
|
18
|
+
})
|
|
19
|
+
.min(1)
|
|
20
|
+
// audit slugs are unique
|
|
21
|
+
.refine(auditMetadata => !getDuplicateSlugsInAudits(auditMetadata), auditMetadata => ({
|
|
22
|
+
message: duplicateSlugsInAuditsErrorMsg(auditMetadata),
|
|
23
|
+
}));
|
|
24
|
+
// =======================
|
|
25
|
+
// helper for validator: audit slugs are unique
|
|
26
|
+
function duplicateSlugsInAuditsErrorMsg(audits) {
|
|
27
|
+
const duplicateRefs = getDuplicateSlugsInAudits(audits);
|
|
28
|
+
return `In plugin audits the following slugs are not unique: ${errorItems(duplicateRefs)}`;
|
|
29
|
+
}
|
|
30
|
+
function getDuplicateSlugsInAudits(audits) {
|
|
31
|
+
return hasDuplicateStrings(audits.map(({ slug }) => slug));
|
|
32
|
+
}
|
|
33
|
+
//# 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;IAC5D,oBAAoB,EAAE,wCAAwC;CAC/D,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"}
|
|
@@ -16,6 +16,14 @@ export declare const categoryRefSchema: z.ZodObject<z.objectUtil.extendShape<{
|
|
|
16
16
|
type: "audit" | "group";
|
|
17
17
|
plugin: string;
|
|
18
18
|
}>;
|
|
19
|
+
/**
|
|
20
|
+
* Type Definition: `CategoryRef`
|
|
21
|
+
*
|
|
22
|
+
* This type is derived from a Zod schema and represents
|
|
23
|
+
* the validated structure of `CategoryRef` used within the application.
|
|
24
|
+
*
|
|
25
|
+
* @see {@link https://github.com/code-pushup/cli/blob/main/packages/models/docs/models-reference.md#categoryref}
|
|
26
|
+
*/
|
|
19
27
|
export type CategoryRef = z.infer<typeof categoryRefSchema>;
|
|
20
28
|
export declare const categoryConfigSchema: z.ZodObject<z.objectUtil.extendShape<z.objectUtil.extendShape<{
|
|
21
29
|
slug: z.ZodString;
|
|
@@ -60,6 +68,7 @@ export declare const categoryConfigSchema: z.ZodObject<z.objectUtil.extendShape<
|
|
|
60
68
|
title: z.ZodString;
|
|
61
69
|
description: z.ZodOptional<z.ZodString>;
|
|
62
70
|
docsUrl: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
|
|
71
|
+
isSkipped: z.ZodOptional<z.ZodBoolean>;
|
|
63
72
|
}>, {
|
|
64
73
|
isBinary: z.ZodOptional<z.ZodBoolean>;
|
|
65
74
|
}>, "strip", z.ZodTypeAny, {
|
|
@@ -73,6 +82,7 @@ export declare const categoryConfigSchema: z.ZodObject<z.objectUtil.extendShape<
|
|
|
73
82
|
title: string;
|
|
74
83
|
description?: string | undefined;
|
|
75
84
|
docsUrl?: string | undefined;
|
|
85
|
+
isSkipped?: boolean | undefined;
|
|
76
86
|
isBinary?: boolean | undefined;
|
|
77
87
|
}, {
|
|
78
88
|
slug: string;
|
|
@@ -85,8 +95,17 @@ export declare const categoryConfigSchema: z.ZodObject<z.objectUtil.extendShape<
|
|
|
85
95
|
title: string;
|
|
86
96
|
description?: string | undefined;
|
|
87
97
|
docsUrl?: string | undefined;
|
|
98
|
+
isSkipped?: boolean | undefined;
|
|
88
99
|
isBinary?: boolean | undefined;
|
|
89
100
|
}>;
|
|
101
|
+
/**
|
|
102
|
+
* Type Definition: `CategoryConfig`
|
|
103
|
+
*
|
|
104
|
+
* This type is derived from a Zod schema and represents
|
|
105
|
+
* the validated structure of `CategoryConfig` used within the application.
|
|
106
|
+
*
|
|
107
|
+
* @see {@link https://github.com/code-pushup/cli/blob/main/packages/models/docs/models-reference.md#categoryconfig}
|
|
108
|
+
*/
|
|
90
109
|
export type CategoryConfig = z.infer<typeof categoryConfigSchema>;
|
|
91
110
|
export declare function duplicateRefsInCategoryMetricsErrorMsg(metrics: CategoryRef[]): string;
|
|
92
111
|
export declare const categoriesSchema: z.ZodEffects<z.ZodArray<z.ZodObject<z.objectUtil.extendShape<z.objectUtil.extendShape<{
|
|
@@ -132,6 +151,7 @@ export declare const categoriesSchema: z.ZodEffects<z.ZodArray<z.ZodObject<z.obj
|
|
|
132
151
|
title: z.ZodString;
|
|
133
152
|
description: z.ZodOptional<z.ZodString>;
|
|
134
153
|
docsUrl: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
|
|
154
|
+
isSkipped: z.ZodOptional<z.ZodBoolean>;
|
|
135
155
|
}>, {
|
|
136
156
|
isBinary: z.ZodOptional<z.ZodBoolean>;
|
|
137
157
|
}>, "strip", z.ZodTypeAny, {
|
|
@@ -145,6 +165,7 @@ export declare const categoriesSchema: z.ZodEffects<z.ZodArray<z.ZodObject<z.obj
|
|
|
145
165
|
title: string;
|
|
146
166
|
description?: string | undefined;
|
|
147
167
|
docsUrl?: string | undefined;
|
|
168
|
+
isSkipped?: boolean | undefined;
|
|
148
169
|
isBinary?: boolean | undefined;
|
|
149
170
|
}, {
|
|
150
171
|
slug: string;
|
|
@@ -157,6 +178,7 @@ export declare const categoriesSchema: z.ZodEffects<z.ZodArray<z.ZodObject<z.obj
|
|
|
157
178
|
title: string;
|
|
158
179
|
description?: string | undefined;
|
|
159
180
|
docsUrl?: string | undefined;
|
|
181
|
+
isSkipped?: boolean | undefined;
|
|
160
182
|
isBinary?: boolean | undefined;
|
|
161
183
|
}>, "many">, {
|
|
162
184
|
slug: string;
|
|
@@ -169,6 +191,7 @@ export declare const categoriesSchema: z.ZodEffects<z.ZodArray<z.ZodObject<z.obj
|
|
|
169
191
|
title: string;
|
|
170
192
|
description?: string | undefined;
|
|
171
193
|
docsUrl?: string | undefined;
|
|
194
|
+
isSkipped?: boolean | undefined;
|
|
172
195
|
isBinary?: boolean | undefined;
|
|
173
196
|
}[], {
|
|
174
197
|
slug: string;
|
|
@@ -181,5 +204,6 @@ export declare const categoriesSchema: z.ZodEffects<z.ZodArray<z.ZodObject<z.obj
|
|
|
181
204
|
title: string;
|
|
182
205
|
description?: string | undefined;
|
|
183
206
|
docsUrl?: string | undefined;
|
|
207
|
+
isSkipped?: boolean | undefined;
|
|
184
208
|
isBinary?: boolean | undefined;
|
|
185
209
|
}[]>;
|
|
@@ -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"}
|
package/src/lib/commit.d.ts
CHANGED
|
@@ -15,4 +15,12 @@ export declare const commitSchema: z.ZodObject<{
|
|
|
15
15
|
hash: string;
|
|
16
16
|
author: string;
|
|
17
17
|
}>;
|
|
18
|
+
/**
|
|
19
|
+
* Type Definition: `Commit`
|
|
20
|
+
*
|
|
21
|
+
* This type is derived from a Zod schema and represents
|
|
22
|
+
* the validated structure of `Commit` used within the application.
|
|
23
|
+
*
|
|
24
|
+
* @see {@link https://github.com/code-pushup/cli/blob/main/packages/models/docs/models-reference.md#commit}
|
|
25
|
+
*/
|
|
18
26
|
export type Commit = z.infer<typeof commitSchema>;
|
|
@@ -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"}
|