@code-pushup/js-packages-plugin 0.49.0 → 0.51.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 (37) hide show
  1. package/README.md +2 -2
  2. package/bin.js +169 -147
  3. package/index.js +310 -142
  4. package/package.json +5 -31
  5. package/src/lib/config.d.ts +5 -5
  6. package/src/lib/constants.d.ts +2 -2
  7. package/src/lib/js-packages-plugin.d.ts +2 -2
  8. package/src/lib/package-managers/derive-package-manager.d.ts +3 -0
  9. package/src/lib/package-managers/derive-yarn.d.ts +1 -0
  10. package/src/lib/package-managers/index.d.ts +1 -1
  11. package/src/lib/package-managers/npm/audit-result.d.ts +2 -2
  12. package/src/lib/package-managers/npm/npm.d.ts +1 -1
  13. package/src/lib/package-managers/npm/outdated-result.d.ts +1 -1
  14. package/src/lib/package-managers/npm/types.d.ts +3 -3
  15. package/src/lib/package-managers/package-managers.d.ts +2 -2
  16. package/src/lib/package-managers/pnpm/audit-result.d.ts +1 -1
  17. package/src/lib/package-managers/pnpm/outdated-result.d.ts +1 -1
  18. package/src/lib/package-managers/pnpm/pnpm.d.ts +1 -1
  19. package/src/lib/package-managers/pnpm/types.d.ts +2 -2
  20. package/src/lib/package-managers/pnpm/utils.d.ts +1 -0
  21. package/src/lib/package-managers/types.d.ts +3 -3
  22. package/src/lib/package-managers/yarn-classic/audit-result.d.ts +1 -1
  23. package/src/lib/package-managers/yarn-classic/constants.d.ts +2 -2
  24. package/src/lib/package-managers/yarn-classic/outdated-result.d.ts +1 -1
  25. package/src/lib/package-managers/yarn-classic/types.d.ts +1 -1
  26. package/src/lib/package-managers/yarn-classic/yarn-classic.d.ts +1 -1
  27. package/src/lib/package-managers/yarn-modern/audit-result.d.ts +1 -1
  28. package/src/lib/package-managers/yarn-modern/outdated-result.d.ts +1 -1
  29. package/src/lib/package-managers/yarn-modern/types.d.ts +2 -2
  30. package/src/lib/package-managers/yarn-modern/yarn-modern.d.ts +1 -1
  31. package/src/lib/runner/audit/constants.d.ts +1 -1
  32. package/src/lib/runner/audit/transform.d.ts +2 -2
  33. package/src/lib/runner/audit/utils.d.ts +1 -1
  34. package/src/lib/runner/index.d.ts +1 -1
  35. package/src/lib/runner/outdated/transform.d.ts +3 -3
  36. package/src/lib/runner/utils.d.ts +2 -2
  37. package/src/lib/utils.d.ts +10 -0
package/bin.js CHANGED
@@ -159,9 +159,27 @@ function hasNonZeroWeightedRef(refs) {
159
159
  return refs.reduce((acc, { weight }) => weight + acc, 0) !== 0;
160
160
  }
161
161
 
162
- // packages/models/src/lib/audit.ts
162
+ // packages/models/src/lib/source.ts
163
163
  import { z as z2 } from "zod";
