@code-pushup/core 0.8.10 → 0.8.12
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/index.js +209 -186
- package/package.json +1 -1
- package/src/lib/implementation/json-to-gql.d.ts +3 -3
package/index.js
CHANGED
|
@@ -6,7 +6,7 @@ import { join as join2 } from "node:path";
|
|
|
6
6
|
// packages/utils/src/lib/execute-process.ts
|
|
7
7
|
import { spawn } from "node:child_process";
|
|
8
8
|
|
|
9
|
-
// packages/utils/src/lib/
|
|
9
|
+
// packages/utils/src/lib/reports/utils.ts
|
|
10
10
|
import { join } from "node:path";
|
|
11
11
|
|
|
12
12
|
// packages/models/src/lib/audit.ts
|
|
@@ -43,6 +43,46 @@ function errorItems(items, transform = (items2) => items2.join(", ")) {
|
|
|
43
43
|
function exists(value) {
|
|
44
44
|
return value != null;
|
|
45
45
|
}
|
|
46
|
+
function getMissingRefsForCategories(categories, plugins) {
|
|
47
|
+
const missingRefs = [];
|
|
48
|
+
const auditRefsFromCategory = categories.flatMap(
|
|
49
|
+
({ refs }) => refs.filter(({ type }) => type === "audit").map(({ plugin, slug }) => `${plugin}/${slug}`)
|
|
50
|
+
);
|
|
51
|
+
const auditRefsFromPlugins = plugins.flatMap(
|
|
52
|
+
({ audits, slug: pluginSlug }) => {
|
|
53
|
+
return audits.map(({ slug }) => `${pluginSlug}/${slug}`);
|
|
54
|
+
}
|
|
55
|
+
);
|
|
56
|
+
const missingAuditRefs = hasMissingStrings(
|
|
57
|
+
auditRefsFromCategory,
|
|
58
|
+
auditRefsFromPlugins
|
|
59
|
+
);
|
|
60
|
+
if (Array.isArray(missingAuditRefs) && missingAuditRefs.length > 0) {
|
|
61
|
+
missingRefs.push(...missingAuditRefs);
|
|
62
|
+
}
|
|
63
|
+
const groupRefsFromCategory = categories.flatMap(
|
|
64
|
+
({ refs }) => refs.filter(({ type }) => type === "group").map(({ plugin, slug }) => `${plugin}#${slug} (group)`)
|
|
65
|
+
);
|
|
66
|
+
const groupRefsFromPlugins = plugins.flatMap(
|
|
67
|
+
({ groups, slug: pluginSlug }) => {
|
|
68
|
+
return Array.isArray(groups) ? groups.map(({ slug }) => `${pluginSlug}#${slug} (group)`) : [];
|
|
69
|
+
}
|
|
70
|
+
);
|
|
71
|
+
const missingGroupRefs = hasMissingStrings(
|
|
72
|
+
groupRefsFromCategory,
|
|
73
|
+
groupRefsFromPlugins
|
|
74
|
+
);
|
|
75
|
+
if (Array.isArray(missingGroupRefs) && missingGroupRefs.length > 0) {
|
|
76
|
+
missingRefs.push(...missingGroupRefs);
|
|
77
|
+
}
|
|
78
|
+
return missingRefs.length ? missingRefs : false;
|
|
79
|
+
}
|
|
80
|
+
function missingRefsForCategoriesErrorMsg(categories, plugins) {
|
|
81
|
+
const missingRefs = getMissingRefsForCategories(categories, plugins);
|
|
82
|
+
return `The following category references need to point to an audit or group: ${errorItems(
|
|
83
|
+
missingRefs
|
|
84
|
+
)}`;
|
|
85
|
+
}
|
|
46
86
|
|
|
47
87
|
// packages/models/src/lib/implementation/schemas.ts
|
|
48
88
|
function executionMetaSchema(options = {
|
|
@@ -101,15 +141,13 @@ function positiveIntSchema(description) {
|
|
|
101
141
|
return z.number({ description }).int().nonnegative();
|
|
102
142
|
}
|
|
103
143
|
function packageVersionSchema(options) {
|
|
104
|
-
|
|
105
|
-
versionDescription = versionDescription || "NPM version of the package";
|
|
106
|
-
optional = !!optional;
|
|
144
|
+
const { versionDescription = "NPM version of the package", required } = options ?? {};
|
|
107
145
|
const packageSchema = z.string({ description: "NPM package name" });
|
|
108
146
|
const versionSchema = z.string({ description: versionDescription });
|
|
109
147
|
return z.object(
|
|
110
148
|
{
|
|
111
|
-
packageName:
|
|
112
|
-
version:
|
|
149
|
+
packageName: required ? packageSchema : packageSchema.optional(),
|
|
150
|
+
version: required ? versionSchema : versionSchema.optional()
|
|
113
151
|
},
|
|
114
152
|
{ description: "NPM package name and version of a published package" }
|
|
115
153
|
);
|
|
@@ -171,7 +209,7 @@ var pluginAuditsSchema = z2.array(auditSchema, {
|
|
|
171
209
|
);
|
|
172
210
|
function duplicateSlugsInAuditsErrorMsg(audits) {
|
|
173
211
|
const duplicateRefs = getDuplicateSlugsInAudits(audits);
|
|
174
|
-
return `In plugin audits the slugs are not unique: ${errorItems(
|
|
212
|
+
return `In plugin audits the following slugs are not unique: ${errorItems(
|
|
175
213
|
duplicateRefs
|
|
176
214
|
)}`;
|
|
177
215
|
}
|
|
@@ -360,7 +398,9 @@ function getDuplicateRefsInGroups(groups) {
|
|
|
360
398
|
}
|
|
361
399
|
function duplicateSlugsInGroupsErrorMsg(groups) {
|
|
362
400
|
const duplicateRefs = getDuplicateSlugsInGroups(groups);
|
|
363
|
-
return `In groups the slugs are not unique: ${errorItems(
|
|
401
|
+
return `In groups the following slugs are not unique: ${errorItems(
|
|
402
|
+
duplicateRefs
|
|
403
|
+
)}`;
|
|
364
404
|
}
|
|
365
405
|
function getDuplicateSlugsInGroups(groups) {
|
|
366
406
|
return Array.isArray(groups) ? hasDuplicateStrings(groups.map(({ slug }) => slug)) : false;
|
|
@@ -386,9 +426,7 @@ var onProgressSchema = z8.function().args(z8.unknown()).returns(z8.void());
|
|
|
386
426
|
var runnerFunctionSchema = z8.function().args(onProgressSchema.optional()).returns(z8.union([auditOutputsSchema, z8.promise(auditOutputsSchema)]));
|
|
387
427
|
|
|
388
428
|
// packages/models/src/lib/plugin-config.ts
|
|
389
|
-
var pluginMetaSchema = packageVersionSchema(
|
|
390
|
-
optional: true
|
|
391
|
-
}).merge(
|
|
429
|
+
var pluginMetaSchema = packageVersionSchema().merge(
|
|
392
430
|
metaSchema({
|
|
393
431
|
titleDescription: "Descriptive name",
|
|
394
432
|
descriptionDescription: "Description (markdown)",
|
|
@@ -397,7 +435,7 @@ var pluginMetaSchema = packageVersionSchema({
|
|
|
397
435
|
})
|
|
398
436
|
).merge(
|
|
399
437
|
z9.object({
|
|
400
|
-
slug: slugSchema("
|
|
438
|
+
slug: slugSchema("Unique plugin slug within core config"),
|
|
401
439
|
icon: materialIconSchema
|
|
402
440
|
})
|
|
403
441
|
);
|
|
@@ -414,20 +452,17 @@ var pluginConfigSchema = pluginMetaSchema.merge(pluginDataSchema).refine(
|
|
|
414
452
|
);
|
|
415
453
|
function missingRefsFromGroupsErrorMsg(pluginCfg) {
|
|
416
454
|
const missingRefs = getMissingRefsFromGroups(pluginCfg);
|
|
417
|
-
return `
|
|
455
|
+
return `The following group references need to point to an existing audit in this plugin config: ${errorItems(
|
|
418
456
|
missingRefs
|
|
419
457
|
)}`;
|
|
420
458
|
}
|
|
421
459
|
function getMissingRefsFromGroups(pluginCfg) {
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
);
|
|
429
|
-
}
|
|
430
|
-
return false;
|
|
460
|
+
return hasMissingStrings(
|
|
461
|
+
pluginCfg.groups?.flatMap(
|
|
462
|
+
({ refs: audits }) => audits.map(({ slug: ref }) => ref)
|
|
463
|
+
) ?? [],
|
|
464
|
+
pluginCfg.audits.map(({ slug }) => slug)
|
|
465
|
+
);
|
|
431
466
|
}
|
|
432
467
|
|
|
433
468
|
// packages/models/src/lib/upload-config.ts
|
|
@@ -437,19 +472,15 @@ var uploadConfigSchema = z10.object({
|
|
|
437
472
|
apiKey: z10.string({
|
|
438
473
|
description: "API key with write access to portal (use `process.env` for security)"
|
|
439
474
|
}),
|
|
440
|
-
organization:
|
|
441
|
-
|
|
442
|
-
}),
|
|
443
|
-
project: z10.string({
|
|
444
|
-
description: "Project in code versioning system"
|
|
445
|
-
})
|
|
475
|
+
organization: slugSchema("Organization slug from Code PushUp portal"),
|
|
476
|
+
project: slugSchema("Project slug from Code PushUp portal")
|
|
446
477
|
});
|
|
447
478
|
|
|
448
479
|
// packages/models/src/lib/core-config.ts
|
|
449
480
|
var unrefinedCoreConfigSchema = z11.object({
|
|
450
481
|
plugins: z11.array(pluginConfigSchema, {
|
|
451
482
|
description: "List of plugins to be used (official, community-provided, or custom)"
|
|
452
|
-
}),
|
|
483
|
+
}).min(1),
|
|
453
484
|
/** portal configuration for persisting results */
|
|
454
485
|
persist: persistConfigSchema.optional(),
|
|
455
486
|
/** portal configuration for uploading results */
|
|
@@ -459,52 +490,15 @@ var unrefinedCoreConfigSchema = z11.object({
|
|
|
459
490
|
var coreConfigSchema = refineCoreConfig(unrefinedCoreConfigSchema);
|
|
460
491
|
function refineCoreConfig(schema) {
|
|
461
492
|
return schema.refine(
|
|
462
|
-
(coreCfg) => !getMissingRefsForCategories(coreCfg),
|
|
493
|
+
(coreCfg) => !getMissingRefsForCategories(coreCfg.categories, coreCfg.plugins),
|
|
463
494
|
(coreCfg) => ({
|
|
464
|
-
message: missingRefsForCategoriesErrorMsg(
|
|
495
|
+
message: missingRefsForCategoriesErrorMsg(
|
|
496
|
+
coreCfg.categories,
|
|
497
|
+
coreCfg.plugins
|
|
498
|
+
)
|
|
465
499
|
})
|
|
466
500
|
);
|
|
467
501
|
}
|
|
468
|
-
function missingRefsForCategoriesErrorMsg(coreCfg) {
|
|
469
|
-
const missingRefs = getMissingRefsForCategories(coreCfg);
|
|
470
|
-
return `In the categories, the following plugin refs do not exist in the provided plugins: ${errorItems(
|
|
471
|
-
missingRefs
|
|
472
|
-
)}`;
|
|
473
|
-
}
|
|
474
|
-
function getMissingRefsForCategories(coreCfg) {
|
|
475
|
-
const missingRefs = [];
|
|
476
|
-
const auditRefsFromCategory = coreCfg.categories.flatMap(
|
|
477
|
-
({ refs }) => refs.filter(({ type }) => type === "audit").map(({ plugin, slug }) => `${plugin}/${slug}`)
|
|
478
|
-
);
|
|
479
|
-
const auditRefsFromPlugins = coreCfg.plugins.flatMap(
|
|
480
|
-
({ audits, slug: pluginSlug }) => {
|
|
481
|
-
return audits.map(({ slug }) => `${pluginSlug}/${slug}`);
|
|
482
|
-
}
|
|
483
|
-
);
|
|
484
|
-
const missingAuditRefs = hasMissingStrings(
|
|
485
|
-
auditRefsFromCategory,
|
|
486
|
-
auditRefsFromPlugins
|
|
487
|
-
);
|
|
488
|
-
if (Array.isArray(missingAuditRefs) && missingAuditRefs.length > 0) {
|
|
489
|
-
missingRefs.push(...missingAuditRefs);
|
|
490
|
-
}
|
|
491
|
-
const groupRefsFromCategory = coreCfg.categories.flatMap(
|
|
492
|
-
({ refs }) => refs.filter(({ type }) => type === "group").map(({ plugin, slug }) => `${plugin}#${slug} (group)`)
|
|
493
|
-
);
|
|
494
|
-
const groupRefsFromPlugins = coreCfg.plugins.flatMap(
|
|
495
|
-
({ groups, slug: pluginSlug }) => {
|
|
496
|
-
return Array.isArray(groups) ? groups.map(({ slug }) => `${pluginSlug}#${slug} (group)`) : [];
|
|
497
|
-
}
|
|
498
|
-
);
|
|
499
|
-
const missingGroupRefs = hasMissingStrings(
|
|
500
|
-
groupRefsFromCategory,
|
|
501
|
-
groupRefsFromPlugins
|
|
502
|
-
);
|
|
503
|
-
if (Array.isArray(missingGroupRefs) && missingGroupRefs.length > 0) {
|
|
504
|
-
missingRefs.push(...missingGroupRefs);
|
|
505
|
-
}
|
|
506
|
-
return missingRefs.length ? missingRefs : false;
|
|
507
|
-
}
|
|
508
502
|
|
|
509
503
|
// packages/models/src/lib/implementation/constants.ts
|
|
510
504
|
var PERSIST_OUTPUT_DIR = ".code-pushup";
|
|
@@ -524,9 +518,32 @@ var pluginReportSchema = pluginMetaSchema.merge(
|
|
|
524
518
|
audits: z12.array(auditReportSchema),
|
|
525
519
|
groups: z12.array(groupSchema).optional()
|
|
526
520
|
})
|
|
521
|
+
).refine(
|
|
522
|
+
(pluginReport) => !getMissingRefsFromGroups2(pluginReport.audits, pluginReport.groups ?? []),
|
|
523
|
+
(pluginReport) => ({
|
|
524
|
+
message: missingRefsFromGroupsErrorMsg2(
|
|
525
|
+
pluginReport.audits,
|
|
526
|
+
pluginReport.groups ?? []
|
|
527
|
+
)
|
|
528
|
+
})
|
|
527
529
|
);
|
|
530
|
+
function missingRefsFromGroupsErrorMsg2(audits, groups) {
|
|
531
|
+
const missingRefs = getMissingRefsFromGroups2(audits, groups);
|
|
532
|
+
return `group references need to point to an existing audit in this plugin report: ${errorItems(
|
|
533
|
+
missingRefs
|
|
534
|
+
)}`;
|
|
535
|
+
}
|
|
536
|
+
function getMissingRefsFromGroups2(audits, groups) {
|
|
537
|
+
return hasMissingStrings(
|
|
538
|
+
groups.flatMap(
|
|
539
|
+
({ refs: auditRefs }) => auditRefs.map(({ slug: ref }) => ref)
|
|
540
|
+
),
|
|
541
|
+
audits.map(({ slug }) => slug)
|
|
542
|
+
);
|
|
543
|
+
}
|
|
528
544
|
var reportSchema = packageVersionSchema({
|
|
529
|
-
versionDescription: "NPM version of the CLI"
|
|
545
|
+
versionDescription: "NPM version of the CLI",
|
|
546
|
+
required: true
|
|
530
547
|
}).merge(
|
|
531
548
|
executionMetaSchema({
|
|
532
549
|
descriptionDate: "Start date and time of the collect run",
|
|
@@ -536,18 +553,20 @@ var reportSchema = packageVersionSchema({
|
|
|
536
553
|
z12.object(
|
|
537
554
|
{
|
|
538
555
|
categories: z12.array(categoryConfigSchema),
|
|
539
|
-
plugins: z12.array(pluginReportSchema)
|
|
556
|
+
plugins: z12.array(pluginReportSchema).min(1)
|
|
540
557
|
},
|
|
541
558
|
{ description: "Collect output data" }
|
|
542
559
|
)
|
|
560
|
+
).refine(
|
|
561
|
+
(report) => !getMissingRefsForCategories(report.categories, report.plugins),
|
|
562
|
+
(report) => ({
|
|
563
|
+
message: missingRefsForCategoriesErrorMsg(
|
|
564
|
+
report.categories,
|
|
565
|
+
report.plugins
|
|
566
|
+
)
|
|
567
|
+
})
|
|
543
568
|
);
|
|
544
569
|
|
|
545
|
-
// packages/utils/src/lib/constants.ts
|
|
546
|
-
var SCORE_COLOR_RANGE = {
|
|
547
|
-
GREEN_MIN: 0.9,
|
|
548
|
-
YELLOW_MIN: 0.5
|
|
549
|
-
};
|
|
550
|
-
|
|
551
570
|
// packages/utils/src/lib/file-system.ts
|
|
552
571
|
import { bundleRequire } from "bundle-require";
|
|
553
572
|
import chalk from "chalk";
|
|
@@ -673,7 +692,14 @@ async function importEsmModule(options) {
|
|
|
673
692
|
return mod.default;
|
|
674
693
|
}
|
|
675
694
|
|
|
676
|
-
// packages/utils/src/lib/
|
|
695
|
+
// packages/utils/src/lib/reports/constants.ts
|
|
696
|
+
var NEW_LINE = "\n";
|
|
697
|
+
var SCORE_COLOR_RANGE = {
|
|
698
|
+
GREEN_MIN: 0.9,
|
|
699
|
+
YELLOW_MIN: 0.5
|
|
700
|
+
};
|
|
701
|
+
|
|
702
|
+
// packages/utils/src/lib/reports/utils.ts
|
|
677
703
|
var FOOTER_PREFIX = "Made with \u2764 by";
|
|
678
704
|
var CODE_PUSHUP_DOMAIN = "code-pushup.dev";
|
|
679
705
|
var README_LINK = "https://github.com/flowup/quality-metrics-cli#readme";
|
|
@@ -956,83 +982,6 @@ function groupByStatus(results) {
|
|
|
956
982
|
);
|
|
957
983
|
}
|
|
958
984
|
|
|
959
|
-
// packages/utils/src/lib/md/details.ts
|
|
960
|
-
function details(title, content, cfg = { open: false }) {
|
|
961
|
-
return `<details${cfg.open ? " open" : ""}>
|
|
962
|
-
<summary>${title}</summary>
|
|
963
|
-
${content}
|
|
964
|
-
</details>
|
|
965
|
-
`;
|
|
966
|
-
}
|
|
967
|
-
|
|
968
|
-
// packages/utils/src/lib/md/headline.ts
|
|
969
|
-
function headline(text, hierarchy = 1) {
|
|
970
|
-
return `${new Array(hierarchy).fill("#").join("")} ${text}`;
|
|
971
|
-
}
|
|
972
|
-
function h2(text) {
|
|
973
|
-
return headline(text, 2);
|
|
974
|
-
}
|
|
975
|
-
function h3(text) {
|
|
976
|
-
return headline(text, 3);
|
|
977
|
-
}
|
|
978
|
-
|
|
979
|
-
// packages/utils/src/lib/md/constants.ts
|
|
980
|
-
var NEW_LINE = "\n";
|
|
981
|
-
|
|
982
|
-
// packages/utils/src/lib/md/table.ts
|
|
983
|
-
var alignString = /* @__PURE__ */ new Map([
|
|
984
|
-
["l", ":--"],
|
|
985
|
-
["c", ":--:"],
|
|
986
|
-
["r", "--:"]
|
|
987
|
-
]);
|
|
988
|
-
function tableMd(data, align) {
|
|
989
|
-
if (data.length === 0) {
|
|
990
|
-
throw new Error("Data can't be empty");
|
|
991
|
-
}
|
|
992
|
-
align = align || data[0]?.map(() => "c");
|
|
993
|
-
const _data = data.map((arr) => "|" + arr.join("|") + "|");
|
|
994
|
-
const secondRow = "|" + align?.map((s) => alignString.get(s)).join("|") + "|";
|
|
995
|
-
return _data.shift() + NEW_LINE + secondRow + NEW_LINE + _data.join(NEW_LINE);
|
|
996
|
-
}
|
|
997
|
-
function tableHtml(data) {
|
|
998
|
-
if (data.length === 0) {
|
|
999
|
-
throw new Error("Data can't be empty");
|
|
1000
|
-
}
|
|
1001
|
-
const _data = data.map((arr, index) => {
|
|
1002
|
-
if (index === 0) {
|
|
1003
|
-
return "<tr>" + arr.map((s) => `<th>${s}</th>`).join("") + "</tr>";
|
|
1004
|
-
}
|
|
1005
|
-
return "<tr>" + arr.map((s) => `<td>${s}</td>`).join("") + "</tr>";
|
|
1006
|
-
});
|
|
1007
|
-
return "<table>" + _data.join("") + "</table>";
|
|
1008
|
-
}
|
|
1009
|
-
|
|
1010
|
-
// packages/utils/src/lib/md/font-style.ts
|
|
1011
|
-
var stylesMap = {
|
|
1012
|
-
i: "_",
|
|
1013
|
-
// italic
|
|
1014
|
-
b: "**",
|
|
1015
|
-
// bold
|
|
1016
|
-
s: "~",
|
|
1017
|
-
// strike through
|
|
1018
|
-
c: "`"
|
|
1019
|
-
// code
|
|
1020
|
-
};
|
|
1021
|
-
function style(text, styles = ["b"]) {
|
|
1022
|
-
return styles.reduce((t, s) => `${stylesMap[s]}${t}${stylesMap[s]}`, text);
|
|
1023
|
-
}
|
|
1024
|
-
|
|
1025
|
-
// packages/utils/src/lib/md/link.ts
|
|
1026
|
-
function link(href, text) {
|
|
1027
|
-
return `[${text || href}](${href})`;
|
|
1028
|
-
}
|
|
1029
|
-
|
|
1030
|
-
// packages/utils/src/lib/md/list.ts
|
|
1031
|
-
function li(text, order = "unordered") {
|
|
1032
|
-
const style2 = order === "unordered" ? "-" : "- [ ]";
|
|
1033
|
-
return `${style2} ${text}`;
|
|
1034
|
-
}
|
|
1035
|
-
|
|
1036
985
|
// packages/utils/src/lib/progress.ts
|
|
1037
986
|
import chalk2 from "chalk";
|
|
1038
987
|
import { MultiProgressBars } from "multi-progress-bars";
|
|
@@ -1087,8 +1036,82 @@ function getProgressBar(taskName) {
|
|
|
1087
1036
|
};
|
|
1088
1037
|
}
|
|
1089
1038
|
|
|
1090
|
-
// packages/utils/src/lib/
|
|
1091
|
-
function
|
|
1039
|
+
// packages/utils/src/lib/reports/md/details.ts
|
|
1040
|
+
function details(title, content, cfg = { open: false }) {
|
|
1041
|
+
return `<details${cfg.open ? " open" : ""}>
|
|
1042
|
+
<summary>${title}</summary>
|
|
1043
|
+
${content}
|
|
1044
|
+
</details>
|
|
1045
|
+
`;
|
|
1046
|
+
}
|
|
1047
|
+
|
|
1048
|
+
// packages/utils/src/lib/reports/md/font-style.ts
|
|
1049
|
+
var stylesMap = {
|
|
1050
|
+
i: "_",
|
|
1051
|
+
// italic
|
|
1052
|
+
b: "**",
|
|
1053
|
+
// bold
|
|
1054
|
+
s: "~",
|
|
1055
|
+
// strike through
|
|
1056
|
+
c: "`"
|
|
1057
|
+
// code
|
|
1058
|
+
};
|
|
1059
|
+
function style(text, styles = ["b"]) {
|
|
1060
|
+
return styles.reduce((t, s) => `${stylesMap[s]}${t}${stylesMap[s]}`, text);
|
|
1061
|
+
}
|
|
1062
|
+
|
|
1063
|
+
// packages/utils/src/lib/reports/md/headline.ts
|
|
1064
|
+
function headline(text, hierarchy = 1) {
|
|
1065
|
+
return `${new Array(hierarchy).fill("#").join("")} ${text}`;
|
|
1066
|
+
}
|
|
1067
|
+
function h2(text) {
|
|
1068
|
+
return headline(text, 2);
|
|
1069
|
+
}
|
|
1070
|
+
function h3(text) {
|
|
1071
|
+
return headline(text, 3);
|
|
1072
|
+
}
|
|
1073
|
+
|
|
1074
|
+
// packages/utils/src/lib/reports/md/link.ts
|
|
1075
|
+
function link(href, text) {
|
|
1076
|
+
return `[${text || href}](${href})`;
|
|
1077
|
+
}
|
|
1078
|
+
|
|
1079
|
+
// packages/utils/src/lib/reports/md/list.ts
|
|
1080
|
+
function li(text, order = "unordered") {
|
|
1081
|
+
const style2 = order === "unordered" ? "-" : "- [ ]";
|
|
1082
|
+
return `${style2} ${text}`;
|
|
1083
|
+
}
|
|
1084
|
+
|
|
1085
|
+
// packages/utils/src/lib/reports/md/table.ts
|
|
1086
|
+
var alignString = /* @__PURE__ */ new Map([
|
|
1087
|
+
["l", ":--"],
|
|
1088
|
+
["c", ":--:"],
|
|
1089
|
+
["r", "--:"]
|
|
1090
|
+
]);
|
|
1091
|
+
function tableMd(data, align) {
|
|
1092
|
+
if (data.length === 0) {
|
|
1093
|
+
throw new Error("Data can't be empty");
|
|
1094
|
+
}
|
|
1095
|
+
align = align || data[0]?.map(() => "c");
|
|
1096
|
+
const _data = data.map((arr) => "|" + arr.join("|") + "|");
|
|
1097
|
+
const secondRow = "|" + align?.map((s) => alignString.get(s)).join("|") + "|";
|
|
1098
|
+
return _data.shift() + NEW_LINE + secondRow + NEW_LINE + _data.join(NEW_LINE);
|
|
1099
|
+
}
|
|
1100
|
+
function tableHtml(data) {
|
|
1101
|
+
if (data.length === 0) {
|
|
1102
|
+
throw new Error("Data can't be empty");
|
|
1103
|
+
}
|
|
1104
|
+
const _data = data.map((arr, index) => {
|
|
1105
|
+
if (index === 0) {
|
|
1106
|
+
return "<tr>" + arr.map((s) => `<th>${s}</th>`).join("") + "</tr>";
|
|
1107
|
+
}
|
|
1108
|
+
return "<tr>" + arr.map((s) => `<td>${s}</td>`).join("") + "</tr>";
|
|
1109
|
+
});
|
|
1110
|
+
return "<table>" + _data.join("") + "</table>";
|
|
1111
|
+
}
|
|
1112
|
+
|
|
1113
|
+
// packages/utils/src/lib/reports/generate-md-report.ts
|
|
1114
|
+
function generateMdReport(report, commitData) {
|
|
1092
1115
|
let md = reportToHeaderSection() + NEW_LINE;
|
|
1093
1116
|
md += reportToOverviewSection(report) + NEW_LINE + NEW_LINE;
|
|
1094
1117
|
md += reportToCategoriesSection(report) + NEW_LINE + NEW_LINE;
|
|
@@ -1269,14 +1292,14 @@ function getAuditResult(audit, isHtml = false) {
|
|
|
1269
1292
|
return isHtml ? `<b>${displayValue || value}</b>` : style(String(displayValue || value));
|
|
1270
1293
|
}
|
|
1271
1294
|
|
|
1272
|
-
// packages/utils/src/lib/
|
|
1295
|
+
// packages/utils/src/lib/reports/generate-stdout-summary.ts
|
|
1273
1296
|
import cliui from "@isaacs/cliui";
|
|
1274
1297
|
import chalk3 from "chalk";
|
|
1275
1298
|
import Table from "cli-table3";
|
|
1276
1299
|
function addLine(line = "") {
|
|
1277
1300
|
return line + NEW_LINE;
|
|
1278
1301
|
}
|
|
1279
|
-
function
|
|
1302
|
+
function generateStdoutSummary(report) {
|
|
1280
1303
|
let output = "";
|
|
1281
1304
|
output += addLine(reportToHeaderSection2(report));
|
|
1282
1305
|
output += addLine();
|
|
@@ -1369,7 +1392,7 @@ function deepClone(obj) {
|
|
|
1369
1392
|
return cloned;
|
|
1370
1393
|
}
|
|
1371
1394
|
|
|
1372
|
-
// packages/utils/src/lib/scoring.ts
|
|
1395
|
+
// packages/utils/src/lib/reports/scoring.ts
|
|
1373
1396
|
function calculateScore(refs, scoreFn) {
|
|
1374
1397
|
const { numerator, denominator } = refs.reduce(
|
|
1375
1398
|
(acc, ref) => {
|
|
@@ -1437,27 +1460,7 @@ function scoreReport(report) {
|
|
|
1437
1460
|
return scoredReport;
|
|
1438
1461
|
}
|
|
1439
1462
|
|
|
1440
|
-
// packages/utils/src/lib/
|
|
1441
|
-
function getLogVerbose(verbose) {
|
|
1442
|
-
return (...args) => {
|
|
1443
|
-
if (verbose) {
|
|
1444
|
-
console.info(...args);
|
|
1445
|
-
}
|
|
1446
|
-
};
|
|
1447
|
-
}
|
|
1448
|
-
function getExecVerbose(verbose) {
|
|
1449
|
-
return (fn) => {
|
|
1450
|
-
if (verbose) {
|
|
1451
|
-
fn();
|
|
1452
|
-
}
|
|
1453
|
-
};
|
|
1454
|
-
}
|
|
1455
|
-
var verboseUtils = (verbose) => ({
|
|
1456
|
-
log: getLogVerbose(verbose),
|
|
1457
|
-
exec: getExecVerbose(verbose)
|
|
1458
|
-
});
|
|
1459
|
-
|
|
1460
|
-
// packages/utils/src/lib/sort-report.ts
|
|
1463
|
+
// packages/utils/src/lib/reports/sorting.ts
|
|
1461
1464
|
function sortReport(report) {
|
|
1462
1465
|
const { categories, plugins } = report;
|
|
1463
1466
|
const sortedCategories = categories.map((category) => {
|
|
@@ -1507,6 +1510,26 @@ function sortReport(report) {
|
|
|
1507
1510
|
};
|
|
1508
1511
|
}
|
|
1509
1512
|
|
|
1513
|
+
// packages/utils/src/lib/verbose-utils.ts
|
|
1514
|
+
function getLogVerbose(verbose) {
|
|
1515
|
+
return (...args) => {
|
|
1516
|
+
if (verbose) {
|
|
1517
|
+
console.info(...args);
|
|
1518
|
+
}
|
|
1519
|
+
};
|
|
1520
|
+
}
|
|
1521
|
+
function getExecVerbose(verbose) {
|
|
1522
|
+
return (fn) => {
|
|
1523
|
+
if (verbose) {
|
|
1524
|
+
fn();
|
|
1525
|
+
}
|
|
1526
|
+
};
|
|
1527
|
+
}
|
|
1528
|
+
var verboseUtils = (verbose) => ({
|
|
1529
|
+
log: getLogVerbose(verbose),
|
|
1530
|
+
exec: getExecVerbose(verbose)
|
|
1531
|
+
});
|
|
1532
|
+
|
|
1510
1533
|
// packages/core/src/lib/implementation/persist.ts
|
|
1511
1534
|
var PersistDirError = class extends Error {
|
|
1512
1535
|
constructor(outputDir) {
|
|
@@ -1521,7 +1544,7 @@ var PersistError = class extends Error {
|
|
|
1521
1544
|
async function persistReport(report, options) {
|
|
1522
1545
|
const { outputDir, filename, format } = options;
|
|
1523
1546
|
const sortedScoredReport = sortReport(scoreReport(report));
|
|
1524
|
-
console.info(
|
|
1547
|
+
console.info(generateStdoutSummary(sortedScoredReport));
|
|
1525
1548
|
const results = [];
|
|
1526
1549
|
if (format.includes("json")) {
|
|
1527
1550
|
results.push({
|
|
@@ -1534,7 +1557,7 @@ async function persistReport(report, options) {
|
|
|
1534
1557
|
validateCommitData(commitData);
|
|
1535
1558
|
results.push({
|
|
1536
1559
|
format: "md",
|
|
1537
|
-
content:
|
|
1560
|
+
content: generateMdReport(sortedScoredReport, commitData)
|
|
1538
1561
|
});
|
|
1539
1562
|
}
|
|
1540
1563
|
if (!existsSync(outputDir)) {
|
|
@@ -1679,7 +1702,7 @@ function auditOutputsCorrelateWithPluginOutput(auditOutputs, pluginConfigAudits)
|
|
|
1679
1702
|
|
|
1680
1703
|
// packages/core/package.json
|
|
1681
1704
|
var name = "@code-pushup/core";
|
|
1682
|
-
var version = "0.8.
|
|
1705
|
+
var version = "0.8.12";
|
|
1683
1706
|
|
|
1684
1707
|
// packages/core/src/lib/implementation/collect.ts
|
|
1685
1708
|
async function collect(options) {
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { CategoryConfigRefType, IssueSourceType, IssueSeverity as PortalIssueSeverity } from '@code-pushup/portal-client';
|
|
2
2
|
import { Report } from '@code-pushup/models';
|
|
3
3
|
export declare function jsonToGql(report: Report): {
|
|
4
|
-
packageName: string
|
|
5
|
-
packageVersion: string
|
|
4
|
+
packageName: string;
|
|
5
|
+
packageVersion: string;
|
|
6
6
|
commandStartDate: string;
|
|
7
7
|
commandDuration: number;
|
|
8
8
|
plugins: {
|
|
@@ -38,7 +38,7 @@ export declare function jsonToGql(report: Report): {
|
|
|
38
38
|
weight: number;
|
|
39
39
|
}[];
|
|
40
40
|
}[] | undefined;
|
|
41
|
-
icon: "slug" | "search" | "blink" | "key" | "folder-robot" | "folder-src" | "folder-dist" | "folder-css" | "folder-sass" | "folder-images" | "folder-scripts" | "folder-node" | "folder-javascript" | "folder-json" | "folder-font" | "folder-bower" | "folder-test" | "folder-jinja" | "folder-markdown" | "folder-php" | "folder-phpmailer" | "folder-sublime" | "folder-docs" | "folder-git" | "folder-github" | "folder-gitlab" | "folder-vscode" | "folder-views" | "folder-vue" | "folder-vuepress" | "folder-expo" | "folder-config" | "folder-i18n" | "folder-components" | "folder-verdaccio" | "folder-aurelia" | "folder-resource" | "folder-lib" | "folder-theme" | "folder-webpack" | "folder-global" | "folder-public" | "folder-include" | "folder-docker" | "folder-database" | "folder-log" | "folder-target" | "folder-temp" | "folder-aws" | "folder-audio" | "folder-video" | "folder-kubernetes" | "folder-import" | "folder-export" | "folder-wakatime" | "folder-circleci" | "folder-wordpress" | "folder-gradle" | "folder-coverage" | "folder-class" | "folder-other" | "folder-lua" | "folder-typescript" | "folder-graphql" | "folder-routes" | "folder-ci" | "folder-benchmark" | "folder-messages" | "folder-less" | "folder-gulp" | "folder-python" | "folder-mojo" | "folder-moon" | "folder-debug" | "folder-fastlane" | "folder-plugin" | "folder-middleware" | "folder-controller" | "folder-ansible" | "folder-server" | "folder-client" | "folder-tasks" | "folder-android" | "folder-ios" | "folder-upload" | "folder-download" | "folder-tools" | "folder-helper" | "folder-serverless" | "folder-api" | "folder-app" | "folder-apollo" | "folder-archive" | "folder-batch" | "folder-buildkite" | "folder-cluster" | "folder-command" | "folder-constant" | "folder-container" | "folder-content" | "folder-context" | "folder-core" | "folder-delta" | "folder-dump" | "folder-examples" | "folder-environment" | "folder-functions" | "folder-generator" | "folder-hook" | "folder-job" | "folder-keys" | "folder-layout" | "folder-mail" | "folder-mappings" | "folder-meta" | "folder-changesets" | "folder-packages" | "folder-shared" | "folder-shader" | "folder-stack" | "folder-template" | "folder-utils" | "folder-supabase" | "folder-private" | "folder-linux" | "folder-windows" | "folder-macos" | "folder-error" | "folder-event" | "folder-secure" | "folder-custom" | "folder-mock" | "folder-syntax" | "folder-vm" | "folder-stylus" | "folder-flow" | "folder-rules" | "folder-review" | "folder-animation" | "folder-guard" | "folder-prisma" | "folder-pipe" | "folder-svg" | "folder-terraform" | "folder-mobile" | "folder-stencil" | "folder-firebase" | "folder-svelte" | "folder-update" | "folder-intellij" | "folder-azure-pipelines" | "folder-mjml" | "folder-admin" | "folder-scala" | "folder-connection" | "folder-quasar" | "folder-next" | "folder-cobol" | "folder-yarn" | "folder-husky" | "folder-storybook" | "folder-base" | "folder-cart" | "folder-home" | "folder-project" | "folder-interface" | "folder-netlify" | "folder-enum" | "folder-contract" | "folder-queue" | "folder-vercel" | "folder-cypress" | "folder-decorators" | "folder-java" | "folder-resolver" | "folder-angular" | "folder-unity" | "folder-pdf" | "folder-proto" | "folder-plastic" | "folder-gamemaker" | "folder-mercurial" | "folder-godot" | "folder-lottie" | "folder-taskfile" | "folder-robot-open" | "folder-src-open" | "folder-dist-open" | "folder-css-open" | "folder-sass-open" | "folder-images-open" | "folder-scripts-open" | "folder-node-open" | "folder-javascript-open" | "folder-json-open" | "folder-font-open" | "folder-bower-open" | "folder-test-open" | "folder-jinja-open" | "folder-markdown-open" | "folder-php-open" | "folder-phpmailer-open" | "folder-sublime-open" | "folder-docs-open" | "folder-git-open" | "folder-github-open" | "folder-gitlab-open" | "folder-vscode-open" | "folder-views-open" | "folder-vue-open" | "folder-vuepress-open" | "folder-expo-open" | "folder-config-open" | "folder-i18n-open" | "folder-components-open" | "folder-verdaccio-open" | "folder-aurelia-open" | "folder-resource-open" | "folder-lib-open" | "folder-theme-open" | "folder-webpack-open" | "folder-global-open" | "folder-public-open" | "folder-include-open" | "folder-docker-open" | "folder-database-open" | "folder-log-open" | "folder-target-open" | "folder-temp-open" | "folder-aws-open" | "folder-audio-open" | "folder-video-open" | "folder-kubernetes-open" | "folder-import-open" | "folder-export-open" | "folder-wakatime-open" | "folder-circleci-open" | "folder-wordpress-open" | "folder-gradle-open" | "folder-coverage-open" | "folder-class-open" | "folder-other-open" | "folder-lua-open" | "folder-typescript-open" | "folder-graphql-open" | "folder-routes-open" | "folder-ci-open" | "folder-benchmark-open" | "folder-messages-open" | "folder-less-open" | "folder-gulp-open" | "folder-python-open" | "folder-mojo-open" | "folder-moon-open" | "folder-debug-open" | "folder-fastlane-open" | "folder-plugin-open" | "folder-middleware-open" | "folder-controller-open" | "folder-ansible-open" | "folder-server-open" | "folder-client-open" | "folder-tasks-open" | "folder-android-open" | "folder-ios-open" | "folder-upload-open" | "folder-download-open" | "folder-tools-open" | "folder-helper-open" | "folder-serverless-open" | "folder-api-open" | "folder-app-open" | "folder-apollo-open" | "folder-archive-open" | "folder-batch-open" | "folder-buildkite-open" | "folder-cluster-open" | "folder-command-open" | "folder-constant-open" | "folder-container-open" | "folder-content-open" | "folder-context-open" | "folder-core-open" | "folder-delta-open" | "folder-dump-open" | "folder-examples-open" | "folder-environment-open" | "folder-functions-open" | "folder-generator-open" | "folder-hook-open" | "folder-job-open" | "folder-keys-open" | "folder-layout-open" | "folder-mail-open" | "folder-mappings-open" | "folder-meta-open" | "folder-changesets-open" | "folder-packages-open" | "folder-shared-open" | "folder-shader-open" | "folder-stack-open" | "folder-template-open" | "folder-utils-open" | "folder-supabase-open" | "folder-private-open" | "folder-linux-open" | "folder-windows-open" | "folder-macos-open" | "folder-error-open" | "folder-event-open" | "folder-secure-open" | "folder-custom-open" | "folder-mock-open" | "folder-syntax-open" | "folder-vm-open" | "folder-stylus-open" | "folder-flow-open" | "folder-rules-open" | "folder-review-open" | "folder-animation-open" | "folder-guard-open" | "folder-prisma-open" | "folder-pipe-open" | "folder-svg-open" | "folder-terraform-open" | "folder-mobile-open" | "folder-stencil-open" | "folder-firebase-open" | "folder-svelte-open" | "folder-update-open" | "folder-intellij-open" | "folder-azure-pipelines-open" | "folder-mjml-open" | "folder-admin-open" | "folder-scala-open" | "folder-connection-open" | "folder-quasar-open" | "folder-next-open" | "folder-cobol-open" | "folder-yarn-open" | "folder-husky-open" | "folder-storybook-open" | "folder-base-open" | "folder-cart-open" | "folder-home-open" | "folder-project-open" | "folder-interface-open" | "folder-netlify-open" | "folder-enum-open" | "folder-contract-open" | "folder-queue-open" | "folder-vercel-open" | "folder-cypress-open" | "folder-decorators-open" | "folder-java-open" | "folder-resolver-open" | "folder-angular-open" | "folder-unity-open" | "folder-pdf-open" | "folder-proto-open" | "folder-plastic-open" | "folder-gamemaker-open" | "folder-mercurial-open" | "folder-godot-open" | "folder-lottie-open" | "folder-taskfile-open" | "html" | "pug" | "markdown" | "css" | "sass" | "less" | "json" | "hjson" | "jinja" | "proto" | "sublime" | "twine" | "yaml" | "xml" | "image" | "javascript" | "react" | "react_ts" | "routing" | "settings" | "typescript-def" | "markojs" | "astro" | "pdf" | "table" | "vscode" | "visualstudio" | "database" | "kusto" | "csharp" | "qsharp" | "zip" | "vala" | "zig" | "exe" | "hex" | "java" | "jar" | "javaclass" | "c" | "h" | "cpp" | "hpp" | "objective-c" | "objective-cpp" | "rc" | "go" | "python" | "python-misc" | "url" | "console" | "powershell" | "gradle" | "word" | "certificate" | "font" | "lib" | "ruby" | "fsharp" | "swift" | "arduino" | "docker" | "tex" | "powerpoint" | "video" | "virtual" | "email" | "audio" | "coffee" | "document" | "graphql" | "rust" | "raml" | "xaml" | "haskell" | "kotlin" | "otne" | "git" | "lua" | "clojure" | "groovy" | "r" | "dart" | "dart_generated" | "actionscript" | "mxml" | "autohotkey" | "flash" | "swc" | "cmake" | "assembly" | "vue" | "ocaml" | "odin" | "javascript-map" | "css-map" | "lock" | "handlebars" | "perl" | "haxe" | "test-ts" | "test-jsx" | "test-js" | "angular" | "angular-component" | "angular-guard" | "angular-service" | "angular-pipe" | "angular-directive" | "angular-resolver" | "puppet" | "elixir" | "livescript" | "erlang" | "twig" | "julia" | "elm" | "purescript" | "smarty" | "stylus" | "reason" | "bucklescript" | "merlin" | "verilog" | "mathematica" | "wolframlanguage" | "nunjucks" | "robot" | "solidity" | "autoit" | "haml" | "yang" | "mjml" | "terraform" | "laravel" | "applescript" | "cake" | "cucumber" | "nim" | "apiblueprint" | "riot" | "vfl" | "kl" | "postcss" | "todo" | "coldfusion" | "cabal" | "nix" | "slim" | "http" | "restql" | "kivy" | "graphcool" | "sbt" | "android" | "tune" | "gitlab" | "jenkins" | "figma" | "crystal" | "drone" | "cuda" | "log" | "dotjs" | "ejs" | "wakatime" | "processing" | "storybook" | "wepy" | "hcl" | "san" | "django" | "red" | "makefile" | "foxpro" | "i18n" | "webassembly" | "jupyter" | "d" | "mdx" | "mdsvex" | "ballerina" | "racket" | "bazel" | "mint" | "velocity" | "godot" | "godot-assets" | "azure-pipelines" | "azure" | "vagrant" | "prisma" | "razor" | "abc" | "asciidoc" | "edge" | "scheme" | "lisp" | "3d" | "svg" | "svelte" | "vim" | "moonscript" | "advpl_prw" | "advpl_ptm" | "advpl_tlpp" | "advpl_include" | "disc" | "fortran" | "tcl" | "liquid" | "prolog" | "coconut" | "sketch" | "pawn" | "forth" | "uml" | "meson" | "dhall" | "sml" | "opam" | "imba" | "drawio" | "pascal" | "shaderlab" | "sas" | "nuget" | "command" | "denizenscript" | "nginx" | "minecraft" | "rescript" | "rescript-interface" | "brainfuck" | "bicep" | "cobol" | "grain" | "lolcode" | "idris" | "pipeline" | "opa" | "windicss" | "scala" | "lilypond" | "vlang" | "chess" | "gemini" | "tsconfig" | "tauri" | "jsconfig" | "ada" | "horusec" | "coala" | "dinophp" | "teal" | "template" | "shader" | "siyuan" | "ndst" | "tobi" | "gleam" | "steadybit" | "tree" | "cadence" | "antlr" | "stylable" | "pinejs" | "taskfile" | "gamemaker" | "tldraw" | "typst" | "mermaid" | "mojo" | "roblox" | "spwn" | "templ" | "chrome" | "stan" | "abap" | "lottie" | "apps-script" | "playwright" | "go-mod" | "gemfile" | "rubocop" | "rspec" | "semgrep" | "vue-config" | "nuxt" | "vercel" | "verdaccio" | "next" | "remix" | "posthtml" | "webpack" | "ionic" | "gulp" | "nodejs" | "npm" | "yarn" | "turborepo" | "babel" | "blitz" | "contributing" | "readme" | "changelog" | "architecture" | "credits" | "authors" | "flow" | "favicon" | "karma" | "bithound" | "svgo" | "appveyor" | "travis" | "codecov" | "sonarcloud" | "protractor" | "fusebox" | "heroku" | "editorconfig" | "bower" | "eslint" | "conduct" | "watchman" | "aurelia" | "auto" | "mocha" | "firebase" | "rollup" | "hack" | "hardhat" | "stylelint" | "code-climate" | "prettier" | "renovate" | "apollo" | "nodemon" | "webhint" | "browserlist" | "snyk" | "sequelize" | "gatsby" | "circleci" | "cloudfoundry" | "grunt" | "jest" | "fastlane" | "helm" | "wallaby" | "stencil" | "semantic-release" | "bitbucket" | "istanbul" | "tailwindcss" | "buildkite" | "netlify" | "nest" | "moon" | "percy" | "gitpod" | "codeowners" | "gcp" | "husky" | "tilt" | "capacitor" | "adonis" | "commitlint" | "buck" | "nrwl" | "dune" | "roadmap" | "stryker" | "modernizr" | "stitches" | "replit" | "snowpack" | "quasar" | "dependabot" | "vite" | "vitest" | "lerna" | "textlint" | "sentry" | "phpunit" | "php-cs-fixer" | "robots" | "maven" | "serverless" | "supabase" | "ember" | "poetry" | "parcel" | "astyle" | "lighthouse" | "svgr" | "rome" | "cypress" | "plop" | "tobimake" | "pnpm" | "gridsome" | "caddy" | "bun" | "nano-staged" | "craco" | "mercurial" | "deno" | "plastic" | "unocss" | "ifanr-cloud" | "concourse" | "werf" | "panda" | "biome" | "esbuild" | "puppeteer" | "kubernetes" | "matlab" | "diff" | "typescript" | "php" | "salesforce" | "blink_light" | "jinja_light" | "crystal_light" | "drone_light" | "wakatime_light" | "hcl_light" | "uml_light" | "chess_light" | "tldraw_light" | "rubocop_light" | "vercel_light" | "next_light" | "remix_light" | "turborepo_light" | "auto_light" | "stylelint_light" | "code-climate_light" | "browserlist_light" | "circleci_light" | "semantic-release_light" | "netlify_light" | "stitches_light" | "snowpack_light" | "pnpm_light" | "bun_light" | "nano-staged_light" | "deno_light" | "folder-jinja_light" | "folder-intellij_light" | "folder-jinja-open_light" | "folder-intellij-open_light" | "file" | "folder" | "folder-open" | "folder-root" | "folder-root-open" | "php_elephant" | "php_elephant_pink" | "go_gopher" | "nodejs_alt" | "silverstripe";
|
|
41
|
+
icon: "slug" | "file" | "command" | "search" | "blink" | "key" | "folder-robot" | "folder-src" | "folder-dist" | "folder-css" | "folder-sass" | "folder-images" | "folder-scripts" | "folder-node" | "folder-javascript" | "folder-json" | "folder-font" | "folder-bower" | "folder-test" | "folder-jinja" | "folder-markdown" | "folder-php" | "folder-phpmailer" | "folder-sublime" | "folder-docs" | "folder-git" | "folder-github" | "folder-gitlab" | "folder-vscode" | "folder-views" | "folder-vue" | "folder-vuepress" | "folder-expo" | "folder-config" | "folder-i18n" | "folder-components" | "folder-verdaccio" | "folder-aurelia" | "folder-resource" | "folder-lib" | "folder-theme" | "folder-webpack" | "folder-global" | "folder-public" | "folder-include" | "folder-docker" | "folder-database" | "folder-log" | "folder-target" | "folder-temp" | "folder-aws" | "folder-audio" | "folder-video" | "folder-kubernetes" | "folder-import" | "folder-export" | "folder-wakatime" | "folder-circleci" | "folder-wordpress" | "folder-gradle" | "folder-coverage" | "folder-class" | "folder-other" | "folder-lua" | "folder-typescript" | "folder-graphql" | "folder-routes" | "folder-ci" | "folder-benchmark" | "folder-messages" | "folder-less" | "folder-gulp" | "folder-python" | "folder-mojo" | "folder-moon" | "folder-debug" | "folder-fastlane" | "folder-plugin" | "folder-middleware" | "folder-controller" | "folder-ansible" | "folder-server" | "folder-client" | "folder-tasks" | "folder-android" | "folder-ios" | "folder-upload" | "folder-download" | "folder-tools" | "folder-helper" | "folder-serverless" | "folder-api" | "folder-app" | "folder-apollo" | "folder-archive" | "folder-batch" | "folder-buildkite" | "folder-cluster" | "folder-command" | "folder-constant" | "folder-container" | "folder-content" | "folder-context" | "folder-core" | "folder-delta" | "folder-dump" | "folder-examples" | "folder-environment" | "folder-functions" | "folder-generator" | "folder-hook" | "folder-job" | "folder-keys" | "folder-layout" | "folder-mail" | "folder-mappings" | "folder-meta" | "folder-changesets" | "folder-packages" | "folder-shared" | "folder-shader" | "folder-stack" | "folder-template" | "folder-utils" | "folder-supabase" | "folder-private" | "folder-linux" | "folder-windows" | "folder-macos" | "folder-error" | "folder-event" | "folder-secure" | "folder-custom" | "folder-mock" | "folder-syntax" | "folder-vm" | "folder-stylus" | "folder-flow" | "folder-rules" | "folder-review" | "folder-animation" | "folder-guard" | "folder-prisma" | "folder-pipe" | "folder-svg" | "folder-terraform" | "folder-mobile" | "folder-stencil" | "folder-firebase" | "folder-svelte" | "folder-update" | "folder-intellij" | "folder-azure-pipelines" | "folder-mjml" | "folder-admin" | "folder-scala" | "folder-connection" | "folder-quasar" | "folder-next" | "folder-cobol" | "folder-yarn" | "folder-husky" | "folder-storybook" | "folder-base" | "folder-cart" | "folder-home" | "folder-project" | "folder-interface" | "folder-netlify" | "folder-enum" | "folder-contract" | "folder-queue" | "folder-vercel" | "folder-cypress" | "folder-decorators" | "folder-java" | "folder-resolver" | "folder-angular" | "folder-unity" | "folder-pdf" | "folder-proto" | "folder-plastic" | "folder-gamemaker" | "folder-mercurial" | "folder-godot" | "folder-lottie" | "folder-taskfile" | "folder-robot-open" | "folder-src-open" | "folder-dist-open" | "folder-css-open" | "folder-sass-open" | "folder-images-open" | "folder-scripts-open" | "folder-node-open" | "folder-javascript-open" | "folder-json-open" | "folder-font-open" | "folder-bower-open" | "folder-test-open" | "folder-jinja-open" | "folder-markdown-open" | "folder-php-open" | "folder-phpmailer-open" | "folder-sublime-open" | "folder-docs-open" | "folder-git-open" | "folder-github-open" | "folder-gitlab-open" | "folder-vscode-open" | "folder-views-open" | "folder-vue-open" | "folder-vuepress-open" | "folder-expo-open" | "folder-config-open" | "folder-i18n-open" | "folder-components-open" | "folder-verdaccio-open" | "folder-aurelia-open" | "folder-resource-open" | "folder-lib-open" | "folder-theme-open" | "folder-webpack-open" | "folder-global-open" | "folder-public-open" | "folder-include-open" | "folder-docker-open" | "folder-database-open" | "folder-log-open" | "folder-target-open" | "folder-temp-open" | "folder-aws-open" | "folder-audio-open" | "folder-video-open" | "folder-kubernetes-open" | "folder-import-open" | "folder-export-open" | "folder-wakatime-open" | "folder-circleci-open" | "folder-wordpress-open" | "folder-gradle-open" | "folder-coverage-open" | "folder-class-open" | "folder-other-open" | "folder-lua-open" | "folder-typescript-open" | "folder-graphql-open" | "folder-routes-open" | "folder-ci-open" | "folder-benchmark-open" | "folder-messages-open" | "folder-less-open" | "folder-gulp-open" | "folder-python-open" | "folder-mojo-open" | "folder-moon-open" | "folder-debug-open" | "folder-fastlane-open" | "folder-plugin-open" | "folder-middleware-open" | "folder-controller-open" | "folder-ansible-open" | "folder-server-open" | "folder-client-open" | "folder-tasks-open" | "folder-android-open" | "folder-ios-open" | "folder-upload-open" | "folder-download-open" | "folder-tools-open" | "folder-helper-open" | "folder-serverless-open" | "folder-api-open" | "folder-app-open" | "folder-apollo-open" | "folder-archive-open" | "folder-batch-open" | "folder-buildkite-open" | "folder-cluster-open" | "folder-command-open" | "folder-constant-open" | "folder-container-open" | "folder-content-open" | "folder-context-open" | "folder-core-open" | "folder-delta-open" | "folder-dump-open" | "folder-examples-open" | "folder-environment-open" | "folder-functions-open" | "folder-generator-open" | "folder-hook-open" | "folder-job-open" | "folder-keys-open" | "folder-layout-open" | "folder-mail-open" | "folder-mappings-open" | "folder-meta-open" | "folder-changesets-open" | "folder-packages-open" | "folder-shared-open" | "folder-shader-open" | "folder-stack-open" | "folder-template-open" | "folder-utils-open" | "folder-supabase-open" | "folder-private-open" | "folder-linux-open" | "folder-windows-open" | "folder-macos-open" | "folder-error-open" | "folder-event-open" | "folder-secure-open" | "folder-custom-open" | "folder-mock-open" | "folder-syntax-open" | "folder-vm-open" | "folder-stylus-open" | "folder-flow-open" | "folder-rules-open" | "folder-review-open" | "folder-animation-open" | "folder-guard-open" | "folder-prisma-open" | "folder-pipe-open" | "folder-svg-open" | "folder-terraform-open" | "folder-mobile-open" | "folder-stencil-open" | "folder-firebase-open" | "folder-svelte-open" | "folder-update-open" | "folder-intellij-open" | "folder-azure-pipelines-open" | "folder-mjml-open" | "folder-admin-open" | "folder-scala-open" | "folder-connection-open" | "folder-quasar-open" | "folder-next-open" | "folder-cobol-open" | "folder-yarn-open" | "folder-husky-open" | "folder-storybook-open" | "folder-base-open" | "folder-cart-open" | "folder-home-open" | "folder-project-open" | "folder-interface-open" | "folder-netlify-open" | "folder-enum-open" | "folder-contract-open" | "folder-queue-open" | "folder-vercel-open" | "folder-cypress-open" | "folder-decorators-open" | "folder-java-open" | "folder-resolver-open" | "folder-angular-open" | "folder-unity-open" | "folder-pdf-open" | "folder-proto-open" | "folder-plastic-open" | "folder-gamemaker-open" | "folder-mercurial-open" | "folder-godot-open" | "folder-lottie-open" | "folder-taskfile-open" | "html" | "pug" | "markdown" | "css" | "sass" | "less" | "json" | "hjson" | "jinja" | "proto" | "sublime" | "twine" | "yaml" | "xml" | "image" | "javascript" | "react" | "react_ts" | "routing" | "settings" | "typescript-def" | "markojs" | "astro" | "pdf" | "table" | "vscode" | "visualstudio" | "database" | "kusto" | "csharp" | "qsharp" | "zip" | "vala" | "zig" | "exe" | "hex" | "java" | "jar" | "javaclass" | "c" | "h" | "cpp" | "hpp" | "objective-c" | "objective-cpp" | "rc" | "go" | "python" | "python-misc" | "url" | "console" | "powershell" | "gradle" | "word" | "certificate" | "font" | "lib" | "ruby" | "fsharp" | "swift" | "arduino" | "docker" | "tex" | "powerpoint" | "video" | "virtual" | "email" | "audio" | "coffee" | "document" | "graphql" | "rust" | "raml" | "xaml" | "haskell" | "kotlin" | "otne" | "git" | "lua" | "clojure" | "groovy" | "r" | "dart" | "dart_generated" | "actionscript" | "mxml" | "autohotkey" | "flash" | "swc" | "cmake" | "assembly" | "vue" | "ocaml" | "odin" | "javascript-map" | "css-map" | "lock" | "handlebars" | "perl" | "haxe" | "test-ts" | "test-jsx" | "test-js" | "angular" | "angular-component" | "angular-guard" | "angular-service" | "angular-pipe" | "angular-directive" | "angular-resolver" | "puppet" | "elixir" | "livescript" | "erlang" | "twig" | "julia" | "elm" | "purescript" | "smarty" | "stylus" | "reason" | "bucklescript" | "merlin" | "verilog" | "mathematica" | "wolframlanguage" | "nunjucks" | "robot" | "solidity" | "autoit" | "haml" | "yang" | "mjml" | "terraform" | "laravel" | "applescript" | "cake" | "cucumber" | "nim" | "apiblueprint" | "riot" | "vfl" | "kl" | "postcss" | "todo" | "coldfusion" | "cabal" | "nix" | "slim" | "http" | "restql" | "kivy" | "graphcool" | "sbt" | "android" | "tune" | "gitlab" | "jenkins" | "figma" | "crystal" | "drone" | "cuda" | "log" | "dotjs" | "ejs" | "wakatime" | "processing" | "storybook" | "wepy" | "hcl" | "san" | "django" | "red" | "makefile" | "foxpro" | "i18n" | "webassembly" | "jupyter" | "d" | "mdx" | "mdsvex" | "ballerina" | "racket" | "bazel" | "mint" | "velocity" | "godot" | "godot-assets" | "azure-pipelines" | "azure" | "vagrant" | "prisma" | "razor" | "abc" | "asciidoc" | "edge" | "scheme" | "lisp" | "3d" | "svg" | "svelte" | "vim" | "moonscript" | "advpl_prw" | "advpl_ptm" | "advpl_tlpp" | "advpl_include" | "disc" | "fortran" | "tcl" | "liquid" | "prolog" | "coconut" | "sketch" | "pawn" | "forth" | "uml" | "meson" | "dhall" | "sml" | "opam" | "imba" | "drawio" | "pascal" | "shaderlab" | "sas" | "nuget" | "denizenscript" | "nginx" | "minecraft" | "rescript" | "rescript-interface" | "brainfuck" | "bicep" | "cobol" | "grain" | "lolcode" | "idris" | "pipeline" | "opa" | "windicss" | "scala" | "lilypond" | "vlang" | "chess" | "gemini" | "tsconfig" | "tauri" | "jsconfig" | "ada" | "horusec" | "coala" | "dinophp" | "teal" | "template" | "shader" | "siyuan" | "ndst" | "tobi" | "gleam" | "steadybit" | "tree" | "cadence" | "antlr" | "stylable" | "pinejs" | "taskfile" | "gamemaker" | "tldraw" | "typst" | "mermaid" | "mojo" | "roblox" | "spwn" | "templ" | "chrome" | "stan" | "abap" | "lottie" | "apps-script" | "playwright" | "go-mod" | "gemfile" | "rubocop" | "rspec" | "semgrep" | "vue-config" | "nuxt" | "vercel" | "verdaccio" | "next" | "remix" | "posthtml" | "webpack" | "ionic" | "gulp" | "nodejs" | "npm" | "yarn" | "turborepo" | "babel" | "blitz" | "contributing" | "readme" | "changelog" | "architecture" | "credits" | "authors" | "flow" | "favicon" | "karma" | "bithound" | "svgo" | "appveyor" | "travis" | "codecov" | "sonarcloud" | "protractor" | "fusebox" | "heroku" | "editorconfig" | "bower" | "eslint" | "conduct" | "watchman" | "aurelia" | "auto" | "mocha" | "firebase" | "rollup" | "hack" | "hardhat" | "stylelint" | "code-climate" | "prettier" | "renovate" | "apollo" | "nodemon" | "webhint" | "browserlist" | "snyk" | "sequelize" | "gatsby" | "circleci" | "cloudfoundry" | "grunt" | "jest" | "fastlane" | "helm" | "wallaby" | "stencil" | "semantic-release" | "bitbucket" | "istanbul" | "tailwindcss" | "buildkite" | "netlify" | "nest" | "moon" | "percy" | "gitpod" | "codeowners" | "gcp" | "husky" | "tilt" | "capacitor" | "adonis" | "commitlint" | "buck" | "nrwl" | "dune" | "roadmap" | "stryker" | "modernizr" | "stitches" | "replit" | "snowpack" | "quasar" | "dependabot" | "vite" | "vitest" | "lerna" | "textlint" | "sentry" | "phpunit" | "php-cs-fixer" | "robots" | "maven" | "serverless" | "supabase" | "ember" | "poetry" | "parcel" | "astyle" | "lighthouse" | "svgr" | "rome" | "cypress" | "plop" | "tobimake" | "pnpm" | "gridsome" | "caddy" | "bun" | "nano-staged" | "craco" | "mercurial" | "deno" | "plastic" | "unocss" | "ifanr-cloud" | "concourse" | "werf" | "panda" | "biome" | "esbuild" | "puppeteer" | "kubernetes" | "matlab" | "diff" | "typescript" | "php" | "salesforce" | "blink_light" | "jinja_light" | "crystal_light" | "drone_light" | "wakatime_light" | "hcl_light" | "uml_light" | "chess_light" | "tldraw_light" | "rubocop_light" | "vercel_light" | "next_light" | "remix_light" | "turborepo_light" | "auto_light" | "stylelint_light" | "code-climate_light" | "browserlist_light" | "circleci_light" | "semantic-release_light" | "netlify_light" | "stitches_light" | "snowpack_light" | "pnpm_light" | "bun_light" | "nano-staged_light" | "deno_light" | "folder-jinja_light" | "folder-intellij_light" | "folder-jinja-open_light" | "folder-intellij-open_light" | "folder" | "folder-open" | "folder-root" | "folder-root-open" | "php_elephant" | "php_elephant_pink" | "go_gopher" | "nodejs_alt" | "silverstripe";
|
|
42
42
|
slug: string;
|
|
43
43
|
title: string;
|
|
44
44
|
packageName: string | undefined;
|