@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.
- package/README.md +2 -2
- package/bin.js +169 -147
- package/index.js +310 -142
- package/package.json +5 -31
- package/src/lib/config.d.ts +5 -5
- package/src/lib/constants.d.ts +2 -2
- package/src/lib/js-packages-plugin.d.ts +2 -2
- package/src/lib/package-managers/derive-package-manager.d.ts +3 -0
- package/src/lib/package-managers/derive-yarn.d.ts +1 -0
- package/src/lib/package-managers/index.d.ts +1 -1
- package/src/lib/package-managers/npm/audit-result.d.ts +2 -2
- package/src/lib/package-managers/npm/npm.d.ts +1 -1
- package/src/lib/package-managers/npm/outdated-result.d.ts +1 -1
- package/src/lib/package-managers/npm/types.d.ts +3 -3
- package/src/lib/package-managers/package-managers.d.ts +2 -2
- package/src/lib/package-managers/pnpm/audit-result.d.ts +1 -1
- package/src/lib/package-managers/pnpm/outdated-result.d.ts +1 -1
- package/src/lib/package-managers/pnpm/pnpm.d.ts +1 -1
- package/src/lib/package-managers/pnpm/types.d.ts +2 -2
- package/src/lib/package-managers/pnpm/utils.d.ts +1 -0
- package/src/lib/package-managers/types.d.ts +3 -3
- package/src/lib/package-managers/yarn-classic/audit-result.d.ts +1 -1
- package/src/lib/package-managers/yarn-classic/constants.d.ts +2 -2
- package/src/lib/package-managers/yarn-classic/outdated-result.d.ts +1 -1
- package/src/lib/package-managers/yarn-classic/types.d.ts +1 -1
- package/src/lib/package-managers/yarn-classic/yarn-classic.d.ts +1 -1
- package/src/lib/package-managers/yarn-modern/audit-result.d.ts +1 -1
- package/src/lib/package-managers/yarn-modern/outdated-result.d.ts +1 -1
- package/src/lib/package-managers/yarn-modern/types.d.ts +2 -2
- package/src/lib/package-managers/yarn-modern/yarn-modern.d.ts +1 -1
- package/src/lib/runner/audit/constants.d.ts +1 -1
- package/src/lib/runner/audit/transform.d.ts +2 -2
- package/src/lib/runner/audit/utils.d.ts +1 -1
- package/src/lib/runner/index.d.ts +1 -1
- package/src/lib/runner/outdated/transform.d.ts +3 -3
- package/src/lib/runner/utils.d.ts +2 -2
- 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/
|
|
162
|
+
// packages/models/src/lib/source.ts
|
|
163
163
|
import { z as z2 } from "zod";
|
|
164
|
-
var
|
|
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 =
|
|
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
|
|
211
|
+
import { z as z6 } from "zod";
|
|
194
212
|
|
|
195
213
|
// packages/models/src/lib/issue.ts
|
|
196
|
-
import { z as
|
|
197
|
-
var
|
|
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 =
|
|
218
|
+
var issueSchema = z4.object(
|
|
216
219
|
{
|
|
217
|
-
message:
|
|
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
|
|
226
|
-
var tableAlignmentSchema =
|
|
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 =
|
|
230
|
-
key:
|
|
231
|
-
label:
|
|
232
|
+
var tableColumnObjectSchema = z5.object({
|
|
233
|
+
key: z5.string(),
|
|
234
|
+
label: z5.string().optional(),
|
|
232
235
|
align: tableAlignmentSchema.optional()
|
|
233
236
|
});
|
|
234
|
-
var tableRowObjectSchema =
|
|
237
|
+
var tableRowObjectSchema = z5.record(tableCellValueSchema, {
|
|
235
238
|
description: "Object row"
|
|
236
239
|
});
|
|
237
|
-
var tableRowPrimitiveSchema =
|
|
240
|
+
var tableRowPrimitiveSchema = z5.array(tableCellValueSchema, {
|
|
238
241
|
description: "Primitive row"
|
|
239
242
|
});
|
|
240
|
-
var tableSharedSchema =
|
|
241
|
-
title:
|
|
243
|
+
var tableSharedSchema = z5.object({
|
|
244
|
+
title: z5.string().optional().describe("Display title for table")
|
|
242
245
|
});
|
|
243
246
|
var tablePrimitiveSchema = tableSharedSchema.merge(
|
|
244
|
-
|
|
247
|
+
z5.object(
|
|
245
248
|
{
|
|
246
|
-
columns:
|
|
247
|
-
rows:
|
|
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
|
-
|
|
256
|
+
z5.object(
|
|
254
257
|
{
|
|
255
|
-
columns:
|
|
256
|
-
|
|
257
|
-
|
|
258
|
+
columns: z5.union([
|
|
259
|
+
z5.array(tableAlignmentSchema),
|
|
260
|
+
z5.array(tableColumnObjectSchema)
|
|
258
261
|
]).optional(),
|
|
259
|
-
rows:
|
|
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") =>
|
|
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 =
|
|
271
|
-
var auditDetailsSchema =
|
|
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:
|
|
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 =
|
|
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 =
|
|
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
|
|
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
|
-
|
|
311
|
-
type:
|
|
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
|
-
|
|
333
|
-
isBinary:
|
|
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 =
|
|
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
|
|
369
|
-
var commitSchema =
|
|
371
|
+
import { z as z8 } from "zod";
|
|
372
|
+
var commitSchema = z8.object(
|
|
370
373
|
{
|
|
371
|
-
hash:
|
|
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:
|
|
376
|
-
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:
|
|
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
|
|
390
|
+
import { z as z14 } from "zod";
|
|
388
391
|
|
|
389
392
|
// packages/models/src/lib/persist-config.ts
|
|
390
|
-
import { z as
|
|
391
|
-
var formatSchema =
|
|
392
|
-
var persistConfigSchema =
|
|
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:
|
|
398
|
+
format: z9.array(formatSchema).optional()
|
|
396
399
|
});
|
|
397
400
|
|
|
398
401
|
// packages/models/src/lib/plugin-config.ts
|
|
399
|
-
import { z as
|
|
402
|
+
import { z as z12 } from "zod";
|
|
400
403
|
|
|
401
404
|
// packages/models/src/lib/group.ts
|
|
402
|
-
import { z as
|
|
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 =
|
|
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
|
|
448
|
-
var outputTransformSchema =
|
|
449
|
-
var runnerConfigSchema =
|
|
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:
|
|
454
|
+
command: z11.string({
|
|
452
455
|
description: "Shell command to execute"
|
|
453
456
|
}),
|
|
454
|
-
args:
|
|
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 =
|
|
463
|
-
var runnerFunctionSchema =
|
|
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
|
-
|
|
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 =
|
|
480
|
-
runner:
|
|
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
|
|
507
|
-
var uploadConfigSchema =
|
|
509
|
+
import { z as z13 } from "zod";
|
|
510
|
+
var uploadConfigSchema = z13.object({
|
|
508
511
|
server: urlSchema.describe("URL of deployed portal API"),
|
|
509
|
-
apiKey:
|
|
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:
|
|
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 =
|
|
521
|
-
plugins:
|
|
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
|
|
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
|
-
|
|
553
|
-
audits:
|
|
554
|
-
groups:
|
|
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
|
-
|
|
591
|
+
z15.object(
|
|
589
592
|
{
|
|
590
|
-
categories:
|
|
591
|
-
plugins:
|
|
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
|
|
610
|
+
import { z as z16 } from "zod";
|
|
608
611
|
function makeComparisonSchema(schema) {
|
|
609
612
|
const sharedDescription = schema.description || "Result";
|
|
610
|
-
return
|
|
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
|
|
619
|
+
return z16.object(
|
|
617
620
|
{
|
|
618
|
-
changed:
|
|
619
|
-
unchanged:
|
|
620
|
-
added:
|
|
621
|
-
removed:
|
|
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 =
|
|
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
|
-
|
|
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
|
-
|
|
640
|
+
z16.object({
|
|
638
641
|
scores: makeComparisonSchema(scoreSchema).merge(
|
|
639
|
-
|
|
640
|
-
diff:
|
|
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
|
-
|
|
654
|
+
z16.object({
|
|
652
655
|
values: makeComparisonSchema(auditValueSchema).merge(
|
|
653
|
-
|
|
654
|
-
diff:
|
|
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
|
-
|
|
666
|
+
z16.object({ score: scoreSchema })
|
|
664
667
|
);
|
|
665
668
|
var groupResultSchema = scorableWithPluginMetaSchema.merge(
|
|
666
|
-
|
|
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 =
|
|
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 {
|
|
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 {
|
|
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
|
|
740
|
+
const spawnedProcess = spawn(command, args ?? [], {
|
|
741
|
+
shell: true,
|
|
742
|
+
...options
|
|
743
|
+
});
|
|
734
744
|
let stdout = "";
|
|
735
745
|
let stderr = "";
|
|
736
|
-
|
|
746
|
+
spawnedProcess.stdout.on("data", (data) => {
|
|
737
747
|
stdout += String(data);
|
|
738
|
-
onStdout?.(String(data));
|
|
748
|
+
onStdout?.(String(data), spawnedProcess);
|
|
739
749
|
});
|
|
740
|
-
|
|
750
|
+
spawnedProcess.stderr.on("data", (data) => {
|
|
741
751
|
stderr += String(data);
|
|
752
|
+
onStderr?.(String(data), spawnedProcess);
|
|
742
753
|
});
|
|
743
|
-
|
|
754
|
+
spawnedProcess.on("error", (err) => {
|
|
744
755
|
stderr += err.toString();
|
|
745
756
|
});
|
|
746
|
-
|
|
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 {
|
|
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
|
|
904
|
-
md as
|
|
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
|
|
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 =
|
|
930
|
-
var packageCommandSchema =
|
|
931
|
-
var packageManagerIdSchema =
|
|
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 =
|
|
938
|
-
|
|
939
|
-
|
|
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 =
|
|
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 =
|
|
961
|
-
checks:
|
|
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
|
-
|
|
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(
|
|
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(
|
|
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
|
|
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 === "*" ?
|
|
1549
|
-
const directDependency = typeof detail.directDependency === "string" && detail.directDependency !== "" ?
|
|
1550
|
-
const depHierarchy = directDependency ?
|
|
1551
|
-
const vulnerabilitySummary =
|
|
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 ?
|
|
1577
|
+
const additionalInfo = detail.title != null && detail.url != null ? md7` More information: ${md7.link(detail.url, detail.title)}` : "";
|
|
1556
1578
|
return {
|
|
1557
|
-
message:
|
|
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
|
|
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 ?
|
|
1667
|
+
const packageReference = url == null ? md8.code(name) : md8.link(url, md8.code(name));
|
|
1646
1668
|
return {
|
|
1647
|
-
message:
|
|
1669
|
+
message: md8`Package ${packageReference} requires a ${md8.bold(
|
|
1648
1670
|
outdatedLevel
|
|
1649
|
-
)} update from ${
|
|
1671
|
+
)} update from ${md8.bold(current)} to ${md8.bold(latest)}.`.toString(),
|
|
1650
1672
|
severity: outdatedSeverity[outdatedLevel]
|
|
1651
1673
|
};
|
|
1652
1674
|
});
|