@code-pushup/js-packages-plugin 0.69.3 → 0.69.4
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 +3 -3
- package/src/lib/package-managers/package-managers.js +4 -4
- package/src/lib/package-managers/package-managers.js.map +1 -1
- package/src/lib/package-managers/yarn-classic/audit-result.d.ts +1 -1
- package/src/lib/package-managers/yarn-classic/audit-result.js +8 -8
- package/src/lib/package-managers/yarn-classic/audit-result.js.map +1 -1
- package/src/lib/package-managers/yarn-classic/constants.d.ts +3 -3
- package/src/lib/package-managers/yarn-classic/constants.js.map +1 -1
- package/src/lib/package-managers/yarn-classic/outdated-result.d.ts +1 -1
- package/src/lib/package-managers/yarn-classic/outdated-result.js +9 -9
- package/src/lib/package-managers/yarn-classic/outdated-result.js.map +1 -1
- package/src/lib/package-managers/yarn-classic/types.d.ts +10 -10
- package/src/lib/package-managers/yarn-classic/types.js +1 -1
- package/src/lib/package-managers/yarn-classic/types.js.map +1 -1
- package/src/lib/package-managers/yarn-classic/yarn-classic.d.ts +1 -1
- package/src/lib/package-managers/yarn-classic/yarn-classic.js +5 -5
- package/src/lib/package-managers/yarn-classic/yarn-classic.js.map +1 -1
- package/src/lib/package-managers/yarn-modern/audit-result.d.ts +1 -1
- package/src/lib/package-managers/yarn-modern/audit-result.js +30 -6
- package/src/lib/package-managers/yarn-modern/audit-result.js.map +1 -1
- package/src/lib/package-managers/yarn-modern/outdated-result.d.ts +1 -1
- package/src/lib/package-managers/yarn-modern/outdated-result.js +1 -1
- package/src/lib/package-managers/yarn-modern/outdated-result.js.map +1 -1
- package/src/lib/package-managers/yarn-modern/types.d.ts +18 -5
- package/src/lib/package-managers/yarn-modern/yarn-modern.d.ts +1 -1
- package/src/lib/package-managers/yarn-modern/yarn-modern.js +7 -7
- package/src/lib/package-managers/yarn-modern/yarn-modern.js.map +1 -1
- package/src/lib/runner/audit/types.d.ts +1 -1
- package/src/lib/runner/audit/utils.d.ts +5 -1
- package/src/lib/runner/audit/utils.js +10 -0
- package/src/lib/runner/audit/utils.js.map +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@code-pushup/js-packages-plugin",
|
|
3
|
-
"version": "0.69.
|
|
3
|
+
"version": "0.69.4",
|
|
4
4
|
"description": "Code PushUp plugin for JavaScript packages 🛡️",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"homepage": "https://github.com/code-pushup/cli/tree/main/packages/plugin-js-packages#readme",
|
|
@@ -37,8 +37,8 @@
|
|
|
37
37
|
},
|
|
38
38
|
"type": "module",
|
|
39
39
|
"dependencies": {
|
|
40
|
-
"@code-pushup/models": "0.69.
|
|
41
|
-
"@code-pushup/utils": "0.69.
|
|
40
|
+
"@code-pushup/models": "0.69.4",
|
|
41
|
+
"@code-pushup/utils": "0.69.4",
|
|
42
42
|
"build-md": "^0.4.1",
|
|
43
43
|
"semver": "^7.6.0",
|
|
44
44
|
"yargs": "^17.7.2",
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { npmPackageManager } from './npm/npm.js';
|
|
2
2
|
import { pnpmPackageManager } from './pnpm/pnpm.js';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { yarnClassicPackageManager } from './yarn-classic/yarn-classic.js';
|
|
4
|
+
import { yarnModernPackageManager } from './yarn-modern/yarn-modern.js';
|
|
5
5
|
export const packageManagers = {
|
|
6
6
|
npm: npmPackageManager,
|
|
7
|
-
'yarn-classic':
|
|
8
|
-
'yarn-modern':
|
|
7
|
+
'yarn-classic': yarnClassicPackageManager,
|
|
8
|
+
'yarn-modern': yarnModernPackageManager,
|
|
9
9
|
pnpm: pnpmPackageManager,
|
|
10
10
|
};
|
|
11
11
|
//# sourceMappingURL=package-managers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package-managers.js","sourceRoot":"","sources":["../../../../../../packages/plugin-js-packages/src/lib/package-managers/package-managers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEpD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"package-managers.js","sourceRoot":"","sources":["../../../../../../packages/plugin-js-packages/src/lib/package-managers/package-managers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEpD,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AAExE,MAAM,CAAC,MAAM,eAAe,GAA6C;IACvE,GAAG,EAAE,iBAAiB;IACtB,cAAc,EAAE,yBAAyB;IACzC,aAAa,EAAE,wBAAwB;IACvC,IAAI,EAAE,kBAAkB;CACzB,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import type { AuditResult } from '../../runner/audit/types.js';
|
|
2
|
-
export declare function
|
|
2
|
+
export declare function yarnClassicToAuditResult(output: string): AuditResult;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { fromJsonLines } from '@code-pushup/utils';
|
|
2
2
|
import { filterAuditResult } from '../../runner/utils.js';
|
|
3
|
-
export function
|
|
4
|
-
const
|
|
5
|
-
const [
|
|
6
|
-
const vulnerabilities =
|
|
3
|
+
export function yarnClassicToAuditResult(output) {
|
|
4
|
+
const yarnResult = fromJsonLines(output);
|
|
5
|
+
const [yarnAdvisories, yarnSummary] = validateYarnAuditResult(yarnResult);
|
|
6
|
+
const vulnerabilities = yarnAdvisories.map(({ data: { resolution, advisory } }) => {
|
|
7
7
|
const { id, path } = resolution;
|
|
8
8
|
const directDependency = path.slice(0, path.indexOf('>'));
|
|
9
9
|
const { module_name: name, title, url, severity, vulnerable_versions: versionRange, recommendation: fixInformation, } = advisory;
|
|
@@ -19,18 +19,18 @@ export function yarnv1ToAuditResult(output) {
|
|
|
19
19
|
};
|
|
20
20
|
});
|
|
21
21
|
const summary = {
|
|
22
|
-
...
|
|
23
|
-
total: Object.values(
|
|
22
|
+
...yarnSummary.data.vulnerabilities,
|
|
23
|
+
total: Object.values(yarnSummary.data.vulnerabilities).reduce((acc, amount) => acc + amount, 0),
|
|
24
24
|
};
|
|
25
25
|
// duplicates are filtered out based on their ID
|
|
26
26
|
return filterAuditResult({ vulnerabilities, summary }, 'id');
|
|
27
27
|
}
|
|
28
|
-
function
|
|
28
|
+
function validateYarnAuditResult(result) {
|
|
29
29
|
const summary = result.at(-1);
|
|
30
30
|
if (summary?.type !== 'auditSummary') {
|
|
31
31
|
throw new Error('Invalid Yarn v1 audit result - no summary found.');
|
|
32
32
|
}
|
|
33
|
-
const vulnerabilities = result.filter(
|
|
33
|
+
const vulnerabilities = result.filter(item => item.type === 'auditAdvisory');
|
|
34
34
|
return [vulnerabilities, summary];
|
|
35
35
|
}
|
|
36
36
|
//# sourceMappingURL=audit-result.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit-result.js","sourceRoot":"","sources":["../../../../../../../packages/plugin-js-packages/src/lib/package-managers/yarn-classic/audit-result.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAO1D,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"audit-result.js","sourceRoot":"","sources":["../../../../../../../packages/plugin-js-packages/src/lib/package-managers/yarn-classic/audit-result.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAO1D,MAAM,UAAU,wBAAwB,CAAC,MAAc;IACrD,MAAM,UAAU,GAAG,aAAa,CAA6B,MAAM,CAAC,CAAC;IACrE,MAAM,CAAC,cAAc,EAAE,WAAW,CAAC,GAAG,uBAAuB,CAAC,UAAU,CAAC,CAAC;IAE1E,MAAM,eAAe,GAAG,cAAc,CAAC,GAAG,CACxC,CAAC,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAiB,EAAE;QACpD,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,UAAU,CAAC;QAChC,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;QAE1D,MAAM,EACJ,WAAW,EAAE,IAAI,EACjB,KAAK,EACL,GAAG,EACH,QAAQ,EACR,mBAAmB,EAAE,YAAY,EACjC,cAAc,EAAE,cAAc,GAC/B,GAAG,QAAQ,CAAC;QAEb,OAAO;YACL,IAAI;YACJ,KAAK;YACL,EAAE;YACF,GAAG;YACH,QAAQ;YACR,YAAY;YACZ,gBAAgB,EAAE,IAAI,KAAK,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB;YACrE,cAAc;SACf,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,MAAM,OAAO,GAAG;QACd,GAAG,WAAW,CAAC,IAAI,CAAC,eAAe;QACnC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,MAAM,CAC3D,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,GAAG,MAAM,EAC7B,CAAC,CACF;KACF,CAAC;IAEF,gDAAgD;IAChD,OAAO,iBAAiB,CAAC,EAAE,eAAe,EAAE,OAAO,EAAE,EAAE,IAAI,CAAC,CAAC;AAC/D,CAAC;AAED,SAAS,uBAAuB,CAC9B,MAAkC;IAElC,MAAM,OAAO,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9B,IAAI,OAAO,EAAE,IAAI,KAAK,cAAc,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACtE,CAAC;IAED,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,eAAe,CAAC,CAAC;IAE7E,OAAO,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;AACpC,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { OutdatedDependency } from '../../runner/outdated/types.js';
|
|
2
|
-
import type {
|
|
3
|
-
export declare const outdatedtoFieldMapper: Record<keyof OutdatedDependency,
|
|
4
|
-
export declare const REQUIRED_OUTDATED_FIELDS:
|
|
2
|
+
import type { YarnClassicFieldName } from './types.js';
|
|
3
|
+
export declare const outdatedtoFieldMapper: Record<keyof OutdatedDependency, YarnClassicFieldName>;
|
|
4
|
+
export declare const REQUIRED_OUTDATED_FIELDS: YarnClassicFieldName[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../../../../packages/plugin-js-packages/src/lib/package-managers/yarn-classic/constants.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,qBAAqB,GAG9B;IACF,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,SAAS;IAClB,MAAM,EAAE,QAAQ;IAChB,IAAI,EAAE,cAAc;IACpB,GAAG,EAAE,KAAK;CACX,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../../../../packages/plugin-js-packages/src/lib/package-managers/yarn-classic/constants.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,qBAAqB,GAG9B;IACF,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,SAAS;IAClB,MAAM,EAAE,QAAQ;IAChB,IAAI,EAAE,cAAc;IACpB,GAAG,EAAE,KAAK;CACX,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAA2B;IAC9D,SAAS;IACT,SAAS;IACT,QAAQ;IACR,cAAc;CACf,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { OutdatedDependency, OutdatedResult } from '../../runner/outdated/types.js';
|
|
2
|
-
export declare function
|
|
2
|
+
export declare function yarnClassicToOutdatedResult(output: string): OutdatedResult;
|
|
3
3
|
export declare function validateOutdatedFields(head: string[]): boolean;
|
|
4
4
|
export declare function getOutdatedFieldIndexes(all: string[]): Record<keyof OutdatedDependency, number>;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { fromJsonLines, objectFromEntries, objectToEntries, objectToKeys, } from '@code-pushup/utils';
|
|
2
2
|
import { REQUIRED_OUTDATED_FIELDS, outdatedtoFieldMapper, } from './constants.js';
|
|
3
|
-
import {
|
|
4
|
-
export function
|
|
5
|
-
const
|
|
6
|
-
const fields =
|
|
7
|
-
const dependencies =
|
|
3
|
+
import { yarnClassicFieldNames, } from './types.js';
|
|
4
|
+
export function yarnClassicToOutdatedResult(output) {
|
|
5
|
+
const yarnOutdated = fromJsonLines(output);
|
|
6
|
+
const fields = yarnOutdated[1]?.data.head ?? [];
|
|
7
|
+
const dependencies = yarnOutdated[1]?.data.body ?? [];
|
|
8
8
|
// no outdated dependencies
|
|
9
9
|
if (dependencies.length === 0) {
|
|
10
10
|
return [];
|
|
@@ -17,14 +17,14 @@ export function yarnv1ToOutdatedResult(output) {
|
|
|
17
17
|
.filter((entry) => entry[1] != null)));
|
|
18
18
|
}
|
|
19
19
|
export function validateOutdatedFields(head) {
|
|
20
|
-
const relevantFields = head.filter(
|
|
20
|
+
const relevantFields = head.filter(isYarnClassicFieldName);
|
|
21
21
|
if (hasAllRequiredFields(relevantFields)) {
|
|
22
22
|
return true;
|
|
23
23
|
}
|
|
24
|
-
throw new Error(`Yarn v1 outdated: Template [${head.join(', ')}] does not contain all required fields [${
|
|
24
|
+
throw new Error(`Yarn v1 outdated: Template [${head.join(', ')}] does not contain all required fields [${yarnClassicFieldNames.join(', ')}]`);
|
|
25
25
|
}
|
|
26
|
-
function
|
|
27
|
-
const names =
|
|
26
|
+
function isYarnClassicFieldName(value) {
|
|
27
|
+
const names = yarnClassicFieldNames;
|
|
28
28
|
return names.includes(value);
|
|
29
29
|
}
|
|
30
30
|
function hasAllRequiredFields(head) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"outdated-result.js","sourceRoot":"","sources":["../../../../../../../packages/plugin-js-packages/src/lib/package-managers/yarn-classic/outdated-result.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,YAAY,GACb,MAAM,oBAAoB,CAAC;AAK5B,OAAO,EACL,wBAAwB,EACxB,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAGL,
|
|
1
|
+
{"version":3,"file":"outdated-result.js","sourceRoot":"","sources":["../../../../../../../packages/plugin-js-packages/src/lib/package-managers/yarn-classic/outdated-result.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,YAAY,GACb,MAAM,oBAAoB,CAAC;AAK5B,OAAO,EACL,wBAAwB,EACxB,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAGL,qBAAqB,GACtB,MAAM,YAAY,CAAC;AAEpB,MAAM,UAAU,2BAA2B,CAAC,MAAc;IACxD,MAAM,YAAY,GAAG,aAAa,CAAgC,MAAM,CAAC,CAAC;IAC1E,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;IAChD,MAAM,YAAY,GAAG,YAAY,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;IAEtD,2BAA2B;IAC3B,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,qBAAqB;IACrB,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAC/B,MAAM,YAAY,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAErD,OAAO,YAAY,CAAC,GAAG,CACrB,GAAG,CAAC,EAAE,CACJ,iBAAiB,CACf,YAAY,CAAC,YAAY,CAAC;SACvB,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAU,CAAC;SACxD,MAAM,CACL,CAAC,KAAK,EAA+C,EAAE,CACrD,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CACnB,CACkB,CAC1B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,IAAc;IACnD,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC;IAC3D,IAAI,oBAAoB,CAAC,cAAc,CAAC,EAAE,CAAC;QACzC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,IAAI,KAAK,CACb,+BAA+B,IAAI,CAAC,IAAI,CACtC,IAAI,CACL,2CAA2C,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAChF,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAa;IAC3C,MAAM,KAAK,GAAsB,qBAAqB,CAAC;IACvD,OAAO,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,oBAAoB,CAAC,IAA4B;IACxD,OAAO,wBAAwB,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,GAAa;IACnD,OAAO,iBAAiB,CACtB,eAAe,CAAC,qBAAqB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,aAAa,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC;QACzE,aAAa;QACb,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC;KACvB,CAAC,CACH,CAAC;AACJ,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { PackageAuditLevel } from '../../config.js';
|
|
2
|
-
export type
|
|
2
|
+
export type YarnClassicAuditAdvisory = {
|
|
3
3
|
type: 'auditAdvisory';
|
|
4
4
|
data: {
|
|
5
5
|
resolution: {
|
|
@@ -16,27 +16,27 @@ export type Yarnv1AuditAdvisory = {
|
|
|
16
16
|
};
|
|
17
17
|
};
|
|
18
18
|
};
|
|
19
|
-
export type
|
|
19
|
+
export type YarnClassicAuditSummary = {
|
|
20
20
|
type: 'auditSummary';
|
|
21
21
|
data: {
|
|
22
22
|
vulnerabilities: Record<PackageAuditLevel, number>;
|
|
23
23
|
};
|
|
24
24
|
};
|
|
25
|
-
export type
|
|
26
|
-
...
|
|
27
|
-
|
|
25
|
+
export type YarnClassicAuditResultJson = [
|
|
26
|
+
...YarnClassicAuditAdvisory[],
|
|
27
|
+
YarnClassicAuditSummary
|
|
28
28
|
];
|
|
29
|
-
export declare const
|
|
30
|
-
export type
|
|
31
|
-
type
|
|
29
|
+
export declare const yarnClassicFieldNames: readonly ["Package", "Current", "Latest", "Package Type", "URL"];
|
|
30
|
+
export type YarnClassicFieldName = (typeof yarnClassicFieldNames)[number];
|
|
31
|
+
type YarnClassicInfo = {
|
|
32
32
|
type: 'info';
|
|
33
33
|
};
|
|
34
|
-
type
|
|
34
|
+
type YarnClassicTable = {
|
|
35
35
|
type: 'table';
|
|
36
36
|
data: {
|
|
37
37
|
head: string[];
|
|
38
38
|
body: string[][];
|
|
39
39
|
};
|
|
40
40
|
};
|
|
41
|
-
export type
|
|
41
|
+
export type YarnClassicOutdatedResultJson = [YarnClassicInfo, YarnClassicTable] | [];
|
|
42
42
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../../../packages/plugin-js-packages/src/lib/package-managers/yarn-classic/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../../../packages/plugin-js-packages/src/lib/package-managers/yarn-classic/types.ts"],"names":[],"mappings":"AAiCA,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,SAAS;IACT,SAAS;IACT,QAAQ;IACR,cAAc;IACd,KAAK;CACG,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import type { PackageManager } from '../types.js';
|
|
2
|
-
export declare const
|
|
2
|
+
export declare const yarnClassicPackageManager: PackageManager;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { dependencyGroupToLong } from '../../constants.js';
|
|
2
2
|
import { COMMON_AUDIT_ARGS, COMMON_OUTDATED_ARGS } from '../constants.js';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
export const
|
|
3
|
+
import { yarnClassicToAuditResult } from './audit-result.js';
|
|
4
|
+
import { yarnClassicToOutdatedResult } from './outdated-result.js';
|
|
5
|
+
export const yarnClassicPackageManager = {
|
|
6
6
|
slug: 'yarn-classic',
|
|
7
7
|
name: 'Yarn v1',
|
|
8
8
|
command: 'yarn',
|
|
@@ -19,11 +19,11 @@ export const yarnv1PackageManager = {
|
|
|
19
19
|
dependencyGroupToLong[groupDep],
|
|
20
20
|
],
|
|
21
21
|
ignoreExitCode: true,
|
|
22
|
-
unifyResult:
|
|
22
|
+
unifyResult: yarnClassicToAuditResult,
|
|
23
23
|
},
|
|
24
24
|
outdated: {
|
|
25
25
|
commandArgs: COMMON_OUTDATED_ARGS,
|
|
26
|
-
unifyResult:
|
|
26
|
+
unifyResult: yarnClassicToOutdatedResult,
|
|
27
27
|
},
|
|
28
28
|
};
|
|
29
29
|
//# sourceMappingURL=yarn-classic.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"yarn-classic.js","sourceRoot":"","sources":["../../../../../../../packages/plugin-js-packages/src/lib/package-managers/yarn-classic/yarn-classic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAE1E,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"yarn-classic.js","sourceRoot":"","sources":["../../../../../../../packages/plugin-js-packages/src/lib/package-managers/yarn-classic/yarn-classic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAE1E,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AAEnE,MAAM,CAAC,MAAM,yBAAyB,GAAmB;IACvD,IAAI,EAAE,cAAc;IACpB,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,MAAM;IACf,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE;QACJ,QAAQ,EAAE,mCAAmC;QAC7C,KAAK,EAAE,4CAA4C;QACnD,QAAQ,EAAE,gDAAgD;KAC3D;IACD,KAAK,EAAE;QACL,cAAc,EAAE,QAAQ,CAAC,EAAE,CAAC;YAC1B,GAAG,iBAAiB;YACpB,UAAU;YACV,qBAAqB,CAAC,QAAQ,CAAC;SAChC;QACD,cAAc,EAAE,IAAI;QACpB,WAAW,EAAE,wBAAwB;KACtC;IACD,QAAQ,EAAE;QACR,WAAW,EAAE,oBAAoB;QACjC,WAAW,EAAE,2BAA2B;KACzC;CACF,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import type { AuditResult } from '../../runner/audit/types.js';
|
|
2
|
-
export declare function
|
|
2
|
+
export declare function yarnBerryToAuditResult(output: string): AuditResult;
|
|
@@ -1,7 +1,17 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const
|
|
1
|
+
import { fromJsonLines } from '@code-pushup/utils';
|
|
2
|
+
import { getVulnerabilitiesTotal, summaryStatsFromVulnerabilities, } from '../../runner/audit/utils.js';
|
|
3
|
+
export function yarnBerryToAuditResult(output) {
|
|
4
|
+
const json = fromJsonLines(output);
|
|
5
|
+
if (json.length === 1 && 'advisories' in json[0] && 'metadata' in json[0]) {
|
|
6
|
+
return transformYarn2or3(json[0]);
|
|
7
|
+
}
|
|
8
|
+
if (json.every(item => 'value' in item && 'children' in item)) {
|
|
9
|
+
return transformYarn4(json);
|
|
10
|
+
}
|
|
11
|
+
throw new Error(`Unknown output format from 'yarn npm audit --json':\n${output}`);
|
|
12
|
+
}
|
|
13
|
+
function transformYarn2or3(json) {
|
|
14
|
+
const vulnerabilities = Object.values(json.advisories).map(({ module_name: name, severity, title, url, vulnerable_versions: versionRange, recommendation: fixInformation, findings, }) => {
|
|
5
15
|
// TODO missing example of an indirect dependency to verify this
|
|
6
16
|
const directDep = findings[0]?.paths[0];
|
|
7
17
|
return {
|
|
@@ -17,9 +27,23 @@ export function yarnv2ToAuditResult(output) {
|
|
|
17
27
|
return {
|
|
18
28
|
vulnerabilities,
|
|
19
29
|
summary: {
|
|
20
|
-
...
|
|
21
|
-
total: getVulnerabilitiesTotal(
|
|
30
|
+
...json.metadata.vulnerabilities,
|
|
31
|
+
total: getVulnerabilitiesTotal(json.metadata.vulnerabilities),
|
|
22
32
|
},
|
|
23
33
|
};
|
|
24
34
|
}
|
|
35
|
+
function transformYarn4(json) {
|
|
36
|
+
const vulnerabilities = json.map(({ value, children }) => ({
|
|
37
|
+
name: value,
|
|
38
|
+
severity: children['Severity'],
|
|
39
|
+
title: children['Issue'],
|
|
40
|
+
url: children['URL'],
|
|
41
|
+
id: children['ID'],
|
|
42
|
+
versionRange: children['Vulnerable Versions'],
|
|
43
|
+
directDependency: children['Dependents'].some(spec => spec.endsWith('@workspace:.')) ||
|
|
44
|
+
'',
|
|
45
|
+
}));
|
|
46
|
+
const summary = summaryStatsFromVulnerabilities(vulnerabilities);
|
|
47
|
+
return { vulnerabilities, summary };
|
|
48
|
+
}
|
|
25
49
|
//# sourceMappingURL=audit-result.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit-result.js","sourceRoot":"","sources":["../../../../../../../packages/plugin-js-packages/src/lib/package-managers/yarn-modern/audit-result.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"audit-result.js","sourceRoot":"","sources":["../../../../../../../packages/plugin-js-packages/src/lib/package-managers/yarn-modern/audit-result.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,EACL,uBAAuB,EACvB,+BAA+B,GAChC,MAAM,6BAA6B,CAAC;AAMrC,MAAM,UAAU,sBAAsB,CAAC,MAAc;IACnD,MAAM,IAAI,GAAG,aAAa,CAExB,MAAM,CAAC,CAAC;IAEV,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,YAAY,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,UAAU,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1E,OAAO,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC;IAED,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,IAAI,IAAI,IAAI,UAAU,IAAI,IAAI,CAAC,EAAE,CAAC;QAC9D,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,MAAM,IAAI,KAAK,CACb,wDAAwD,MAAM,EAAE,CACjE,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAkC;IAC3D,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CACxD,CAAC,EACC,WAAW,EAAE,IAAI,EACjB,QAAQ,EACR,KAAK,EACL,GAAG,EACH,mBAAmB,EAAE,YAAY,EACjC,cAAc,EAAE,cAAc,EAC9B,QAAQ,GACT,EAAiB,EAAE;QAClB,gEAAgE;QAChE,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;QACxC,OAAO;YACL,IAAI;YACJ,QAAQ;YACR,KAAK;YACL,GAAG;YACH,YAAY;YACZ,cAAc;YACd,gBAAgB,EACd,SAAS,IAAI,IAAI,IAAI,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI;SAC7D,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,OAAO;QACL,eAAe;QACf,OAAO,EAAE;YACP,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe;YAChC,KAAK,EAAE,uBAAuB,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC;SAC9D;KACF,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,IAA+B;IACrD,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAC9B,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAiB,EAAE,CAAC,CAAC;QACvC,IAAI,EAAE,KAAK;QACX,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC;QAC9B,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC;QACxB,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC;QACpB,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC;QAClB,YAAY,EAAE,QAAQ,CAAC,qBAAqB,CAAC;QAC7C,gBAAgB,EACd,QAAQ,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;YAClE,EAAE;KACL,CAAC,CACH,CAAC;IAEF,MAAM,OAAO,GAAG,+BAA+B,CAAC,eAAe,CAAC,CAAC;IAEjE,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,CAAC;AACtC,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import type { OutdatedResult } from '../../runner/outdated/types.js';
|
|
2
|
-
export declare function
|
|
2
|
+
export declare function yarnBerryToOutdatedResult(output: string): OutdatedResult;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"outdated-result.js","sourceRoot":"","sources":["../../../../../../../packages/plugin-js-packages/src/lib/package-managers/yarn-modern/outdated-result.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"outdated-result.js","sourceRoot":"","sources":["../../../../../../../packages/plugin-js-packages/src/lib/package-managers/yarn-modern/outdated-result.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,yBAAyB,CAAC,MAAc;IACtD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAgC,CAAC;IAEtE,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QAC3D,IAAI;QACJ,OAAO;QACP,MAAM;QACN,IAAI;KACL,CAAC,CAAC,CAAC;AACN,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { PackageAuditLevel } from '../../config.js';
|
|
2
2
|
import type { DependencyGroupLong } from '../../runner/outdated/types.js';
|
|
3
|
-
export type
|
|
3
|
+
export type YarnBerry2or3AuditAdvisory = {
|
|
4
4
|
module_name: string;
|
|
5
5
|
severity: PackageAuditLevel;
|
|
6
6
|
vulnerable_versions: string;
|
|
@@ -11,17 +11,30 @@ export type Yarnv2AuditAdvisory = {
|
|
|
11
11
|
paths: string[];
|
|
12
12
|
}[];
|
|
13
13
|
};
|
|
14
|
-
export type
|
|
15
|
-
advisories: Record<string,
|
|
14
|
+
export type YarnBerry2or3AuditResultJson = {
|
|
15
|
+
advisories: Record<string, YarnBerry2or3AuditAdvisory>;
|
|
16
16
|
metadata: {
|
|
17
17
|
vulnerabilities: Record<PackageAuditLevel, number>;
|
|
18
18
|
};
|
|
19
19
|
};
|
|
20
|
-
export type
|
|
20
|
+
export type YarnBerry4AuditVulnerability = {
|
|
21
|
+
value: string;
|
|
22
|
+
children: {
|
|
23
|
+
ID: number;
|
|
24
|
+
Issue: string;
|
|
25
|
+
URL: string;
|
|
26
|
+
Severity: PackageAuditLevel;
|
|
27
|
+
'Vulnerable Versions': string;
|
|
28
|
+
'Tree Versions': string[];
|
|
29
|
+
Dependents: string[];
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
export type YarnBerry4AuditResultJson = YarnBerry4AuditVulnerability[];
|
|
33
|
+
export type YarnBerryOutdatedPackage = {
|
|
21
34
|
current: string;
|
|
22
35
|
latest: string;
|
|
23
36
|
name: string;
|
|
24
37
|
type: DependencyGroupLong;
|
|
25
38
|
workspace?: string;
|
|
26
39
|
};
|
|
27
|
-
export type
|
|
40
|
+
export type YarnBerryOutdatedResultJson = YarnBerryOutdatedPackage[];
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import type { PackageManager } from '../types.js';
|
|
2
|
-
export declare const
|
|
2
|
+
export declare const yarnModernPackageManager: PackageManager;
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { COMMON_AUDIT_ARGS, COMMON_OUTDATED_ARGS } from '../constants.js';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { yarnBerryToAuditResult } from './audit-result.js';
|
|
3
|
+
import { yarnBerryToOutdatedResult } from './outdated-result.js';
|
|
4
4
|
// see https://github.com/yarnpkg/berry/blob/master/packages/plugin-npm-cli/sources/npmAuditTypes.ts#L5
|
|
5
|
-
const
|
|
5
|
+
const yarnModernEnvironmentOptions = {
|
|
6
6
|
prod: 'production',
|
|
7
7
|
dev: 'development',
|
|
8
8
|
optional: '',
|
|
9
9
|
};
|
|
10
|
-
export const
|
|
10
|
+
export const yarnModernPackageManager = {
|
|
11
11
|
slug: 'yarn-modern',
|
|
12
12
|
name: 'yarn-modern',
|
|
13
13
|
command: 'yarn',
|
|
@@ -22,15 +22,15 @@ export const yarnv2PackageManager = {
|
|
|
22
22
|
'npm',
|
|
23
23
|
...COMMON_AUDIT_ARGS,
|
|
24
24
|
'--environment',
|
|
25
|
-
|
|
25
|
+
yarnModernEnvironmentOptions[groupDep],
|
|
26
26
|
],
|
|
27
27
|
supportedDepGroups: ['prod', 'dev'], // Yarn v2 does not support audit for optional dependencies
|
|
28
|
-
unifyResult:
|
|
28
|
+
unifyResult: yarnBerryToAuditResult,
|
|
29
29
|
ignoreExitCode: true,
|
|
30
30
|
},
|
|
31
31
|
outdated: {
|
|
32
32
|
commandArgs: [...COMMON_OUTDATED_ARGS, '--workspace=.'], // filter out other packages in case of Yarn workspaces
|
|
33
|
-
unifyResult:
|
|
33
|
+
unifyResult: yarnBerryToOutdatedResult,
|
|
34
34
|
},
|
|
35
35
|
};
|
|
36
36
|
//# sourceMappingURL=yarn-modern.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"yarn-modern.js","sourceRoot":"","sources":["../../../../../../../packages/plugin-js-packages/src/lib/package-managers/yarn-modern/yarn-modern.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAE1E,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"yarn-modern.js","sourceRoot":"","sources":["../../../../../../../packages/plugin-js-packages/src/lib/package-managers/yarn-modern/yarn-modern.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAE1E,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAEjE,uGAAuG;AACvG,MAAM,4BAA4B,GAAoC;IACpE,IAAI,EAAE,YAAY;IAClB,GAAG,EAAE,aAAa;IAClB,QAAQ,EAAE,EAAE;CACb,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAmB;IACtD,IAAI,EAAE,aAAa;IACnB,IAAI,EAAE,aAAa;IACnB,OAAO,EAAE,MAAM;IACf,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE;QACJ,QAAQ,EAAE,qCAAqC;QAC/C,KAAK,EAAE,mCAAmC;QAC1C,QAAQ,EAAE,kDAAkD;KAC7D;IACD,KAAK,EAAE;QACL,cAAc,EAAE,QAAQ,CAAC,EAAE,CAAC;YAC1B,KAAK;YACL,GAAG,iBAAiB;YACpB,eAAe;YACf,4BAA4B,CAAC,QAAQ,CAAC;SACvC;QACD,kBAAkB,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,2DAA2D;QAChG,WAAW,EAAE,sBAAsB;QACnC,cAAc,EAAE,IAAI;KACrB;IACD,QAAQ,EAAE;QACR,WAAW,EAAE,CAAC,GAAG,oBAAoB,EAAE,eAAe,CAAC,EAAE,uDAAuD;QAChH,WAAW,EAAE,yBAAyB;KACvC;CACF,CAAC"}
|
|
@@ -7,7 +7,7 @@ export type Vulnerability = {
|
|
|
7
7
|
severity: PackageAuditLevel;
|
|
8
8
|
versionRange: string;
|
|
9
9
|
directDependency: string | true;
|
|
10
|
-
fixInformation
|
|
10
|
+
fixInformation?: string | false;
|
|
11
11
|
};
|
|
12
12
|
export type AuditSummary = Record<PackageAuditLevel | 'total', number>;
|
|
13
13
|
export type AuditResult = {
|
|
@@ -1,2 +1,6 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type PackageAuditLevel } from '../../config.js';
|
|
2
|
+
import type { AuditSummary } from './types.js';
|
|
2
3
|
export declare function getVulnerabilitiesTotal(summary: Record<PackageAuditLevel, number>): number;
|
|
4
|
+
export declare function summaryStatsFromVulnerabilities(vulnerabilities: {
|
|
5
|
+
severity: PackageAuditLevel;
|
|
6
|
+
}[]): AuditSummary;
|
|
@@ -1,4 +1,14 @@
|
|
|
1
|
+
import { objectFromEntries } from '@code-pushup/utils';
|
|
2
|
+
import { packageAuditLevels } from '../../config.js';
|
|
1
3
|
export function getVulnerabilitiesTotal(summary) {
|
|
2
4
|
return Object.values(summary).reduce((acc, value) => acc + value, 0);
|
|
3
5
|
}
|
|
6
|
+
export function summaryStatsFromVulnerabilities(vulnerabilities) {
|
|
7
|
+
const initial = objectFromEntries([...packageAuditLevels, 'total'].map(key => [key, 0]));
|
|
8
|
+
return vulnerabilities.reduce((acc, { severity }) => ({
|
|
9
|
+
...acc,
|
|
10
|
+
[severity]: acc[severity] + 1,
|
|
11
|
+
total: acc.total + 1,
|
|
12
|
+
}), initial);
|
|
13
|
+
}
|
|
4
14
|
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../../../packages/plugin-js-packages/src/lib/runner/audit/utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../../../packages/plugin-js-packages/src/lib/runner/audit/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAA0B,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAG7E,MAAM,UAAU,uBAAuB,CACrC,OAA0C;IAE1C,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,+BAA+B,CAC7C,eAAkD;IAElD,MAAM,OAAO,GAAiB,iBAAiB,CAC5C,CAAC,GAAG,kBAAkB,EAAE,OAAO,CAAW,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CACjE,CAAC;IACF,OAAO,eAAe,CAAC,MAAM,CAC3B,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;QACtB,GAAG,GAAG;QACN,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC;QAC7B,KAAK,EAAE,GAAG,CAAC,KAAK,GAAG,CAAC;KACrB,CAAC,EACF,OAAO,CACR,CAAC;AACJ,CAAC"}
|