@code-pushup/js-packages-plugin 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.
Files changed (113) hide show
  1. package/package.json +9 -7
  2. package/src/bin.js +6 -0
  3. package/src/bin.js.map +1 -0
  4. package/src/index.d.ts +2 -2
  5. package/src/index.js +3 -0
  6. package/src/index.js.map +1 -0
  7. package/src/lib/config.d.ts +4 -4
  8. package/src/lib/config.js +59 -0
  9. package/src/lib/config.js.map +1 -0
  10. package/src/lib/constants.d.ts +2 -2
  11. package/src/lib/constants.js +25 -0
  12. package/src/lib/constants.js.map +1 -0
  13. package/src/lib/js-packages-plugin.d.ts +1 -1
  14. package/src/lib/js-packages-plugin.js +101 -0
  15. package/src/lib/js-packages-plugin.js.map +1 -0
  16. package/src/lib/package-managers/constants.js +3 -0
  17. package/src/lib/package-managers/constants.js.map +1 -0
  18. package/src/lib/package-managers/derive-package-manager.d.ts +2 -2
  19. package/src/lib/package-managers/derive-package-manager.js +43 -0
  20. package/src/lib/package-managers/derive-package-manager.js.map +1 -0
  21. package/src/lib/package-managers/derive-yarn.js +16 -0
  22. package/src/lib/package-managers/derive-yarn.js.map +1 -0
  23. package/src/lib/package-managers/npm/audit-result.d.ts +2 -2
  24. package/src/lib/package-managers/npm/audit-result.js +65 -0
  25. package/src/lib/package-managers/npm/audit-result.js.map +1 -0
  26. package/src/lib/package-managers/npm/npm.d.ts +1 -1
  27. package/src/lib/package-managers/npm/npm.js +49 -0
  28. package/src/lib/package-managers/npm/npm.js.map +1 -0
  29. package/src/lib/package-managers/npm/outdated-result.d.ts +1 -1
  30. package/src/lib/package-managers/npm/outdated-result.js +16 -0
  31. package/src/lib/package-managers/npm/outdated-result.js.map +1 -0
  32. package/src/lib/package-managers/npm/types.d.ts +3 -3
  33. package/src/lib/package-managers/npm/types.js +2 -0
  34. package/src/lib/package-managers/npm/types.js.map +1 -0
  35. package/src/lib/package-managers/package-managers.d.ts +2 -2
  36. package/src/lib/package-managers/package-managers.js +11 -0
  37. package/src/lib/package-managers/package-managers.js.map +1 -0
  38. package/src/lib/package-managers/pnpm/audit-result.d.ts +1 -1
  39. package/src/lib/package-managers/pnpm/audit-result.js +34 -0
  40. package/src/lib/package-managers/pnpm/audit-result.js.map +1 -0
  41. package/src/lib/package-managers/pnpm/outdated-result.d.ts +1 -1
  42. package/src/lib/package-managers/pnpm/outdated-result.js +12 -0
  43. package/src/lib/package-managers/pnpm/outdated-result.js.map +1 -0
  44. package/src/lib/package-managers/pnpm/pnpm.d.ts +1 -1
  45. package/src/lib/package-managers/pnpm/pnpm.js +49 -0
  46. package/src/lib/package-managers/pnpm/pnpm.js.map +1 -0
  47. package/src/lib/package-managers/pnpm/types.d.ts +2 -2
  48. package/src/lib/package-managers/pnpm/types.js +2 -0
  49. package/src/lib/package-managers/pnpm/types.js.map +1 -0
  50. package/src/lib/package-managers/pnpm/utils.js +5 -0
  51. package/src/lib/package-managers/pnpm/utils.js.map +1 -0
  52. package/src/lib/package-managers/types.d.ts +3 -3
  53. package/src/lib/package-managers/types.js +2 -0
  54. package/src/lib/package-managers/types.js.map +1 -0
  55. package/src/lib/package-managers/yarn-classic/audit-result.d.ts +1 -1
  56. package/src/lib/package-managers/yarn-classic/audit-result.js +36 -0
  57. package/src/lib/package-managers/yarn-classic/audit-result.js.map +1 -0
  58. package/src/lib/package-managers/yarn-classic/constants.d.ts +2 -2
  59. package/src/lib/package-managers/yarn-classic/constants.js +14 -0
  60. package/src/lib/package-managers/yarn-classic/constants.js.map +1 -0
  61. package/src/lib/package-managers/yarn-classic/outdated-result.d.ts +1 -1
  62. package/src/lib/package-managers/yarn-classic/outdated-result.js +39 -0
  63. package/src/lib/package-managers/yarn-classic/outdated-result.js.map +1 -0
  64. package/src/lib/package-managers/yarn-classic/types.d.ts +1 -1
  65. package/src/lib/package-managers/yarn-classic/types.js +8 -0
  66. package/src/lib/package-managers/yarn-classic/types.js.map +1 -0
  67. package/src/lib/package-managers/yarn-classic/yarn-classic.d.ts +1 -1
  68. package/src/lib/package-managers/yarn-classic/yarn-classic.js +29 -0
  69. package/src/lib/package-managers/yarn-classic/yarn-classic.js.map +1 -0
  70. package/src/lib/package-managers/yarn-modern/audit-result.d.ts +1 -1
  71. package/src/lib/package-managers/yarn-modern/audit-result.js +25 -0
  72. package/src/lib/package-managers/yarn-modern/audit-result.js.map +1 -0
  73. package/src/lib/package-managers/yarn-modern/outdated-result.d.ts +1 -1
  74. package/src/lib/package-managers/yarn-modern/outdated-result.js +10 -0
  75. package/src/lib/package-managers/yarn-modern/outdated-result.js.map +1 -0
  76. package/src/lib/package-managers/yarn-modern/types.d.ts +2 -2
  77. package/src/lib/package-managers/yarn-modern/types.js +2 -0
  78. package/src/lib/package-managers/yarn-modern/types.js.map +1 -0
  79. package/src/lib/package-managers/yarn-modern/yarn-modern.d.ts +1 -1
  80. package/src/lib/package-managers/yarn-modern/yarn-modern.js +36 -0
  81. package/src/lib/package-managers/yarn-modern/yarn-modern.js.map +1 -0
  82. package/src/lib/runner/audit/constants.d.ts +1 -1
  83. package/src/lib/runner/audit/constants.js +10 -0
  84. package/src/lib/runner/audit/constants.js.map +1 -0
  85. package/src/lib/runner/audit/transform.d.ts +2 -2
  86. package/src/lib/runner/audit/transform.js +63 -0
  87. package/src/lib/runner/audit/transform.js.map +1 -0
  88. package/src/lib/runner/audit/types.d.ts +1 -1
  89. package/src/lib/runner/audit/types.js +2 -0
  90. package/src/lib/runner/audit/types.js.map +1 -0
  91. package/src/lib/runner/audit/utils.d.ts +1 -1
  92. package/src/lib/runner/audit/utils.js +4 -0
  93. package/src/lib/runner/audit/utils.js.map +1 -0
  94. package/src/lib/runner/index.d.ts +3 -3
  95. package/src/lib/runner/index.js +84 -0
  96. package/src/lib/runner/index.js.map +1 -0
  97. package/src/lib/runner/outdated/constants.js +13 -0
  98. package/src/lib/runner/outdated/constants.js.map +1 -0
  99. package/src/lib/runner/outdated/transform.d.ts +2 -2
  100. package/src/lib/runner/outdated/transform.js +60 -0
  101. package/src/lib/runner/outdated/transform.js.map +1 -0
  102. package/src/lib/runner/outdated/types.js +6 -0
  103. package/src/lib/runner/outdated/types.js.map +1 -0
  104. package/src/lib/runner/utils.d.ts +2 -2
  105. package/src/lib/runner/utils.js +56 -0
  106. package/src/lib/runner/utils.js.map +1 -0
  107. package/src/lib/utils.d.ts +3 -3
  108. package/src/lib/utils.js +17 -0
  109. package/src/lib/utils.js.map +1 -0
  110. package/bin.js +0 -1759
  111. package/index.js +0 -1651
  112. package/src/lib/package-managers/index.d.ts +0 -2
  113. package/src/lib/runner/constants.d.ts +0 -3
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-pushup/js-packages-plugin",
3
- "version": "0.56.0",
3
+ "version": "0.58.0",
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",
@@ -36,13 +36,15 @@
36
36
  "access": "public"