164
- var auditSchema = z2.object({
164
+ var sourceFileLocationSchema = z2.object(
165
+ {
166
+ file: filePathSchema.describe("Relative path to source file in Git repo"),
167
+ position: z2.object(
168
+ {
169
+ startLine: positiveIntSchema.describe("Start line"),
170
+ startColumn: positiveIntSchema.describe("Start column").optional(),
171
+ endLine: positiveIntSchema.describe("End line").optional(),
172
+ endColumn: positiveIntSchema.describe("End column").optional()
173
+ },
174
+ { description: "Location in file" }
175
+ ).optional()
176
+ },
177
+ { description: "Source file location" }
178
+ );
179
+
180
+ // packages/models/src/lib/audit.ts
181
+ import { z as z3 } from "zod";
182
+ var auditSchema = z3.object({
165
183
  slug: slugSchema.describe("ID (unique within plugin)")
166
184
  }).merge(
167
185
  metaSchema({
@@ -171,7 +189,7 @@ var auditSchema = z2.object({
171
189
  description: "List of scorable metrics for the given plugin"
172
190
  })
173
191
  );
174
- var pluginAuditsSchema = z2.array(auditSchema, {
192
+ var pluginAuditsSchema = z3.array(auditSchema, {
175
193
  description: "List of audits maintained in a plugin"
176
194
  }).min(1).refine(
177
195
  (auditMetadata) => !getDuplicateSlugsInAudits(auditMetadata),
@@ -190,31 +208,16 @@ function getDuplicateSlugsInAudits(audits) {
190
208
  }
191
209
 
192
210
  // packages/models/src/lib/audit-output.ts
193
- import { z as z5 } from "zod";
211
+ import { z as z6 } from "zod";
194
212
 
195
213
  // packages/models/src/lib/issue.ts
196
- import { z as z3 } from "zod";
197
- var sourceFileLocationSchema = z3.object(
198
- {
199
- file: filePathSchema.describe("Relative path to source file in Git repo"),
200
- position: z3.object(
201
- {
202
- startLine: positiveIntSchema.describe("Start line"),
203
- startColumn: positiveIntSchema.describe("Start column").optional(),
204
- endLine: positiveIntSchema.describe("End line").optional(),
205
- endColumn: positiveIntSchema.describe("End column").optional()
206
- },
207
- { description: "Location in file" }
208
- ).optional()
209
- },
210
- { description: "Source file location" }
211
- );
212
- var issueSeveritySchema = z3.enum(["info", "warning", "error"], {
214
+ import { z as z4 } from "zod";
215
+ var issueSeveritySchema = z4.enum(["info", "warning", "error"], {
213
216
  description: "Severity level"
214
217
  });
215
- var issueSchema = z3.object(
218
+ var issueSchema = z4.object(
216
219
  {
217
- message: z3.string({ description: "Descriptive error message" }).max(MAX_ISSUE_MESSAGE_LENGTH),
220
+ message: z4.string({ description: "Descriptive error message" }).max(MAX_ISSUE_MESSAGE_LENGTH),
218
221
  severity: issueSeveritySchema,
219
222
  source: sourceFileLocationSchema.optional()
220
223
  },
@@ -222,60 +225,60 @@ var issueSchema = z3.object(
222
225
  );
223
226
 
224
227
  // packages/models/src/lib/table.ts
225
- import { z as z4 } from "zod";
226
- var tableAlignmentSchema = z4.enum(["left", "center", "right"], {
228
+ import { z as z5 } from "zod";
229
+ var tableAlignmentSchema = z5.enum(["left", "center", "right"], {
227
230
  description: "Cell alignment"
228
231
  });
229
- var tableColumnObjectSchema = z4.object({
230
- key: z4.string(),
231
- label: z4.string().optional(),
232
+ var tableColumnObjectSchema = z5.object({
233
+ key: z5.string(),
234
+ label: z5.string().optional(),
232
235
  align: tableAlignmentSchema.optional()
233
236
  });
234
- var tableRowObjectSchema = z4.record(tableCellValueSchema, {
237
+ var tableRowObjectSchema = z5.record(tableCellValueSchema, {
235
238
  description: "Object row"
236
239
  });
237
- var tableRowPrimitiveSchema = z4.array(tableCellValueSchema, {
240
+ var tableRowPrimitiveSchema = z5.array(tableCellValueSchema, {
238
241
  description: "Primitive row"
239
242
  });
240
- var tableSharedSchema = z4.object({
241
- title: z4.string().optional().describe("Display title for table")
243
+ var tableSharedSchema = z5.object({
244
+ title: z5.string().optional().describe("Display title for table")
242
245
  });
243
246
  var tablePrimitiveSchema = tableSharedSchema.merge(
244
- z4.object(
247
+ z5.object(
245
248
  {
246
- columns: z4.array(tableAlignmentSchema).optional(),
247
- rows: z4.array(tableRowPrimitiveSchema)
249
+ columns: z5.array(tableAlignmentSchema).optional(),
250
+ rows: z5.array(tableRowPrimitiveSchema)
248
251
  },
249
252
  { description: "Table with primitive rows and optional alignment columns" }
250
253
  )
251
254
  );
252
255
  var tableObjectSchema = tableSharedSchema.merge(
253
- z4.object(
256
+ z5.object(
254
257
  {
255
- columns: z4.union([
256
- z4.array(tableAlignmentSchema),
257
- z4.array(tableColumnObjectSchema)
258
+ columns: z5.union([
259
+ z5.array(tableAlignmentSchema),
260
+ z5.array(tableColumnObjectSchema)
258
261
  ]).optional(),
259
- rows: z4.array(tableRowObjectSchema)
262
+ rows: z5.array(tableRowObjectSchema)
260
263
  },
261
264
  {
262
265
  description: "Table with object rows and optional alignment or object columns"
263
266
  }
264
267
  )
265
268
  );
266
- var tableSchema = (description = "Table information") => z4.union([tablePrimitiveSchema, tableObjectSchema], { description });
269
+ var tableSchema = (description = "Table information") => z5.union([tablePrimitiveSchema, tableObjectSchema], { description });
267
270
 
268
271
  // packages/models/src/lib/audit-output.ts
269
272
  var auditValueSchema = nonnegativeNumberSchema.describe("Raw numeric value");
270
- var auditDisplayValueSchema = z5.string({ description: "Formatted value (e.g. '0.9 s', '2.1 MB')" }).optional();
271
- var auditDetailsSchema = z5.object(
273
+ var auditDisplayValueSchema = z6.string({ description: "Formatted value (e.g. '0.9 s', '2.1 MB')" }).optional();
274
+ var auditDetailsSchema = z6.object(
272
275
  {
273
- issues: z5.array(issueSchema, { description: "List of findings" }).optional(),
276
+ issues: z6.array(issueSchema, { description: "List of findings" }).optional(),
274
277
  table: tableSchema("Table of related findings").optional()
275
278
  },
276
279
  { description: "Detailed information" }
277
280
  );
278
- var auditOutputSchema = z5.object(
281
+ var auditOutputSchema = z6.object(
279
282
  {
280
283
  slug: slugSchema.describe("Reference to audit"),
281
284
  displayValue: auditDisplayValueSchema,
@@ -285,7 +288,7 @@ var auditOutputSchema = z5.object(
285
288
  },
286
289
  { description: "Audit information" }
287
290
  );
288
- var auditOutputsSchema = z5.array(auditOutputSchema, {
291
+ var auditOutputsSchema = z6.array(auditOutputSchema, {
289
292
  description: "List of JSON formatted audit output emitted by the runner process of a plugin"
290
293
  }).refine(
291
294
  (audits) => !getDuplicateSlugsInAudits2(audits),
@@ -302,13 +305,13 @@ function getDuplicateSlugsInAudits2(audits) {
302
305
  }
303
306
 
304
307
  // packages/models/src/lib/category-config.ts
305
- import { z as z6 } from "zod";
308
+ import { z as z7 } from "zod";
306
309
  var categoryRefSchema = weightedRefSchema(
307
310
  "Weighted references to audits and/or groups for the category",
308
311
  "Slug of an audit or group (depending on `type`)"
309
312
  ).merge(
310
- z6.object({
311
- type: z6.enum(["audit", "group"], {
313
+ z7.object({
314
+ type: z7.enum(["audit", "group"], {
312
315
  description: "Discriminant for reference kind, affects where `slug` is looked up"
313
316
  }),
314
317
  plugin: slugSchema.describe(
@@ -329,8 +332,8 @@ var categoryConfigSchema = scorableSchema(
329
332
  description: "Meta info for category"
330
333
  })
331
334
  ).merge(
332
- z6.object({
333
- isBinary: z6.boolean({
335
+ z7.object({
336
+ isBinary: z7.boolean({
334
337
  description: 'Is this a binary category (i.e. only a perfect score considered a "pass")?'
335
338
  }).optional()
336
339
  })
@@ -346,7 +349,7 @@ function getDuplicateRefsInCategoryMetrics(metrics) {
346
349
  metrics.map(({ slug, type, plugin }) => `${type} :: ${plugin} / ${slug}`)
347
350
  );
348
351
  }
349
- var categoriesSchema = z6.array(categoryConfigSchema, {
352
+ var categoriesSchema = z7.array(categoryConfigSchema, {
350
353
  description: "Categorization of individual audits"
351
354
  }).refine(
352
355
  (categoryCfg) => !getDuplicateSlugCategories(categoryCfg),
@@ -365,18 +368,18 @@ function getDuplicateSlugCategories(categories) {
365
368
  }
366
369
 
367
370
  // packages/models/src/lib/commit.ts
368
- import { z as z7 } from "zod";
369
- var commitSchema = z7.object(
371
+ import { z as z8 } from "zod";
372
+ var commitSchema = z8.object(
370
373
  {
371
- hash: z7.string({ description: "Commit SHA (full)" }).regex(
374
+ hash: z8.string({ description: "Commit SHA (full)" }).regex(
372
375
  /^[\da-f]{40}$/,
373
376
  "Commit SHA should be a 40-character hexadecimal string"
374
377
  ),
375
- message: z7.string({ description: "Commit message" }),
376
- date: z7.coerce.date({
378
+ message: z8.string({ description: "Commit message" }),
379
+ date: z8.coerce.date({
377
380
  description: "Date and time when commit was authored"
378
381
  }),
379
- author: z7.string({
382
+ author: z8.string({
380
383
  description: "Commit author name"
381
384
  }).trim()
382
385
  },
@@ -384,22 +387,22 @@ var commitSchema = z7.object(
384
387
  );
385
388
 
386
389
  // packages/models/src/lib/core-config.ts
387
- import { z as z13 } from "zod";
390
+ import { z as z14 } from "zod";
388
391
 
389
392
  // packages/models/src/lib/persist-config.ts
390
- import { z as z8 } from "zod";
391
- var formatSchema = z8.enum(["json", "md"]);
392
- var persistConfigSchema = z8.object({
393
+ import { z as z9 } from "zod";
394
+ var formatSchema = z9.enum(["json", "md"]);
395
+ var persistConfigSchema = z9.object({
393
396
  outputDir: filePathSchema.describe("Artifacts folder").optional(),
394
397
  filename: fileNameSchema.describe("Artifacts file name (without extension)").optional(),
395
- format: z8.array(formatSchema).optional()
398
+ format: z9.array(formatSchema).optional()
396
399
  });
397
400
 
398
401
  // packages/models/src/lib/plugin-config.ts
399
- import { z as z11 } from "zod";
402
+ import { z as z12 } from "zod";
400
403
 
401
404
  // packages/models/src/lib/group.ts
402
- import { z as z9 } from "zod";
405
+ import { z as z10 } from "zod";
403
406
  var groupRefSchema = weightedRefSchema(
404
407
  "Weighted reference to a group",
405
408
  "Reference slug to a group within this plugin (e.g. 'max-lines')"
@@ -416,7 +419,7 @@ var groupSchema = scorableSchema(
416
419
  getDuplicateRefsInGroups,
417
420
  duplicateRefsInGroupsErrorMsg
418
421
  ).merge(groupMetaSchema);
419
- var groupsSchema = z9.array(groupSchema, {
422
+ var groupsSchema = z10.array(groupSchema, {
420
423
  description: "List of groups"
421
424
  }).optional().refine(
422
425
  (groups) => !getDuplicateSlugsInGroups(groups),
@@ -444,14 +447,14 @@ function getDuplicateSlugsInGroups(groups) {
444
447
  }
445
448
 
446
449
  // packages/models/src/lib/runner-config.ts
447
- import { z as z10 } from "zod";
448
- var outputTransformSchema = z10.function().args(z10.unknown()).returns(z10.union([auditOutputsSchema, z10.promise(auditOutputsSchema)]));
449
- var runnerConfigSchema = z10.object(
450
+ import { z as z11 } from "zod";
451
+ var outputTransformSchema = z11.function().args(z11.unknown()).returns(z11.union([auditOutputsSchema, z11.promise(auditOutputsSchema)]));
452
+ var runnerConfigSchema = z11.object(
450
453
  {
451
- command: z10.string({
454
+ command: z11.string({
452
455
  description: "Shell command to execute"
453
456
  }),
454
- args: z10.array(z10.string({ description: "Command arguments" })).optional(),
457
+ args: z11.array(z11.string({ description: "Command arguments" })).optional(),
455
458
  outputFile: filePathSchema.describe("Output path"),
456
459
  outputTransform: outputTransformSchema.optional()
457
460
  },
@@ -459,8 +462,8 @@ var runnerConfigSchema = z10.object(
459
462
  description: "How to execute runner"
460
463
  }
461
464
  );
462
- var onProgressSchema = z10.function().args(z10.unknown()).returns(z10.void());
463
- var runnerFunctionSchema = z10.function().args(onProgressSchema.optional()).returns(z10.union([auditOutputsSchema, z10.promise(auditOutputsSchema)]));
465
+ var onProgressSchema = z11.function().args(z11.unknown()).returns(z11.void());
466
+ var runnerFunctionSchema = z11.function().args(onProgressSchema.optional()).returns(z11.union([auditOutputsSchema, z11.promise(auditOutputsSchema)]));
464
467
 
465
468
  // packages/models/src/lib/plugin-config.ts
466
469
  var pluginMetaSchema = packageVersionSchema().merge(
@@ -471,13 +474,13 @@ var pluginMetaSchema = packageVersionSchema().merge(
471
474
  description: "Plugin metadata"
472
475
  })
473
476
  ).merge(
474
- z11.object({
477
+ z12.object({
475
478
  slug: slugSchema.describe("Unique plugin slug within core config"),
476
479
  icon: materialIconSchema
477
480
  })
478
481
  );
479
- var pluginDataSchema = z11.object({
480
- runner: z11.union([runnerConfigSchema, runnerFunctionSchema]),
482
+ var pluginDataSchema = z12.object({
483
+ runner: z12.union([runnerConfigSchema, runnerFunctionSchema]),
481
484
  audits: pluginAuditsSchema,
482
485
  groups: groupsSchema
483
486
  });
@@ -503,22 +506,22 @@ function getMissingRefsFromGroups(pluginCfg) {
503
506
  }
504
507
 
505
508
  // packages/models/src/lib/upload-config.ts
506
- import { z as z12 } from "zod";
507
- var uploadConfigSchema = z12.object({
509
+ import { z as z13 } from "zod";
510
+ var uploadConfigSchema = z13.object({
508
511
  server: urlSchema.describe("URL of deployed portal API"),
509
- apiKey: z12.string({
512
+ apiKey: z13.string({
510
513
  description: "API key with write access to portal (use `process.env` for security)"
511
514
  }),
512
515
  organization: slugSchema.describe(
513
516
  "Organization slug from Code PushUp portal"
514
517
  ),
515
518
  project: slugSchema.describe("Project slug from Code PushUp portal"),
516
- timeout: z12.number({ description: "Request timeout in minutes (default is 5)" }).positive().int().optional()
519
+ timeout: z13.number({ description: "Request timeout in minutes (default is 5)" }).positive().int().optional()
517
520
  });
518
521
 
519
522
  // packages/models/src/lib/core-config.ts
520
- var unrefinedCoreConfigSchema = z13.object({
521
- plugins: z13.array(pluginConfigSchema, {
523
+ var unrefinedCoreConfigSchema = z14.object({
524
+ plugins: z14.array(pluginConfigSchema, {
522
525
  description: "List of plugins to be used (official, community-provided, or custom)"
523
526
  }).min(1),
524
527
  /** portal configuration for persisting results */
@@ -541,7 +544,7 @@ function refineCoreConfig(schema) {
541
544
  }
542
545
 
543
546
  // packages/models/src/lib/report.ts
544
- import { z as z14 } from "zod";
547
+ import { z as z15 } from "zod";
545
548
  var auditReportSchema = auditSchema.merge(auditOutputSchema);
546
549
  var pluginReportSchema = pluginMetaSchema.merge(
547
550
  executionMetaSchema({
@@ -549,9 +552,9 @@ var pluginReportSchema = pluginMetaSchema.merge(
549
552
  descriptionDuration: "Duration of the plugin run in ms"
550
553
  })
551
554
  ).merge(
552
- z14.object({
553
- audits: z14.array(auditReportSchema).min(1),
554
- groups: z14.array(groupSchema).optional()
555
+ z15.object({
556
+ audits: z15.array(auditReportSchema).min(1),
557
+ groups: z15.array(groupSchema).optional()
555
558
  })
556
559
  ).refine(
557
560
  (pluginReport) => !getMissingRefsFromGroups2(pluginReport.audits, pluginReport.groups ?? []),
@@ -585,10 +588,10 @@ var reportSchema = packageVersionSchema({
585
588
  descriptionDuration: "Duration of the collect run in ms"
586
589
  })
587
590
  ).merge(
588
- z14.object(
591
+ z15.object(
589
592
  {
590
- categories: z14.array(categoryConfigSchema),
591
- plugins: z14.array(pluginReportSchema).min(1),
593
+ categories: z15.array(categoryConfigSchema),
594
+ plugins: z15.array(pluginReportSchema).min(1),
592
595
  commit: commitSchema.describe("Git commit for which report was collected").nullable()
593
596
  },
594
597
  { description: "Collect output data" }
@@ -604,40 +607,40 @@ var reportSchema = packageVersionSchema({
604
607
  );
605
608
 
606
609
  // packages/models/src/lib/reports-diff.ts
607
- import { z as z15 } from "zod";
610
+ import { z as z16 } from "zod";
608
611
  function makeComparisonSchema(schema) {
609
612
  const sharedDescription = schema.description || "Result";
610
- return z15.object({
613
+ return z16.object({
611
614
  before: schema.describe(`${sharedDescription} (source commit)`),
612
615
  after: schema.describe(`${sharedDescription} (target commit)`)
613
616
  });
614
617
  }
615
618
  function makeArraysComparisonSchema(diffSchema, resultSchema, description) {
616
- return z15.object(
619
+ return z16.object(
617
620
  {
618
- changed: z15.array(diffSchema),
619
- unchanged: z15.array(resultSchema),
620
- added: z15.array(resultSchema),
621
- removed: z15.array(resultSchema)
621
+ changed: z16.array(diffSchema),
622
+ unchanged: z16.array(resultSchema),
623
+ added: z16.array(resultSchema),
624
+ removed: z16.array(resultSchema)
622
625
  },
623
626
  { description }
624
627
  );
625
628
  }
626
- var scorableMetaSchema = z15.object({
629
+ var scorableMetaSchema = z16.object({
627
630
  slug: slugSchema,
628
631
  title: titleSchema,
629
632
  docsUrl: docsUrlSchema
630
633
  });
631
634
  var scorableWithPluginMetaSchema = scorableMetaSchema.merge(
632
- z15.object({
635
+ z16.object({
633
636
  plugin: pluginMetaSchema.pick({ slug: true, title: true, docsUrl: true }).describe("Plugin which defines it")
634
637
  })
635
638
  );
636
639
  var scorableDiffSchema = scorableMetaSchema.merge(
637
- z15.object({
640
+ z16.object({
638
641
  scores: makeComparisonSchema(scoreSchema).merge(
639
- z15.object({
640
- diff: z15.number().min(-1).max(1).describe("Score change (`scores.after - scores.before`)")
642
+ z16.object({
643
+ diff: z16.number().min(-1).max(1).describe("Score change (`scores.after - scores.before`)")
641
644
  })
642
645
  ).describe("Score comparison")
643
646
  })
@@ -648,10 +651,10 @@ var scorableWithPluginDiffSchema = scorableDiffSchema.merge(
648
651
  var categoryDiffSchema = scorableDiffSchema;
649
652
  var groupDiffSchema = scorableWithPluginDiffSchema;
650
653
  var auditDiffSchema = scorableWithPluginDiffSchema.merge(
651
- z15.object({
654
+ z16.object({
652
655
  values: makeComparisonSchema(auditValueSchema).merge(
653
- z15.object({
654
- diff: z15.number().int().describe("Value change (`values.after - values.before`)")
656
+ z16.object({
657
+ diff: z16.number().int().describe("Value change (`values.after - values.before`)")
655
658
  })
656
659
  ).describe("Audit `value` comparison"),
657
660
  displayValues: makeComparisonSchema(auditDisplayValueSchema).describe(
@@ -660,16 +663,18 @@ var auditDiffSchema = scorableWithPluginDiffSchema.merge(
660
663
  })
661
664
  );
662
665
  var categoryResultSchema = scorableMetaSchema.merge(
663
- z15.object({ score: scoreSchema })
666
+ z16.object({ score: scoreSchema })
664
667
  );
665
668
  var groupResultSchema = scorableWithPluginMetaSchema.merge(
666
- z15.object({ score: scoreSchema })
669
+ z16.object({ score: scoreSchema })
667
670
  );
668
671
  var auditResultSchema = scorableWithPluginMetaSchema.merge(
669
672
  auditOutputSchema.pick({ score: true, value: true, displayValue: true })
670
673
  );
671
- var reportsDiffSchema = z15.object({
674
+ var reportsDiffSchema = z16.object({
672
675
  commits: makeComparisonSchema(commitSchema).nullable().describe("Commits identifying compared reports"),
676
+ portalUrl: urlSchema.optional().describe("Link to comparison page in Code PushUp portal"),
677
+ label: z16.string().optional().describe("Label (e.g. project name)"),
673
678
  categories: makeArraysComparisonSchema(
674
679
  categoryDiffSchema,
675
680
  categoryResultSchema,
@@ -698,7 +703,9 @@ var reportsDiffSchema = z15.object({
698
703
  );
699
704
 
700
705
  // packages/utils/src/lib/execute-process.ts
701
- import { spawn } from "node:child_process";
706
+ import {
707
+ spawn
708
+ } from "node:child_process";
702
709
 
703
710
  // packages/utils/src/lib/reports/utils.ts
704
711
  import ansis from "ansis";
@@ -725,25 +732,29 @@ var ProcessError = class extends Error {
725
732
  }
726
733
  };
727
734
  function executeProcess(cfg) {
728
- const { observer, cwd, command, args, ignoreExitCode = false } = cfg;
729
- const { onStdout, onError, onComplete } = observer ?? {};
735
+ const { command, args, observer, ignoreExitCode = false, ...options } = cfg;
736
+ const { onStdout, onStderr, onError, onComplete } = observer ?? {};
730
737
  const date = (/* @__PURE__ */ new Date()).toISOString();
731
738
  const start = performance.now();
732
739
  return new Promise((resolve, reject) => {
733
- const process2 = spawn(command, args, { cwd, shell: true });
740
+ const spawnedProcess = spawn(command, args ?? [], {
741
+ shell: true,
742
+ ...options
743
+ });
734
744
  let stdout = "";
735
745
  let stderr = "";
736
- process2.stdout.on("data", (data) => {
746
+ spawnedProcess.stdout.on("data", (data) => {
737
747
  stdout += String(data);
738
- onStdout?.(String(data));
748
+ onStdout?.(String(data), spawnedProcess);
739
749
  });
740
- process2.stderr.on("data", (data) => {
750
+ spawnedProcess.stderr.on("data", (data) => {
741
751
  stderr += String(data);
752
+ onStderr?.(String(data), spawnedProcess);
742
753
  });
743
- process2.on("error", (err) => {
754
+ spawnedProcess.on("error", (err) => {
744
755
  stderr += err.toString();
745
756
  });
746
- process2.on("close", (code2) => {
757
+ spawnedProcess.on("close", (code2) => {
747
758
  const timings = { date, duration: calcDuration(start) };
748
759
  if (code2 === 0 || ignoreExitCode) {
749
760
  onComplete?.();
@@ -893,22 +904,28 @@ import { MultiProgressBars } from "multi-progress-bars";
893
904
  import { MarkdownDocument as MarkdownDocument3, md as md4 } from "build-md";
894
905
 
895
906
  // packages/utils/src/lib/reports/formatting.ts
896
- import { MarkdownDocument, md as md2 } from "build-md";
907
+ import {
908
+ MarkdownDocument,
909
+ md as md2
910
+ } from "build-md";
897
911
 
898
912
  // packages/utils/src/lib/reports/generate-md-report-categoy-section.ts
899
913
  import { MarkdownDocument as MarkdownDocument2, md as md3 } from "build-md";
900
914
 
901
915
  // packages/utils/src/lib/reports/generate-md-reports-diff.ts
902
916
  import {
903
- MarkdownDocument as MarkdownDocument4,
904
- md as md5
917
+ MarkdownDocument as MarkdownDocument5,
918
+ md as md6
905
919
  } from "build-md";
906
920
 
921
+ // packages/utils/src/lib/reports/generate-md-reports-diff-utils.ts
922
+ import { MarkdownDocument as MarkdownDocument4, md as md5 } from "build-md";
923
+
907
924
  // packages/utils/src/lib/reports/log-stdout-summary.ts
908
925
  import { bold as bold4, cyan, cyanBright, green as green2, red } from "ansis";
909
926
 
910
927
  // packages/plugin-js-packages/src/lib/config.ts
911
- import { z as z16 } from "zod";
928
+ import { z as z17 } from "zod";
912
929
 
913
930
  // packages/plugin-js-packages/src/lib/constants.ts
914
931
  var defaultAuditLevelMapping = {
@@ -926,17 +943,17 @@ var dependencyGroupToLong = {
926
943
 
927
944
  // packages/plugin-js-packages/src/lib/config.ts
928
945
  var dependencyGroups = ["prod", "dev", "optional"];
929
- var dependencyGroupSchema = z16.enum(dependencyGroups);
930
- var packageCommandSchema = z16.enum(["audit", "outdated"]);
931
- var packageManagerIdSchema = z16.enum([
946
+ var dependencyGroupSchema = z17.enum(dependencyGroups);
947
+ var packageCommandSchema = z17.enum(["audit", "outdated"]);
948
+ var packageManagerIdSchema = z17.enum([
932
949
  "npm",
933
950
  "yarn-classic",
934
951
  "yarn-modern",
935
952
  "pnpm"
936
953
  ]);
937
- var packageJsonPathSchema = z16.union([
938
- z16.array(z16.string()).min(1),
939
- z16.object({ autoSearch: z16.literal(true) })
954
+ var packageJsonPathSchema = z17.union([
955
+ z17.array(z17.string()).min(1),
956
+ z17.object({ autoSearch: z17.literal(true) })
940
957
  ]).describe(
941
958
  "File paths to package.json. Looks only at root package.json by default"
942
959
  ).default(["package.json"]);
@@ -947,7 +964,7 @@ var packageAuditLevels = [
947
964
  "low",
948
965
  "info"
949
966
  ];
950
- var packageAuditLevelSchema = z16.enum(packageAuditLevels);
967
+ var packageAuditLevelSchema = z17.enum(packageAuditLevels);
951
968
  function fillAuditLevelMapping(mapping) {
952
969
  return {
953
970
  critical: mapping.critical ?? defaultAuditLevelMapping.critical,
@@ -957,15 +974,13 @@ function fillAuditLevelMapping(mapping) {
957
974
  info: mapping.info ?? defaultAuditLevelMapping.info
958
975
  };
959
976
  }
960
- var jsPackagesPluginConfigSchema = z16.object({
961
- checks: z16.array(packageCommandSchema, {
977
+ var jsPackagesPluginConfigSchema = z17.object({
978
+ checks: z17.array(packageCommandSchema, {
962
979
  description: "Package manager commands to be run. Defaults to both audit and outdated."
963
980
  }).min(1).default(["audit", "outdated"]),
964
- packageManager: packageManagerIdSchema.describe(
965
- "Package manager to be used."
966
- ),
967
- dependencyGroups: z16.array(dependencyGroupSchema).min(1).default(["prod", "dev"]),
968
- auditLevelMapping: z16.record(packageAuditLevelSchema, issueSeveritySchema, {
981
+ packageManager: packageManagerIdSchema.describe("Package manager to be used.").optional(),
982
+ dependencyGroups: z17.array(dependencyGroupSchema).min(1).default(["prod", "dev"]),
983
+ auditLevelMapping: z17.record(packageAuditLevelSchema, issueSeveritySchema, {
969
984
  description: "Mapping of audit levels to issue severity. Custom mapping or overrides may be entered manually, otherwise has a default preset."
970
985
  }).default(defaultAuditLevelMapping).transform(fillAuditLevelMapping),
971
986
  packageJsonPaths: packageJsonPathSchema
@@ -1166,9 +1181,14 @@ function getVulnerabilitiesTotal(summary) {
1166
1181
  return Object.values(summary).reduce((acc, value) => acc + value, 0);
1167
1182
  }
1168
1183
 
1184
+ // packages/plugin-js-packages/src/lib/package-managers/pnpm/utils.ts
1185
+ var filterOutWarnings = (output) => output.split("\n").filter((line) => !line.trim().startsWith("WARN")).join("\n");
1186
+
1169
1187
  // packages/plugin-js-packages/src/lib/package-managers/pnpm/audit-result.ts
1170
1188
  function pnpmToAuditResult(output) {
1171
- const pnpmResult = JSON.parse(output);
1189
+ const pnpmResult = JSON.parse(
1190
+ filterOutWarnings(output)
1191
+ );
1172
1192
  const vulnerabilities = Object.values(pnpmResult.advisories).map(
1173
1193
  ({
1174
1194
  module_name: name,
@@ -1211,7 +1231,9 @@ function pnpmToDirectDependency(path) {
1211
1231
 
1212
1232
  // packages/plugin-js-packages/src/lib/package-managers/pnpm/outdated-result.ts
1213
1233
  function pnpmToOutdatedResult(output) {
1214
- const pnpmOutdated = JSON.parse(output);
1234
+ const pnpmOutdated = JSON.parse(
1235
+ filterOutWarnings(output)
1236
+ );
1215
1237
  return objectToEntries(pnpmOutdated).map(
1216
1238
  ([name, { current, latest, dependencyType: type }]) => ({
1217
1239
  name,
@@ -1493,7 +1515,7 @@ var packageManagers = {
1493
1515
  };
1494
1516
 
1495
1517
  // packages/plugin-js-packages/src/lib/runner/audit/transform.ts
1496
- import { md as md6 } from "build-md";
1518
+ import { md as md7 } from "build-md";
1497
1519
 
1498
1520
  // packages/plugin-js-packages/src/lib/runner/audit/constants.ts
1499
1521
  var auditScoreModifiers = {
@@ -1545,16 +1567,16 @@ function vulnerabilitiesToIssues(vulnerabilities, auditLevelMapping) {
1545
1567
  return [];
1546
1568
  }
1547
1569
  return vulnerabilities.map((detail) => {
1548
- const versionRange = detail.versionRange === "*" ? md6`${md6.bold("all")} versions` : md6`versions ${md6.bold(detail.versionRange)}`;
1549
- const directDependency = typeof detail.directDependency === "string" && detail.directDependency !== "" ? md6.code(detail.directDependency) : "";
1550
- const depHierarchy = directDependency ? md6`${directDependency}'s dependency ${md6.code(detail.name)}` : md6`${md6.code(detail.name)} dependency`;
1551
- const vulnerabilitySummary = md6`has a ${md6.bold(
1570
+ const versionRange = detail.versionRange === "*" ? md7`${md7.bold("all")} versions` : md7`versions ${md7.bold(detail.versionRange)}`;
1571
+ const directDependency = typeof detail.directDependency === "string" && detail.directDependency !== "" ? md7.code(detail.directDependency) : "";
1572
+ const depHierarchy = directDependency ? md7`${directDependency}'s dependency ${md7.code(detail.name)}` : md7`${md7.code(detail.name)} dependency`;
1573
+ const vulnerabilitySummary = md7`has a ${md7.bold(
1552
1574
  detail.severity
1553
1575
  )} vulnerability in ${versionRange}.`;
1554
1576
  const fixInfo = detail.fixInformation ? ` ${detail.fixInformation}` : "";
1555
- const additionalInfo = detail.title != null && detail.url != null ? md6` More information: ${md6.link(detail.url, detail.title)}` : "";
1577
+ const additionalInfo = detail.title != null && detail.url != null ? md7` More information: ${md7.link(detail.url, detail.title)}` : "";
1556
1578
  return {
1557
- message: md6`${depHierarchy} ${vulnerabilitySummary}${fixInfo}${additionalInfo}`.toString(),
1579
+ message: md7`${depHierarchy} ${vulnerabilitySummary}${fixInfo}${additionalInfo}`.toString(),
1558
1580
  severity: auditLevelMapping[detail.severity]
1559
1581
  };
1560
1582
  });
@@ -1571,7 +1593,7 @@ var PLUGIN_CONFIG_PATH = join2(
1571
1593
  );
1572
1594
 
1573
1595
  // packages/plugin-js-packages/src/lib/runner/outdated/transform.ts
1574
- import { md as md7 } from "build-md";
1596
+ import { md as md8 } from "build-md";
1575
1597
  import { clean, diff, neq } from "semver";
1576
1598
 
1577
1599
  // packages/plugin-js-packages/src/lib/runner/outdated/constants.ts
@@ -1642,11 +1664,11 @@ function outdatedToIssues(dependencies) {
1642
1664
  return dependencies.map((dep) => {
1643
1665
  const { name, current, latest, url } = dep;
1644
1666
  const outdatedLevel = diff(current, latest);
1645
- const packageReference = url == null ? md7.code(name) : md7.link(url, md7.code(name));
1667
+ const packageReference = url == null ? md8.code(name) : md8.link(url, md8.code(name));
1646
1668
  return {
1647
- message: md7`Package ${packageReference} requires a ${md7.bold(
1669
+ message: md8`Package ${packageReference} requires a ${md8.bold(
1648
1670
  outdatedLevel
1649
- )} update from ${md7.bold(current)} to ${md7.bold(latest)}.`.toString(),
1671
+ )} update from ${md8.bold(current)} to ${md8.bold(latest)}.`.toString(),
1650
1672
  severity: outdatedSeverity[outdatedLevel]
1651
1673
  };
1652
1674
  });