37
37
  },
38
38
  "type": "module",
39
- "main": "./index.js",
40
- "types": "./src/index.d.ts",
41
39
  "dependencies": {
42
- "@code-pushup/models": "0.56.0",
43
- "@code-pushup/utils": "0.56.0",
40
+ "@code-pushup/models": "0.58.0",
41
+ "@code-pushup/utils": "0.58.0",
44
42
  "build-md": "^0.4.1",
45
43
  "semver": "^7.6.0",
44
+ "yargs": "^17.7.2",
46
45
  "zod": "^3.22.4"
47
- }
48
- }
46
+ },
47
+ "module": "./src/index.js",
48
+ "main": "./src/index.js",
49
+ "types": "./src/index.d.ts"
50
+ }
package/src/bin.js ADDED
@@ -0,0 +1,6 @@
1
+ import process from 'node:process';
2
+ import { Parser } from 'yargs/helpers';
3
+ import { executeRunner } from './lib/runner/index.js';
4
+ const { runnerConfigPath, runnerOutputPath } = Parser(process.argv);
5
+ await executeRunner({ runnerConfigPath, runnerOutputPath });
6
+ //# sourceMappingURL=bin.js.map
package/src/bin.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.js","sourceRoot":"","sources":["../../../../packages/plugin-js-packages/src/bin.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,MAAM,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAEpE,MAAM,aAAa,CAAC,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,CAAC,CAAC"}
package/src/index.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- import { jsPackagesPlugin } from './lib/js-packages-plugin';
1
+ import { jsPackagesPlugin } from './lib/js-packages-plugin.js';
2
2
  export default jsPackagesPlugin;
3
- export type { JSPackagesPluginConfig } from './lib/config';
3
+ export type { JSPackagesPluginConfig } from './lib/config.js';
package/src/index.js ADDED
@@ -0,0 +1,3 @@
1
+ import { jsPackagesPlugin } from './lib/js-packages-plugin.js';
2
+ export default jsPackagesPlugin;
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/plugin-js-packages/src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAE/D,eAAe,gBAAgB,CAAC"}
@@ -23,7 +23,7 @@ export declare const jsPackagesPluginConfigSchema: z.ZodObject<{
23
23
  checks: z.ZodDefault<z.ZodArray<z.ZodEnum<["audit", "outdated"]>, "many">>;
24
24
  packageManager: z.ZodOptional<z.ZodEnum<["npm", "yarn-classic", "yarn-modern", "pnpm"]>>;
25
25
  dependencyGroups: z.ZodDefault<z.ZodArray<z.ZodEnum<["prod", "dev", "optional"]>, "many">>;
26
- auditLevelMapping: z.ZodEffects<z.ZodDefault<z.ZodRecord<z.ZodEnum<["critical", "high", "moderate", "low", "info"]>, z.ZodEnum<["info", "warning", "error"]>>>, AuditSeverity, Partial<Record<"info" | "critical" | "high" | "moderate" | "low", "info" | "warning" | "error">> | undefined>;
26
+ auditLevelMapping: z.ZodEffects<z.ZodDefault<z.ZodRecord<z.ZodEnum<["critical", "high", "moderate", "low", "info"]>, z.ZodEnum<["info", "warning", "error"]>>>, AuditSeverity, Partial<Record<"critical" | "high" | "moderate" | "low" | "info", "info" | "warning" | "error">> | undefined>;
27
27
  packageJsonPaths: z.ZodDefault<z.ZodUnion<[z.ZodArray<z.ZodString, "many">, z.ZodObject<{
28
28
  autoSearch: z.ZodLiteral<true>;
29
29
  }, "strip", z.ZodTypeAny, {
@@ -38,12 +38,12 @@ export declare const jsPackagesPluginConfigSchema: z.ZodObject<{
38
38
  packageJsonPaths: string[] | {
39
39
  autoSearch: true;
40
40
  };
41
- packageManager?: "npm" | "pnpm" | "yarn-classic" | "yarn-modern" | undefined;
41
+ packageManager?: "npm" | "yarn-classic" | "yarn-modern" | "pnpm" | undefined;
42
42
  }, {
43
43
  checks?: ("audit" | "outdated")[] | undefined;
44
- packageManager?: "npm" | "pnpm" | "yarn-classic" | "yarn-modern" | undefined;
44
+ packageManager?: "npm" | "yarn-classic" | "yarn-modern" | "pnpm" | undefined;
45
45
  dependencyGroups?: ("prod" | "dev" | "optional")[] | undefined;
46
- auditLevelMapping?: Partial<Record<"info" | "critical" | "high" | "moderate" | "low", "info" | "warning" | "error">> | undefined;
46
+ auditLevelMapping?: Partial<Record<"critical" | "high" | "moderate" | "low" | "info", "info" | "warning" | "error">> | undefined;
47
47
  packageJsonPaths?: string[] | {
48
48
  autoSearch: true;
49
49
  } | undefined;
@@ -0,0 +1,59 @@
1
+ import { z } from 'zod';
2
+ import { issueSeveritySchema } from '@code-pushup/models';
3
+ import { defaultAuditLevelMapping } from './constants.js';
4
+ export const dependencyGroups = ['prod', 'dev', 'optional'];
5
+ const dependencyGroupSchema = z.enum(dependencyGroups);
6
+ const packageCommandSchema = z.enum(['audit', 'outdated']);
7
+ const packageManagerIdSchema = z.enum([
8
+ 'npm',
9
+ 'yarn-classic',
10
+ 'yarn-modern',
11
+ 'pnpm',
12
+ ]);
13
+ const packageJsonPathSchema = z
14
+ .union([
15
+ z.array(z.string()).min(1),
16
+ z.object({ autoSearch: z.literal(true) }),
17
+ ])
18
+ .describe('File paths to package.json. Looks only at root package.json by default')
19
+ .default(['package.json']);
20
+ export const packageAuditLevels = [
21
+ 'critical',
22
+ 'high',
23
+ 'moderate',
24
+ 'low',
25
+ 'info',
26
+ ];
27
+ const packageAuditLevelSchema = z.enum(packageAuditLevels);
28
+ export function fillAuditLevelMapping(mapping) {
29
+ return {
30
+ critical: mapping.critical ?? defaultAuditLevelMapping.critical,
31
+ high: mapping.high ?? defaultAuditLevelMapping.high,
32
+ moderate: mapping.moderate ?? defaultAuditLevelMapping.moderate,
33
+ low: mapping.low ?? defaultAuditLevelMapping.low,
34
+ info: mapping.info ?? defaultAuditLevelMapping.info,
35
+ };
36
+ }
37
+ export const jsPackagesPluginConfigSchema = z.object({
38
+ checks: z
39
+ .array(packageCommandSchema, {
40
+ description: 'Package manager commands to be run. Defaults to both audit and outdated.',
41
+ })
42
+ .min(1)
43
+ .default(['audit', 'outdated']),
44
+ packageManager: packageManagerIdSchema
45
+ .describe('Package manager to be used.')
46
+ .optional(),
47
+ dependencyGroups: z
48
+ .array(dependencyGroupSchema)
49
+ .min(1)
50
+ .default(['prod', 'dev']),
51
+ auditLevelMapping: z
52
+ .record(packageAuditLevelSchema, issueSeveritySchema, {
53
+ description: 'Mapping of audit levels to issue severity. Custom mapping or overrides may be entered manually, otherwise has a default preset.',
54
+ })
55
+ .default(defaultAuditLevelMapping)
56
+ .transform(fillAuditLevelMapping),
57
+ packageJsonPaths: packageJsonPathSchema,
58
+ });
59
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../../packages/plugin-js-packages/src/lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAsB,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC9E,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAE1D,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,UAAU,CAAU,CAAC;AACrE,MAAM,qBAAqB,GAAG,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AAGvD,MAAM,oBAAoB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;AAG3D,MAAM,sBAAsB,GAAG,CAAC,CAAC,IAAI,CAAC;IACpC,KAAK;IACL,cAAc;IACd,aAAa;IACb,MAAM;CACP,CAAC,CAAC;AAGH,MAAM,qBAAqB,GAAG,CAAC;KAC5B,KAAK,CAAC;IACL,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,CAAC,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;CAC1C,CAAC;KACD,QAAQ,CACP,wEAAwE,CACzE;KACA,OAAO,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;AAI7B,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,UAAU;IACV,MAAM;IACN,UAAU;IACV,KAAK;IACL,MAAM;CACE,CAAC;AACX,MAAM,uBAAuB,GAAG,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;AAK3D,MAAM,UAAU,qBAAqB,CACnC,OAA+B;IAE/B,OAAO;QACL,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,wBAAwB,CAAC,QAAQ;QAC/D,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,wBAAwB,CAAC,IAAI;QACnD,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,wBAAwB,CAAC,QAAQ;QAC/D,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,wBAAwB,CAAC,GAAG;QAChD,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,wBAAwB,CAAC,IAAI;KACpD,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC,MAAM,CAAC;IACnD,MAAM,EAAE,CAAC;SACN,KAAK,CAAC,oBAAoB,EAAE;QAC3B,WAAW,EACT,0EAA0E;KAC7E,CAAC;SACD,GAAG,CAAC,CAAC,CAAC;SACN,OAAO,CAAC,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IACjC,cAAc,EAAE,sBAAsB;SACnC,QAAQ,CAAC,6BAA6B,CAAC;SACvC,QAAQ,EAAE;IACb,gBAAgB,EAAE,CAAC;SAChB,KAAK,CAAC,qBAAqB,CAAC;SAC5B,GAAG,CAAC,CAAC,CAAC;SACN,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC3B,iBAAiB,EAAE,CAAC;SACjB,MAAM,CAAC,uBAAuB,EAAE,mBAAmB,EAAE;QACpD,WAAW,EACT,iIAAiI;KACpI,CAAC;SACD,OAAO,CAAC,wBAAwB,CAAC;SACjC,SAAS,CAAC,qBAAqB,CAAC;IACnC,gBAAgB,EAAE,qBAAqB;CACxC,CAAC,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import type { IssueSeverity } from '@code-pushup/models';
2
- import type { DependencyGroup, PackageAuditLevel } from './config';
3
- import type { DependencyGroupLong } from './runner/outdated/types';
2
+ import type { DependencyGroup, PackageAuditLevel } from './config.js';
3
+ import type { DependencyGroupLong } from './runner/outdated/types.js';
4
4
  export declare const defaultAuditLevelMapping: Record<PackageAuditLevel, IssueSeverity>;
5
5
  export declare const dependencyGroupToLong: Record<DependencyGroup, DependencyGroupLong>;
6
6
  export declare const dependencyGroupWeights: Record<DependencyGroup, number>;
@@ -0,0 +1,25 @@
1
+ export const defaultAuditLevelMapping = {
2
+ critical: 'error',
3
+ high: 'error',
4
+ moderate: 'warning',
5
+ low: 'warning',
6
+ info: 'info',
7
+ };
8
+ export const dependencyGroupToLong = {
9
+ prod: 'dependencies',
10
+ dev: 'devDependencies',
11
+ optional: 'optionalDependencies',
12
+ };
13
+ export const dependencyGroupWeights = {
14
+ /* eslint-disable @typescript-eslint/no-magic-numbers */
15
+ prod: 80,
16
+ dev: 15,
17
+ optional: 5,
18
+ /* eslint-enable @typescript-eslint/no-magic-numbers */
19
+ };
20
+ export const dependencyDocs = {
21
+ prod: 'https://classic.yarnpkg.com/docs/dependency-types#toc-dependencies',
22
+ dev: 'https://classic.yarnpkg.com/docs/dependency-types#toc-devdependencies',
23
+ optional: 'https://classic.yarnpkg.com/docs/dependency-types#toc-optionaldependencies',
24
+ };
25
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../../packages/plugin-js-packages/src/lib/constants.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,MAAM,wBAAwB,GAGjC;IACF,QAAQ,EAAE,OAAO;IACjB,IAAI,EAAE,OAAO;IACb,QAAQ,EAAE,SAAS;IACnB,GAAG,EAAE,SAAS;IACd,IAAI,EAAE,MAAM;CACb,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAG9B;IACF,IAAI,EAAE,cAAc;IACpB,GAAG,EAAE,iBAAiB;IACtB,QAAQ,EAAE,sBAAsB;CACjC,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAoC;IACrE,wDAAwD;IACxD,IAAI,EAAE,EAAE;IACR,GAAG,EAAE,EAAE;IACP,QAAQ,EAAE,CAAC;IACX,uDAAuD;CACxD,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAoC;IAC7D,IAAI,EAAE,oEAAoE;IAC1E,GAAG,EAAE,uEAAuE;IAC5E,QAAQ,EACN,4EAA4E;CAC/E,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import type { PluginConfig } from '@code-pushup/models';
2
- import { type JSPackagesPluginConfig } from './config';
2
+ import { type JSPackagesPluginConfig } from './config.js';
3
3
  /**
4
4
  * Instantiates Code PushUp JS packages plugin for core config.
5
5
  *
@@ -0,0 +1,101 @@
1
+ import { createRequire } from 'node:module';
2
+ import path from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
4
+ import { dependencyGroups, } from './config.js';
5
+ import { dependencyDocs, dependencyGroupWeights } from './constants.js';
6
+ import { packageManagers } from './package-managers/package-managers.js';
7
+ import { createRunnerConfig } from './runner/index.js';
8
+ import { normalizeConfig } from './utils.js';
9
+ /**
10
+ * Instantiates Code PushUp JS packages plugin for core config.
11
+ *
12
+ * @example
13
+ * import jsPackagesPlugin from '@code-pushup/js-packages-plugin'
14
+ *
15
+ * export default {
16
+ * // ... core config ...
17
+ * plugins: [
18
+ * // ... other plugins ...
19
+ * await jsPackagesPlugin({ packageManager: 'npm' })
20
+ * ]
21
+ * }
22
+ *
23
+ * @returns Plugin configuration.
24
+ */
25
+ export async function jsPackagesPlugin(config) {
26
+ const { packageManager, checks, depGroups, ...jsPackagesPluginConfigRest } = await normalizeConfig(config);
27
+ const runnerScriptPath = path.join(fileURLToPath(path.dirname(import.meta.url)), '..', 'bin.js');
28
+ const packageJson = createRequire(import.meta.url)('../../package.json');
29
+ return {
30
+ slug: 'js-packages',
31
+ title: 'JS Packages',
32
+ icon: packageManager.icon,
33
+ description: 'This plugin runs audit to uncover vulnerabilities and lists outdated dependencies. It supports npm, yarn classic, yarn modern, and pnpm package managers.',
34
+ docsUrl: packageManager.docs.homepage,
35
+ packageName: packageJson.name,
36
+ version: packageJson.version,
37
+ audits: createAudits(packageManager.slug, checks, depGroups),
38
+ groups: createGroups(packageManager.slug, checks, depGroups),
39
+ runner: await createRunnerConfig(runnerScriptPath, {
40
+ ...jsPackagesPluginConfigRest,
41
+ checks,
42
+ packageManager: packageManager.slug,
43
+ dependencyGroups: depGroups,
44
+ }),
45
+ };
46
+ }
47
+ function createGroups(id, checks, depGroups) {
48
+ const pm = packageManagers[id];
49
+ const supportedAuditDepGroups = pm.audit.supportedDepGroups ?? dependencyGroups;
50
+ const compatibleAuditDepGroups = depGroups.filter(group => supportedAuditDepGroups.includes(group));
51
+ const groups = {
52
+ audit: {
53
+ slug: `${pm.slug}-audit`,
54
+ title: `${pm.name} audit`,
55
+ description: `Group containing ${pm.name} vulnerabilities.`,
56
+ docsUrl: pm.docs.audit,
57
+ refs: compatibleAuditDepGroups.map(depGroup => ({
58
+ slug: `${pm.slug}-audit-${depGroup}`,
59
+ weight: dependencyGroupWeights[depGroup],
60
+ })),
61
+ },
62
+ outdated: {
63
+ slug: `${pm.slug}-outdated`,
64
+ title: `${pm.name} outdated dependencies`,
65
+ description: `Group containing outdated ${pm.name} dependencies.`,
66
+ docsUrl: pm.docs.outdated,
67
+ refs: depGroups.map(depGroup => ({
68
+ slug: `${pm.slug}-outdated-${depGroup}`,
69
+ weight: dependencyGroupWeights[depGroup],
70
+ })),
71
+ },
72
+ };
73
+ return checks.map(check => groups[check]);
74
+ }
75
+ function createAudits(id, checks, depGroups) {
76
+ const { slug } = packageManagers[id];
77
+ return checks.flatMap(check => {
78
+ const supportedAuditDepGroups = packageManagers[id].audit.supportedDepGroups ?? dependencyGroups;
79
+ const compatibleDepGroups = check === 'audit'
80
+ ? depGroups.filter(group => supportedAuditDepGroups.includes(group))
81
+ : depGroups;
82
+ return compatibleDepGroups.map(depGroup => ({
83
+ slug: `${slug}-${check}-${depGroup}`,
84
+ title: getAuditTitle(slug, check, depGroup),
85
+ description: getAuditDescription(check, depGroup),
86
+ docsUrl: dependencyDocs[depGroup],
87
+ }));
88
+ });
89
+ }
90
+ function getAuditTitle(id, check, depGroup) {
91
+ const pm = packageManagers[id];
92
+ return check === 'audit'
93
+ ? `Vulnerabilities for ${pm.name} ${depGroup} dependencies.`
94
+ : `Outdated ${pm.name} ${depGroup} dependencies.`;
95
+ }
96
+ function getAuditDescription(check, depGroup) {
97
+ return check === 'audit'
98
+ ? `Runs security audit on ${depGroup} dependencies.`
99
+ : `Checks for outdated ${depGroup} dependencies`;
100
+ }
101
+ //# sourceMappingURL=js-packages-plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"js-packages-plugin.js","sourceRoot":"","sources":["../../../../../packages/plugin-js-packages/src/lib/js-packages-plugin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export const COMMON_AUDIT_ARGS = ['audit', '--json'];
2
+ export const COMMON_OUTDATED_ARGS = ['outdated', '--json'];
3
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../../../packages/plugin-js-packages/src/lib/package-managers/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AACrD,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC"}
@@ -1,3 +1,3 @@
1
- import type { PackageManagerId } from '../config';
2
- export declare function derivePackageManagerInPackageJson(currentDir?: string): Promise<false | "npm" | "pnpm" | "yarn-classic" | "yarn-modern">;
1
+ import type { PackageManagerId } from '../config.js';
2
+ export declare function derivePackageManagerInPackageJson(currentDir?: string): Promise<false | "npm" | "yarn-classic" | "yarn-modern" | "pnpm">;
3
3
  export declare function derivePackageManager(currentDir?: string): Promise<PackageManagerId>;
@@ -0,0 +1,43 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ import { fileExists } from '@code-pushup/utils';
4
+ import { deriveYarnVersion } from './derive-yarn.js';
5
+ export async function derivePackageManagerInPackageJson(currentDir = process.cwd()) {
6
+ if (await fileExists(path.join(currentDir, 'package.json'))) {
7
+ const content = JSON.parse((await readFile(path.join('package.json'))).toString());
8
+ const { packageManager: packageManagerData = '' } = content;
9
+ const [manager = '', version = ''] = packageManagerData.split('@');
10
+ if (manager === 'npm') {
11
+ return manager;
12
+ }
13
+ if (manager === 'pnpm') {
14
+ return manager;
15
+ }
16
+ if (manager === 'yarn') {
17
+ const majorVersion = Number(version.split('.')[0]);
18
+ return majorVersion > 1 ? 'yarn-modern' : 'yarn-classic';
19
+ }
20
+ }
21
+ return false;
22
+ }
23
+ export async function derivePackageManager(currentDir = process.cwd()) {
24
+ const pkgManagerFromPackageJson = await derivePackageManagerInPackageJson(currentDir);
25
+ if (pkgManagerFromPackageJson) {
26
+ return pkgManagerFromPackageJson;
27
+ }
28
+ // Check for lock files
29
+ if (await fileExists(path.join(currentDir, 'package-lock.json'))) {
30
+ return 'npm';
31
+ }
32
+ else if (await fileExists(path.join(currentDir, 'pnpm-lock.yaml'))) {
33
+ return 'pnpm';
34
+ }
35
+ else if (await fileExists(path.join(currentDir, 'yarn.lock'))) {
36
+ const yarnVersion = await deriveYarnVersion();
37
+ if (yarnVersion) {
38
+ return yarnVersion;
39
+ }
40
+ }
41
+ throw new Error('Could not detect package manager. Please provide it in the js-packages plugin config.');
42
+ }
43
+ //# sourceMappingURL=derive-package-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"derive-package-manager.js","sourceRoot":"","sources":["../../../../../../packages/plugin-js-packages/src/lib/package-managers/derive-package-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,MAAM,CAAC,KAAK,UAAU,iCAAiC,CACrD,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE;IAE1B,IAAI,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC;QAC5D,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CACxB,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CACxB,CAAC;QACjC,MAAM,EAAE,cAAc,EAAE,kBAAkB,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC;QAE5D,MAAM,CAAC,OAAO,GAAG,EAAE,EAAE,OAAO,GAAG,EAAE,CAAC,GAAG,kBAAkB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAEnE,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;YACtB,OAAO,OAAO,CAAC;QACjB,CAAC;QACD,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;YACvB,OAAO,OAAO,CAAC;QACjB,CAAC;QACD,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;YACvB,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACnD,OAAO,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,cAAc,CAAC;QAC3D,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE;IAE1B,MAAM,yBAAyB,GAC7B,MAAM,iCAAiC,CAAC,UAAU,CAAC,CAAC;IACtD,IAAI,yBAAyB,EAAE,CAAC;QAC9B,OAAO,yBAAyB,CAAC;IACnC,CAAC;IAED,uBAAuB;IACvB,IAAI,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,mBAAmB,CAAC,CAAC,EAAE,CAAC;QACjE,OAAO,KAAK,CAAC;IACf,CAAC;SAAM,IAAI,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC,EAAE,CAAC;QACrE,OAAO,MAAM,CAAC;IAChB,CAAC;SAAM,IAAI,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC;QAChE,MAAM,WAAW,GAAG,MAAM,iBAAiB,EAAE,CAAC;QAC9C,IAAI,WAAW,EAAE,CAAC;YAChB,OAAO,WAAW,CAAC;QACrB,CAAC;IACH,CAAC;IAED,MAAM,IAAI,KAAK,CACb,uFAAuF,CACxF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { executeProcess } from '@code-pushup/utils';
2
+ export async function deriveYarnVersion() {
3
+ const { stdout } = await executeProcess({
4
+ command: 'yarn',
5
+ args: ['-v'],
6
+ });
7
+ const yarnVersion = Number.parseInt(stdout.toString().trim().at(0) ?? '', 10);
8
+ if (yarnVersion >= 2) {
9
+ return 'yarn-modern';
10
+ }
11
+ else if (yarnVersion === 1) {
12
+ return 'yarn-classic';
13
+ }
14
+ return false;
15
+ }
16
+ //# sourceMappingURL=derive-yarn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"derive-yarn.js","sourceRoot":"","sources":["../../../../../../packages/plugin-js-packages/src/lib/package-managers/derive-yarn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,cAAc,CAAC;QACtC,OAAO,EAAE,MAAM;QACf,IAAI,EAAE,CAAC,IAAI,CAAC;KACb,CAAC,CAAC;IAEH,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IAC9E,IAAI,WAAW,IAAI,CAAC,EAAE,CAAC;QACrB,OAAO,aAAa,CAAC;IACvB,CAAC;SAAM,IAAI,WAAW,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,cAAc,CAAC;IACxB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -1,5 +1,5 @@
1
- import type { AuditResult } from '../../runner/audit/types';
2
- import type { NpmAdvisory, NpmFixInformation, NpmVulnerabilities } from './types';
1
+ import type { AuditResult } from '../../runner/audit/types.js';
2
+ import type { NpmAdvisory, NpmFixInformation, NpmVulnerabilities } from './types.js';
3
3
  export declare function npmToAuditResult(output: string): AuditResult;
4
4
  export declare function npmToFixInformation(fixAvailable: boolean | NpmFixInformation): string;
5
5
  export declare function npmToAdvisory(name: string, vulnerabilities: NpmVulnerabilities, prevNodes?: Set<string>): NpmAdvisory | null;
@@ -0,0 +1,65 @@
1
+ import { objectToEntries } from '@code-pushup/utils';
2
+ export function npmToAuditResult(output) {
3
+ const npmAudit = JSON.parse(output);
4
+ const vulnerabilities = objectToEntries(npmAudit.vulnerabilities).map(([name, detail]) => {
5
+ const advisory = npmToAdvisory(name, npmAudit.vulnerabilities);
6
+ return {
7
+ name: name.toString(),
8
+ severity: detail.severity,
9
+ versionRange: detail.range,
10
+ directDependency: detail.isDirect ? true : (detail.effects[0] ?? ''),
11
+ fixInformation: npmToFixInformation(detail.fixAvailable),
12
+ ...(advisory != null && {
13
+ title: advisory.title,
14
+ url: advisory.url,
15
+ }),
16
+ };
17
+ });
18
+ return {
19
+ vulnerabilities,
20
+ summary: npmAudit.metadata.vulnerabilities,
21
+ };
22
+ }
23
+ export function npmToFixInformation(fixAvailable) {
24
+ if (typeof fixAvailable === 'boolean') {
25
+ return fixAvailable ? 'Fix is available.' : '';
26
+ }
27
+ return `Fix available: Update \`${fixAvailable.name}\` to version **${fixAvailable.version}**${fixAvailable.isSemVerMajor ? ' (breaking change).' : '.'}`;
28
+ }
29
+ export function npmToAdvisory(name, vulnerabilities, prevNodes = new Set()) {
30
+ const advisory = vulnerabilities[name]?.via;
31
+ if (Array.isArray(advisory) &&
32
+ advisory.length > 0 &&
33
+ typeof advisory[0] === 'object') {
34
+ return { title: advisory[0].title, url: advisory[0].url };
35
+ }
36
+ // Cross-references another vulnerability
37
+ if (Array.isArray(advisory) &&
38
+ advisory.length > 0 &&
39
+ advisory.every((value) => typeof value === 'string')) {
40
+ /* eslint-disable functional/no-let, functional/immutable-data, functional/no-loop-statements, prefer-const */
41
+ let advisoryInfo = null;
42
+ let newReferences = [];
43
+ let advisoryInfoFound = false;
44
+ /* eslint-enable functional/no-let, prefer-const */
45
+ for (const via of advisory) {
46
+ if (!prevNodes.has(via)) {
47
+ newReferences.push(via);
48
+ }
49
+ }
50
+ while (newReferences.length > 0 && !advisoryInfoFound) {
51
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
52
+ const ref = newReferences.pop();
53
+ prevNodes.add(ref);
54
+ const result = npmToAdvisory(ref, vulnerabilities, prevNodes);
55
+ if (result != null) {
56
+ advisoryInfo = { title: result.title, url: result.url };
57
+ advisoryInfoFound = true;
58
+ }
59
+ }
60
+ /* eslint-enable functional/immutable-data, functional/no-loop-statements */
61
+ return advisoryInfo;
62
+ }
63
+ return null;
64
+ }
65
+ //# sourceMappingURL=audit-result.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit-result.js","sourceRoot":"","sources":["../../../../../../../packages/plugin-js-packages/src/lib/package-managers/npm/audit-result.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import type { PackageManager } from '../types';
1
+ import type { PackageManager } from '../types.js';
2
2
  export declare const npmPackageManager: PackageManager;
@@ -0,0 +1,49 @@
1
+ import { objectToKeys } from '@code-pushup/utils';
2
+ import { filterAuditResult } from '../../runner/utils.js';
3
+ import { COMMON_AUDIT_ARGS, COMMON_OUTDATED_ARGS } from '../constants.js';
4
+ import { npmToAuditResult } from './audit-result.js';
5
+ import { npmToOutdatedResult } from './outdated-result.js';
6
+ const npmDependencyOptions = {
7
+ prod: ['--omit=dev', '--omit=optional'],
8
+ dev: ['--include=dev', '--omit=optional'],
9
+ optional: ['--include=optional', '--omit=dev'],
10
+ };
11
+ export const npmPackageManager = {
12
+ slug: 'npm',
13
+ name: 'NPM',
14
+ command: 'npm',
15
+ icon: 'npm',
16
+ docs: {
17
+ homepage: 'https://docs.npmjs.com/',
18
+ audit: 'https://docs.npmjs.com/cli/commands/npm-audit',
19
+ outdated: 'https://docs.npmjs.com/cli/commands/npm-outdated',
20
+ },
21
+ audit: {
22
+ getCommandArgs: groupDep => [
23
+ ...COMMON_AUDIT_ARGS,
24
+ ...npmDependencyOptions[groupDep],
25
+ '--audit-level=none',
26
+ ],
27
+ unifyResult: npmToAuditResult,
28
+ // prod dependencies need to be filtered out manually since v10
29
+ postProcessResult: (results) => {
30
+ const depGroups = objectToKeys(results);
31
+ const devFilter = results.dev && results.prod
32
+ ? filterAuditResult(results.dev, 'name', results.prod)
33
+ : results.dev;
34
+ const optionalFilter = results.optional && results.prod
35
+ ? filterAuditResult(results.optional, 'name', results.prod)
36
+ : results.optional;
37
+ return {
38
+ ...(depGroups.includes('prod') && { prod: results.prod }),
39
+ ...(depGroups.includes('dev') && { dev: devFilter }),
40
+ ...(depGroups.includes('optional') && { optional: optionalFilter }),
41
+ };
42
+ },
43
+ },
44
+ outdated: {
45
+ commandArgs: [...COMMON_OUTDATED_ARGS, '--long'],
46
+ unifyResult: npmToOutdatedResult,
47
+ },
48
+ };
49
+ //# sourceMappingURL=npm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"npm.js","sourceRoot":"","sources":["../../../../../../../packages/plugin-js-packages/src/lib/package-managers/npm/npm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAE1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE3D,MAAM,oBAAoB,GAAsC;IAC9D,IAAI,EAAE,CAAC,YAAY,EAAE,iBAAiB,CAAC;IACvC,GAAG,EAAE,CAAC,eAAe,EAAE,iBAAiB,CAAC;IACzC,QAAQ,EAAE,CAAC,oBAAoB,EAAE,YAAY,CAAC;CAC/C,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAmB;IAC/C,IAAI,EAAE,KAAK;IACX,IAAI,EAAE,KAAK;IACX,OAAO,EAAE,KAAK;IACd,IAAI,EAAE,KAAK;IACX,IAAI,EAAE;QACJ,QAAQ,EAAE,yBAAyB;QACnC,KAAK,EAAE,+CAA+C;QACtD,QAAQ,EAAE,kDAAkD;KAC7D;IACD,KAAK,EAAE;QACL,cAAc,EAAE,QAAQ,CAAC,EAAE,CAAC;YAC1B,GAAG,iBAAiB;YACpB,GAAG,oBAAoB,CAAC,QAAQ,CAAC;YACjC,oBAAoB;SACrB;QACD,WAAW,EAAE,gBAAgB;QAC7B,+DAA+D;QAC/D,iBAAiB,EAAE,CAAC,OAAqB,EAAE,EAAE;YAC3C,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;YACxC,MAAM,SAAS,GACb,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,IAAI;gBACzB,CAAC,CAAC,iBAAiB,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC;gBACtD,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;YAClB,MAAM,cAAc,GAClB,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI;gBAC9B,CAAC,CAAC,iBAAiB,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC;gBAC3D,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;YAEvB,OAAO;gBACL,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;gBACzD,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;gBACpD,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC;aACpE,CAAC;QACJ,CAAC;KACF;IACD,QAAQ,EAAE;QACR,WAAW,EAAE,CAAC,GAAG,oBAAoB,EAAE,QAAQ,CAAC;QAChD,WAAW,EAAE,mBAAmB;KACjC;CACF,CAAC"}
@@ -1,2 +1,2 @@
1
- import type { OutdatedResult } from '../../runner/outdated/types';
1
+ import type { OutdatedResult } from '../../runner/outdated/types.js';
2
2
  export declare function npmToOutdatedResult(output: string): OutdatedResult;
@@ -0,0 +1,16 @@
1
+ import { objectToEntries } from '@code-pushup/utils';
2
+ export function npmToOutdatedResult(output) {
3
+ const npmOutdated = JSON.parse(output);
4
+ // current might be missing in some cases
5
+ // https://stackoverflow.com/questions/42267101/npm-outdated-command-shows-missing-in-current-version
6
+ return objectToEntries(npmOutdated)
7
+ .filter((entry) => entry[1].current != null)
8
+ .map(([name, overview]) => ({
9
+ name,
10
+ current: overview.current,
11
+ latest: overview.latest,
12
+ type: overview.type,
13
+ ...(overview.homepage != null && { url: overview.homepage }),
14
+ }));
15
+ }
16
+ //# sourceMappingURL=outdated-result.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outdated-result.js","sourceRoot":"","sources":["../../../../../../../packages/plugin-js-packages/src/lib/package-managers/npm/outdated-result.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAIrD,MAAM,UAAU,mBAAmB,CAAC,MAAc;IAChD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAA0B,CAAC;IAChE,yCAAyC;IACzC,qGAAqG;IACrG,OAAO,eAAe,CAAC,WAAW,CAAC;SAChC,MAAM,CACL,CAAC,KAAK,EAA4C,EAAE,CAClD,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,IAAI,CAC3B;SACA,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC;QAC1B,IAAI;QACJ,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,GAAG,CAAC,QAAQ,CAAC,QAAQ,IAAI,IAAI,IAAI,EAAE,GAAG,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC;KAC7D,CAAC,CAAC,CAAC;AACR,CAAC"}
@@ -1,6 +1,6 @@
1
- import type { PackageAuditLevel } from '../../config';
2
- import type { AuditSummary } from '../../runner/audit/types';
3
- import type { DependencyGroupLong } from '../../runner/outdated/types';
1
+ import type { PackageAuditLevel } from '../../config.js';
2
+ import type { AuditSummary } from '../../runner/audit/types.js';
3
+ import type { DependencyGroupLong } from '../../runner/outdated/types.js';
4
4
  export type NpmAdvisory = {
5
5
  title: string;
6
6
  url: string;
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../../../packages/plugin-js-packages/src/lib/package-managers/npm/types.ts"],"names":[],"mappings":""}
@@ -1,3 +1,3 @@
1
- import type { PackageManagerId } from '../config';
2
- import type { PackageManager } from './types';
1
+ import type { PackageManagerId } from '../config.js';
2
+ import type { PackageManager } from './types.js';
3
3
  export declare const packageManagers: Record<PackageManagerId, PackageManager>;
@@ -0,0 +1,11 @@
1
+ import { npmPackageManager } from './npm/npm.js';
2
+ import { pnpmPackageManager } from './pnpm/pnpm.js';
3
+ import { yarnv1PackageManager } from './yarn-classic/yarn-classic.js';
4
+ import { yarnv2PackageManager } from './yarn-modern/yarn-modern.js';
5
+ export const packageManagers = {
6
+ npm: npmPackageManager,
7
+ 'yarn-classic': yarnv1PackageManager,
8
+ 'yarn-modern': yarnv2PackageManager,
9
+ pnpm: pnpmPackageManager,
10
+ };
11
+ //# sourceMappingURL=package-managers.js.map
@@ -0,0 +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,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAEpE,MAAM,CAAC,MAAM,eAAe,GAA6C;IACvE,GAAG,EAAE,iBAAiB;IACtB,cAAc,EAAE,oBAAoB;IACpC,aAAa,EAAE,oBAAoB;IACnC,IAAI,EAAE,kBAAkB;CACzB,CAAC"}
@@ -1,3 +1,3 @@
1
- import type { AuditResult } from '../../runner/audit/types';
1
+ import type { AuditResult } from '../../runner/audit/types.js';
2
2
  export declare function pnpmToAuditResult(output: string): AuditResult;
3
3
  export declare function pnpmToDirectDependency(path: string): string | true;