@code-pushup/utils 0.56.0 → 0.57.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/package.json +12 -7
- package/src/index.d.ts +30 -29
- package/src/index.js +30 -0
- package/src/index.js.map +1 -0
- package/src/lib/diff.js +38 -0
- package/src/lib/diff.js.map +1 -0
- package/src/lib/errors.js +14 -0
- package/src/lib/errors.js.map +1 -0
- package/src/lib/execute-process.d.ts +0 -1
- package/src/lib/execute-process.js +101 -0
- package/src/lib/execute-process.js.map +1 -0
- package/src/lib/file-system.d.ts +5 -5
- package/src/lib/file-system.js +113 -0
- package/src/lib/file-system.js.map +1 -0
- package/src/lib/filter.js +10 -0
- package/src/lib/filter.js.map +1 -0
- package/src/lib/formatting.js +83 -0
- package/src/lib/formatting.js.map +1 -0
- package/src/lib/git/git.commits-and-tags.js +148 -0
- package/src/lib/git/git.commits-and-tags.js.map +1 -0
- package/src/lib/git/git.d.ts +2 -2
- package/src/lib/git/git.js +58 -0
- package/src/lib/git/git.js.map +1 -0
- package/src/lib/group-by-status.js +6 -0
- package/src/lib/group-by-status.js.map +1 -0
- package/src/lib/guards.d.ts +2 -0
- package/src/lib/guards.js +10 -0
- package/src/lib/guards.js.map +1 -0
- package/src/lib/log-results.js +28 -0
- package/src/lib/log-results.js.map +1 -0
- package/src/lib/logging.js +33 -0
- package/src/lib/logging.js.map +1 -0
- package/src/lib/merge-configs.js +104 -0
- package/src/lib/merge-configs.js.map +1 -0
- package/src/lib/progress.js +57 -0
- package/src/lib/progress.js.map +1 -0
- package/src/lib/reports/constants.js +19 -0
- package/src/lib/reports/constants.js.map +1 -0
- package/src/lib/reports/environment-type.d.ts +1 -1
- package/src/lib/reports/environment-type.js +17 -0
- package/src/lib/reports/environment-type.js.map +1 -0
- package/src/lib/reports/flatten-plugins.js +8 -0
- package/src/lib/reports/flatten-plugins.js.map +1 -0
- package/src/lib/reports/formatting.d.ts +1 -1
- package/src/lib/reports/formatting.js +105 -0
- package/src/lib/reports/formatting.js.map +1 -0
- package/src/lib/reports/generate-md-report-categoy-section.d.ts +1 -1
- package/src/lib/reports/generate-md-report-categoy-section.js +63 -0
- package/src/lib/reports/generate-md-report-categoy-section.js.map +1 -0
- package/src/lib/reports/generate-md-report.d.ts +1 -1
- package/src/lib/reports/generate-md-report.js +116 -0
- package/src/lib/reports/generate-md-report.js.map +1 -0
- package/src/lib/reports/generate-md-reports-diff-utils.d.ts +1 -1
- package/src/lib/reports/generate-md-reports-diff-utils.js +117 -0
- package/src/lib/reports/generate-md-reports-diff-utils.js.map +1 -0
- package/src/lib/reports/generate-md-reports-diff.d.ts +1 -1
- package/src/lib/reports/generate-md-reports-diff.js +158 -0
- package/src/lib/reports/generate-md-reports-diff.js.map +1 -0
- package/src/lib/reports/load-report.js +15 -0
- package/src/lib/reports/load-report.js.map +1 -0
- package/src/lib/reports/log-stdout-summary.d.ts +1 -1
- package/src/lib/reports/log-stdout-summary.js +102 -0
- package/src/lib/reports/log-stdout-summary.js.map +1 -0
- package/src/lib/reports/scoring.d.ts +1 -1
- package/src/lib/reports/scoring.js +78 -0
- package/src/lib/reports/scoring.js.map +1 -0
- package/src/lib/reports/sorting.d.ts +1 -1
- package/src/lib/reports/sorting.js +91 -0
- package/src/lib/reports/sorting.js.map +1 -0
- package/src/lib/reports/types.js +7 -0
- package/src/lib/reports/types.js.map +1 -0
- package/src/lib/reports/utils.d.ts +1 -1
- package/src/lib/reports/utils.js +209 -0
- package/src/lib/reports/utils.js.map +1 -0
- package/src/lib/semver.js +17 -0
- package/src/lib/semver.js.map +1 -0
- package/src/lib/text-formats/constants.js +14 -0
- package/src/lib/text-formats/constants.js.map +1 -0
- package/src/lib/text-formats/html/details.js +20 -0
- package/src/lib/text-formats/html/details.js.map +1 -0
- package/src/lib/text-formats/html/font-style.js +13 -0
- package/src/lib/text-formats/html/font-style.js.map +1 -0
- package/src/lib/text-formats/html/link.js +4 -0
- package/src/lib/text-formats/html/link.js.map +1 -0
- package/src/lib/text-formats/html/table.js +27 -0
- package/src/lib/text-formats/html/table.js.map +1 -0
- package/src/lib/text-formats/index.d.ts +5 -5
- package/src/lib/text-formats/index.js +14 -0
- package/src/lib/text-formats/index.js.map +1 -0
- package/src/lib/text-formats/table.js +92 -0
- package/src/lib/text-formats/table.js.map +1 -0
- package/src/lib/transform.d.ts +1 -2
- package/src/lib/transform.js +111 -0
- package/src/lib/transform.js.map +1 -0
- package/src/lib/types.d.ts +3 -3
- package/src/lib/types.js +2 -0
- package/src/lib/types.js.map +1 -0
- package/src/lib/verbose-utils.js +20 -0
- package/src/lib/verbose-utils.js.map +1 -0
- package/src/lib/zod-validation.d.ts +3 -0
- package/src/lib/zod-validation.js +22 -0
- package/src/lib/zod-validation.js.map +1 -0
- package/index.js +0 -2980
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { NEW_LINE } from '../constants.js';
|
|
2
|
+
/**
|
|
3
|
+
* <details {open}>
|
|
4
|
+
* <summary>{title}</summary>
|
|
5
|
+
*
|
|
6
|
+
* {content}
|
|
7
|
+
*
|
|
8
|
+
* <details>
|
|
9
|
+
*/
|
|
10
|
+
export function details(title, content, cfg = { open: false }) {
|
|
11
|
+
return `<details${cfg.open ? ' open' : ''}>${NEW_LINE}<summary>${title}</summary>${NEW_LINE}${
|
|
12
|
+
// ⚠️ The blank line is needed to ensure Markdown in content is rendered correctly.
|
|
13
|
+
NEW_LINE}${content}${NEW_LINE}${
|
|
14
|
+
// @TODO in the future we could consider adding it only if the content ends with a code block
|
|
15
|
+
// ⚠️ The blank line ensure Markdown in content is rendered correctly.
|
|
16
|
+
NEW_LINE}</details>${
|
|
17
|
+
// ⚠️ The blank line is needed to ensure Markdown after details is rendered correctly.
|
|
18
|
+
NEW_LINE}`;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=details.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"details.js","sourceRoot":"","sources":["../../../../../../../packages/utils/src/lib/text-formats/html/details.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C;;;;;;;GAOG;AACH,MAAM,UAAU,OAAO,CACrB,KAAa,EACb,OAAe,EACf,MAAyB,EAAE,IAAI,EAAE,KAAK,EAAE;IAExC,OAAO,WACL,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EACvB,IAAI,QAAQ,YAAY,KAAK,aAAa,QAAQ,GAAG;IACnD,mFAAmF;IACnF,QACF,GAAG,OAAO,GAAG,QAAQ,GAAG;IACtB,6FAA6F;IAC7F,sEAAsE;IACtE,QACF,aAAa;IACX,sFAAsF;IACtF,QACF,EAAE,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
const boldElement = 'b';
|
|
2
|
+
export function bold(text) {
|
|
3
|
+
return `<${boldElement}>${text}</${boldElement}>`;
|
|
4
|
+
}
|
|
5
|
+
const italicElement = 'i';
|
|
6
|
+
export function italic(text) {
|
|
7
|
+
return `<${italicElement}>${text}</${italicElement}>`;
|
|
8
|
+
}
|
|
9
|
+
const codeElement = 'code';
|
|
10
|
+
export function code(text) {
|
|
11
|
+
return `<${codeElement}>${text}</${codeElement}>`;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=font-style.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"font-style.js","sourceRoot":"","sources":["../../../../../../../packages/utils/src/lib/text-formats/html/font-style.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,GAAG,GAAG,CAAC;AACxB,MAAM,UAAU,IAAI,CAAC,IAAY;IAC/B,OAAO,IAAI,WAAW,IAAI,IAAI,KAAK,WAAW,GAAG,CAAC;AACpD,CAAC;AAED,MAAM,aAAa,GAAG,GAAG,CAAC;AAC1B,MAAM,UAAU,MAAM,CAAC,IAAY;IACjC,OAAO,IAAI,aAAa,IAAI,IAAI,KAAK,aAAa,GAAG,CAAC;AACxD,CAAC;AAED,MAAM,WAAW,GAAG,MAAM,CAAC;AAC3B,MAAM,UAAU,IAAI,CAAC,IAAY;IAC/B,OAAO,IAAI,WAAW,IAAI,IAAI,KAAK,WAAW,GAAG,CAAC;AACpD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"link.js","sourceRoot":"","sources":["../../../../../../../packages/utils/src/lib/text-formats/html/link.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,IAAI,CAAC,IAAY,EAAE,IAAa;IAC9C,OAAO,YAAY,IAAI,KAAK,IAAI,IAAI,IAAI,MAAM,CAAC;AACjD,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { NEW_LINE } from '../constants.js';
|
|
2
|
+
import { columnsToStringArray, rowToStringArray } from '../table.js';
|
|
3
|
+
function wrap(elem, content) {
|
|
4
|
+
return `<${elem}>${content}</${elem}>${NEW_LINE}`;
|
|
5
|
+
}
|
|
6
|
+
function wrapRow(content) {
|
|
7
|
+
const elem = 'tr';
|
|
8
|
+
return `<${elem}>${NEW_LINE}${content}</${elem}>${NEW_LINE}`;
|
|
9
|
+
}
|
|
10
|
+
export function table(tableData) {
|
|
11
|
+
if (tableData.rows.length === 0) {
|
|
12
|
+
throw new Error("Data can't be empty");
|
|
13
|
+
}
|
|
14
|
+
// @TODO add formatting
|
|
15
|
+
const tableHeaderCols = columnsToStringArray(tableData)
|
|
16
|
+
.map(s => wrap('th', s))
|
|
17
|
+
.join('');
|
|
18
|
+
const tableHeaderRow = wrapRow(tableHeaderCols);
|
|
19
|
+
const tableBody = rowToStringArray(tableData)
|
|
20
|
+
.map(arr => {
|
|
21
|
+
const columns = arr.map(s => wrap('td', s)).join('');
|
|
22
|
+
return wrapRow(columns);
|
|
23
|
+
})
|
|
24
|
+
.join('');
|
|
25
|
+
return wrap('table', `${NEW_LINE}${tableHeaderRow}${tableBody}`);
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=table.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table.js","sourceRoot":"","sources":["../../../../../../../packages/utils/src/lib/text-formats/html/table.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAErE,SAAS,IAAI,CAAC,IAAY,EAAE,OAAe;IACzC,OAAO,IAAI,IAAI,IAAI,OAAO,KAAK,IAAI,IAAI,QAAQ,EAAE,CAAC;AACpD,CAAC;AAED,SAAS,OAAO,CAAC,OAAe;IAC9B,MAAM,IAAI,GAAG,IAAI,CAAC;IAClB,OAAO,IAAI,IAAI,IAAI,QAAQ,GAAG,OAAO,KAAK,IAAI,IAAI,QAAQ,EAAE,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,SAAgB;IACpC,IAAI,SAAS,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACzC,CAAC;IAED,uBAAuB;IACvB,MAAM,eAAe,GAAG,oBAAoB,CAAC,SAAS,CAAC;SACpD,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;SACvB,IAAI,CAAC,EAAE,CAAC,CAAC;IACZ,MAAM,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAChD,MAAM,SAAS,GAAG,gBAAgB,CAAC,SAAS,CAAC;SAC1C,GAAG,CAAC,GAAG,CAAC,EAAE;QACT,MAAM,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACrD,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1B,CAAC,CAAC;SACD,IAAI,CAAC,EAAE,CAAC,CAAC;IAEZ,OAAO,IAAI,CAAC,OAAO,EAAE,GAAG,QAAQ,GAAG,cAAc,GAAG,SAAS,EAAE,CAAC,CAAC;AACnE,CAAC"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { details } from './html/details';
|
|
2
|
-
import { bold, code, italic } from './html/font-style';
|
|
3
|
-
import { link } from './html/link';
|
|
4
|
-
import { table } from './html/table';
|
|
5
|
-
export { NEW_LINE, SPACE, TAB, HIERARCHY } from './constants';
|
|
1
|
+
import { details } from './html/details.js';
|
|
2
|
+
import { bold, code, italic } from './html/font-style.js';
|
|
3
|
+
import { link } from './html/link.js';
|
|
4
|
+
import { table } from './html/table.js';
|
|
5
|
+
export { NEW_LINE, SPACE, TAB, HIERARCHY } from './constants.js';
|
|
6
6
|
export declare const html: {
|
|
7
7
|
bold: typeof bold;
|
|
8
8
|
italic: typeof italic;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { details } from './html/details.js';
|
|
2
|
+
import { bold, code, italic } from './html/font-style.js';
|
|
3
|
+
import { link } from './html/link.js';
|
|
4
|
+
import { table } from './html/table.js';
|
|
5
|
+
export { NEW_LINE, SPACE, TAB, HIERARCHY } from './constants.js';
|
|
6
|
+
export const html = {
|
|
7
|
+
bold,
|
|
8
|
+
italic,
|
|
9
|
+
code,
|
|
10
|
+
link,
|
|
11
|
+
details,
|
|
12
|
+
table,
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/utils/src/lib/text-formats/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAExC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEjE,MAAM,CAAC,MAAM,IAAI,GAAG;IAClB,IAAI;IACJ,MAAM;IACN,IAAI;IACJ,IAAI;IACJ,OAAO;IACP,KAAK;CACN,CAAC"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { capitalize } from '../transform.js';
|
|
2
|
+
export function rowToStringArray({ rows, columns = [] }) {
|
|
3
|
+
if (Array.isArray(rows.at(0)) && typeof columns.at(0) === 'object') {
|
|
4
|
+
throw new TypeError('Column can`t be object when rows are primitive values');
|
|
5
|
+
}
|
|
6
|
+
return rows.map(row => {
|
|
7
|
+
// row = ['100 ms', '200 ms']
|
|
8
|
+
if (Array.isArray(row)) {
|
|
9
|
+
return row.map(String);
|
|
10
|
+
}
|
|
11
|
+
// row = { prop1: '100 ms', prop2: '200 ms' }
|
|
12
|
+
const objectRow = row;
|
|
13
|
+
// columns [] || column.at(0) = 'center'
|
|
14
|
+
if (columns.length === 0 || typeof columns.at(0) === 'string') {
|
|
15
|
+
return Object.values(objectRow).map(value => value == null ? '' : String(value));
|
|
16
|
+
}
|
|
17
|
+
// column = {key: 'prop1'}
|
|
18
|
+
return columns.map(({ key }) => objectRow[key] == null ? '' : String(objectRow[key]));
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
// Determine effective columns based on the input rows and optional columns parameter
|
|
22
|
+
export function columnsToStringArray({ rows, columns = [], }) {
|
|
23
|
+
const firstRow = rows.at(0);
|
|
24
|
+
const primitiveRows = Array.isArray(firstRow);
|
|
25
|
+
if (typeof columns.at(0) === 'string' && !primitiveRows) {
|
|
26
|
+
throw new Error('invalid union type. Caught by model parsing.');
|
|
27
|
+
}
|
|
28
|
+
if (columns.length === 0) {
|
|
29
|
+
if (Array.isArray(firstRow)) {
|
|
30
|
+
return firstRow.map((_, idx) => String(idx));
|
|
31
|
+
}
|
|
32
|
+
return Object.keys(firstRow);
|
|
33
|
+
}
|
|
34
|
+
// columns = ['right', 'left']; row = ['100 ms', '200 ms'] => 1,2,3
|
|
35
|
+
if (typeof columns.at(0) === 'string') {
|
|
36
|
+
return columns.map(String);
|
|
37
|
+
}
|
|
38
|
+
// columns = [
|
|
39
|
+
// {key: 'prop1' label: 'Property 1'},
|
|
40
|
+
// {key: 'prop2'}
|
|
41
|
+
// ]; row = [ {prop1: '100 ms', prop2: '200 ms'}] => Property 1, Prop2
|
|
42
|
+
const cols = columns;
|
|
43
|
+
return cols.map(({ label, key }) => label ?? capitalize(key));
|
|
44
|
+
}
|
|
45
|
+
export function getColumnAlignmentForKeyAndIndex(targetKey, targetIdx, columns = []) {
|
|
46
|
+
const column = columns.at(targetIdx) ?? columns.find(col => col.key === targetKey);
|
|
47
|
+
if (typeof column === 'string') {
|
|
48
|
+
return column;
|
|
49
|
+
}
|
|
50
|
+
else if (typeof column === 'object') {
|
|
51
|
+
return column.align ?? 'center';
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
return 'center';
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
export function getColumnAlignmentForIndex(targetIdx, columns = []) {
|
|
58
|
+
const column = columns.at(targetIdx);
|
|
59
|
+
if (column == null) {
|
|
60
|
+
return 'center';
|
|
61
|
+
}
|
|
62
|
+
else if (typeof column === 'string') {
|
|
63
|
+
return column;
|
|
64
|
+
}
|
|
65
|
+
else if (typeof column === 'object') {
|
|
66
|
+
return column.align ?? 'center';
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
return 'center';
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
export function getColumnAlignments(tableData) {
|
|
73
|
+
const { rows, columns = [] } = tableData;
|
|
74
|
+
// this is caught by the table schema in @code-pushup/models
|
|
75
|
+
if (rows.at(0) == null) {
|
|
76
|
+
throw new Error('first row can`t be undefined.');
|
|
77
|
+
}
|
|
78
|
+
if (Array.isArray(rows.at(0))) {
|
|
79
|
+
const firstPrimitiveRow = rows.at(0);
|
|
80
|
+
return Array.from({ length: firstPrimitiveRow.length }).map((_, idx) => getColumnAlignmentForIndex(idx, columns));
|
|
81
|
+
}
|
|
82
|
+
const biggestRow = rows
|
|
83
|
+
.toSorted((a, b) => Object.keys(a).length - Object.keys(b).length)
|
|
84
|
+
.at(-1);
|
|
85
|
+
if (columns.length > 0) {
|
|
86
|
+
return columns.map((column, idx) => typeof column === 'string'
|
|
87
|
+
? column
|
|
88
|
+
: getColumnAlignmentForKeyAndIndex(column.key, idx, columns));
|
|
89
|
+
}
|
|
90
|
+
return Object.keys(biggestRow ?? {}).map(_ => 'center');
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=table.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table.js","sourceRoot":"","sources":["../../../../../../packages/utils/src/lib/text-formats/table.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,MAAM,UAAU,gBAAgB,CAAC,EAAE,IAAI,EAAE,OAAO,GAAG,EAAE,EAAS;IAC5D,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;QACnE,MAAM,IAAI,SAAS,CACjB,uDAAuD,CACxD,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;QACpB,6BAA6B;QAC7B,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACvB,OAAO,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACzB,CAAC;QAED,6CAA6C;QAC7C,MAAM,SAAS,GAAG,GAAG,CAAC;QAEtB,wCAAwC;QACxC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;YAC9D,OAAO,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAC1C,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CACnC,CAAC;QACJ,CAAC;QAED,0BAA0B;QAC1B,OAAQ,OAA+B,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,EAAU,EAAE,CAC9D,SAAS,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CACrD,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,oBAAoB,CAAC,EACnC,IAAI,EACJ,OAAO,GAAG,EAAE,GACoB;IAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5B,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAE9C,IAAI,OAAO,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,CAAC,aAAa,EAAE,CAAC;QACxD,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAClE,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/C,CAAC;QACD,OAAO,MAAM,CAAC,IAAI,CAAC,QAAkB,CAAC,CAAC;IACzC,CAAC;IAED,mEAAmE;IACnE,IAAI,OAAO,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;QACtC,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;IAED,cAAc;IACd,sCAAsC;IACtC,iBAAiB;IACjB,sEAAsE;IACtE,MAAM,IAAI,GAAG,OAA8B,CAAC;IAC5C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,KAAK,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,gCAAgC,CAC9C,SAAiB,EACjB,SAAiB,EACjB,UAA+B,EAAE;IAEjC,MAAM,MAAM,GACV,OAAO,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC;IACtE,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,MAAwB,CAAC;IAClC,CAAC;SAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QACtC,OAAO,MAAM,CAAC,KAAK,IAAI,QAAQ,CAAC;IAClC,CAAC;SAAM,CAAC;QACN,OAAO,QAAQ,CAAC;IAClB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,SAAiB,EACjB,UAAkC,EAAE;IAEpC,MAAM,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC,SAAS,CAGtB,CAAC;IACd,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;QACnB,OAAO,QAAQ,CAAC;IAClB,CAAC;SAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QACtC,OAAO,MAAwB,CAAC;IAClC,CAAC;SAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QACtC,OAAO,MAAM,CAAC,KAAK,IAAI,QAAQ,CAAC;IAClC,CAAC;SAAM,CAAC;QACN,OAAO,QAAQ,CAAC;IAClB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,SAAgB;IAClD,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,EAAE,EAAE,GAAG,SAAS,CAAC;IAEzC,4DAA4D;IAC5D,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACnD,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9B,MAAM,iBAAiB,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAqB,CAAC;QACzD,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,iBAAiB,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CACrE,0BAA0B,CAAC,GAAG,EAAE,OAAiC,CAAC,CACnE,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,IAAI;SACpB,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;SACjE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACV,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,CACjC,OAAO,MAAM,KAAK,QAAQ;YACxB,CAAC,CAAC,MAAM;YACR,CAAC,CAAC,gCAAgC,CAC9B,MAAM,CAAC,GAAG,EACV,GAAG,EACH,OAA8B,CAC/B,CACN,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;AAC1D,CAAC"}
|
package/src/lib/transform.d.ts
CHANGED
|
@@ -7,8 +7,7 @@ export declare function distinct<T extends string | number | boolean>(array: T[]
|
|
|
7
7
|
export declare function deepClone<T>(obj: T): T;
|
|
8
8
|
export declare function factorOf<T>(items: T[], filterFn: (i: T) => boolean): number;
|
|
9
9
|
type ArgumentValue = number | string | boolean | string[];
|
|
10
|
-
export type CliArgsObject<T extends object = Record<string, ArgumentValue>> = T extends never ?
|
|
11
|
-
Record<string, ArgumentValue | undefined> | {
|
|
10
|
+
export type CliArgsObject<T extends object = Record<string, ArgumentValue>> = T extends never ? Record<string, ArgumentValue | undefined> | {
|
|
12
11
|
_: string;
|
|
13
12
|
} : T;
|
|
14
13
|
/**
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { platform } from 'node:os';
|
|
2
|
+
export function toArray(val) {
|
|
3
|
+
return Array.isArray(val) ? val : [val];
|
|
4
|
+
}
|
|
5
|
+
export function objectToKeys(obj) {
|
|
6
|
+
return Object.keys(obj);
|
|
7
|
+
}
|
|
8
|
+
export function objectToEntries(obj) {
|
|
9
|
+
return Object.entries(obj);
|
|
10
|
+
}
|
|
11
|
+
export function objectFromEntries(entries) {
|
|
12
|
+
return Object.fromEntries(entries);
|
|
13
|
+
}
|
|
14
|
+
export function countOccurrences(values) {
|
|
15
|
+
return values.reduce((acc, value) => ({ ...acc, [value]: (acc[value] ?? 0) + 1 }), {});
|
|
16
|
+
}
|
|
17
|
+
export function distinct(array) {
|
|
18
|
+
return [...new Set(array)];
|
|
19
|
+
}
|
|
20
|
+
export function deepClone(obj) {
|
|
21
|
+
return obj == null || typeof obj !== 'object' ? obj : structuredClone(obj);
|
|
22
|
+
}
|
|
23
|
+
export function factorOf(items, filterFn) {
|
|
24
|
+
const itemCount = items.length;
|
|
25
|
+
// early exit for empty rows
|
|
26
|
+
if (!itemCount) {
|
|
27
|
+
return 1;
|
|
28
|
+
}
|
|
29
|
+
const filterCount = items.filter(filterFn).length;
|
|
30
|
+
// if no rows result from the filter fn we forward return 1 as factor
|
|
31
|
+
return filterCount === 0 ? 1 : (itemCount - filterCount) / itemCount;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Converts an object with different types of values into an array of command-line arguments.
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* const args = objectToProcessArgs({
|
|
38
|
+
* _: ['node', 'index.js'], // node index.js
|
|
39
|
+
* name: 'Juanita', // --name=Juanita
|
|
40
|
+
* formats: ['json', 'md'] // --format=json --format=md
|
|
41
|
+
* });
|
|
42
|
+
*/
|
|
43
|
+
export function objectToCliArgs(params) {
|
|
44
|
+
if (!params) {
|
|
45
|
+
return [];
|
|
46
|
+
}
|
|
47
|
+
return Object.entries(params).flatMap(([key, value]) => {
|
|
48
|
+
// process/file/script
|
|
49
|
+
if (key === '_') {
|
|
50
|
+
return Array.isArray(value) ? value : [`${value}`];
|
|
51
|
+
}
|
|
52
|
+
const prefix = key.length === 1 ? '-' : '--';
|
|
53
|
+
// "-*" arguments (shorthands)
|
|
54
|
+
if (Array.isArray(value)) {
|
|
55
|
+
return value.map(v => `${prefix}${key}="${v}"`);
|
|
56
|
+
}
|
|
57
|
+
// "--*" arguments ==========
|
|
58
|
+
if (Array.isArray(value)) {
|
|
59
|
+
return value.map(v => `${prefix}${key}="${v}"`);
|
|
60
|
+
}
|
|
61
|
+
if (typeof value === 'object') {
|
|
62
|
+
return Object.entries(value).flatMap(
|
|
63
|
+
// transform nested objects to the dot notation `key.subkey`
|
|
64
|
+
([k, v]) => objectToCliArgs({ [`${key}.${k}`]: v }));
|
|
65
|
+
}
|
|
66
|
+
if (typeof value === 'string') {
|
|
67
|
+
return [`${prefix}${key}="${value}"`];
|
|
68
|
+
}
|
|
69
|
+
if (typeof value === 'number') {
|
|
70
|
+
return [`${prefix}${key}=${value}`];
|
|
71
|
+
}
|
|
72
|
+
if (typeof value === 'boolean') {
|
|
73
|
+
return [`${prefix}${value ? '' : 'no-'}${key}`];
|
|
74
|
+
}
|
|
75
|
+
throw new Error(`Unsupported type ${typeof value} for key ${key}`);
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
export function toUnixPath(path) {
|
|
79
|
+
return path.replace(/\\/g, '/');
|
|
80
|
+
}
|
|
81
|
+
export function toUnixNewlines(text) {
|
|
82
|
+
return platform() === 'win32' ? text.replace(/\r\n/g, '\n') : text;
|
|
83
|
+
}
|
|
84
|
+
export function fromJsonLines(jsonLines) {
|
|
85
|
+
const unifiedNewLines = toUnixNewlines(jsonLines).trim();
|
|
86
|
+
return JSON.parse(`[${unifiedNewLines.split('\n').join(',')}]`);
|
|
87
|
+
}
|
|
88
|
+
export function toJsonLines(json) {
|
|
89
|
+
return json.map(item => JSON.stringify(item)).join('\n');
|
|
90
|
+
}
|
|
91
|
+
export function capitalize(text) {
|
|
92
|
+
return `${text.charAt(0).toLocaleUpperCase()}${text.slice(1)}`;
|
|
93
|
+
}
|
|
94
|
+
export function toNumberPrecision(value, decimalPlaces) {
|
|
95
|
+
return Number(`${Math.round(Number.parseFloat(`${value}e${decimalPlaces}`))}e-${decimalPlaces}`);
|
|
96
|
+
}
|
|
97
|
+
export function toOrdinal(value) {
|
|
98
|
+
/* eslint-disable @typescript-eslint/no-magic-numbers */
|
|
99
|
+
if (value % 10 === 1 && value % 100 !== 11) {
|
|
100
|
+
return `${value}st`;
|
|
101
|
+
}
|
|
102
|
+
if (value % 10 === 2 && value % 100 !== 12) {
|
|
103
|
+
return `${value}nd`;
|
|
104
|
+
}
|
|
105
|
+
if (value % 10 === 3 && value % 100 !== 13) {
|
|
106
|
+
return `${value}rd`;
|
|
107
|
+
}
|
|
108
|
+
/* eslint-enable @typescript-eslint/no-magic-numbers */
|
|
109
|
+
return `${value}th`;
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=transform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transform.js","sourceRoot":"","sources":["../../../../../packages/utils/src/lib/transform.ts"],"names":[],"mappings":"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"}
|
package/src/lib/types.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
export type
|
|
2
|
-
[P in keyof T]:
|
|
1
|
+
export type ExcludeNullableProps<T> = {
|
|
2
|
+
[P in keyof T]: NonNullable<T[P]>;
|
|
3
3
|
};
|
|
4
4
|
export type ItemOrArray<T> = T | T[];
|
|
5
|
-
export type ExtractArray<T> = T extends
|
|
5
|
+
export type ExtractArray<T> = T extends unknown[] ? T : never;
|
|
6
6
|
export type ExtractArrays<T extends Record<string, unknown>> = {
|
|
7
7
|
[K in keyof T]: ExtractArray<T[K]>;
|
|
8
8
|
};
|
package/src/lib/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../packages/utils/src/lib/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { ui } from './logging.js';
|
|
2
|
+
function getLogVerbose(verbose = false) {
|
|
3
|
+
return (msg) => {
|
|
4
|
+
if (verbose) {
|
|
5
|
+
ui().logger.info(msg);
|
|
6
|
+
}
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
function getExecVerbose(verbose = false) {
|
|
10
|
+
return (fn) => {
|
|
11
|
+
if (verbose) {
|
|
12
|
+
fn();
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
export const verboseUtils = (verbose = false) => ({
|
|
17
|
+
log: getLogVerbose(verbose),
|
|
18
|
+
exec: getExecVerbose(verbose),
|
|
19
|
+
});
|
|
20
|
+
//# sourceMappingURL=verbose-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verbose-utils.js","sourceRoot":"","sources":["../../../../../packages/utils/src/lib/verbose-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAElC,SAAS,aAAa,CAAC,OAAO,GAAG,KAAK;IACpC,OAAO,CAAC,GAAW,EAAE,EAAE;QACrB,IAAI,OAAO,EAAE,CAAC;YACZ,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACxB,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,OAAO,GAAG,KAAK;IACrC,OAAO,CAAC,EAAiB,EAAE,EAAE;QAC3B,IAAI,OAAO,EAAE,CAAC;YACZ,EAAE,EAAE,CAAC;QACP,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,OAAO,GAAG,KAAK,EAAE,EAAE,CAAC,CAAC;IAChD,GAAG,EAAE,aAAa,CAAC,OAAO,CAAC;IAC3B,IAAI,EAAE,cAAc,CAAC,OAAO,CAAC;CAC9B,CAAC,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { bold, red } from 'ansis';
|
|
2
|
+
export function formatErrorPath(errorPath) {
|
|
3
|
+
return errorPath
|
|
4
|
+
.map((key, index) => {
|
|
5
|
+
if (typeof key === 'number') {
|
|
6
|
+
return `[${key}]`;
|
|
7
|
+
}
|
|
8
|
+
return index > 0 ? `.${key}` : key;
|
|
9
|
+
})
|
|
10
|
+
.join('');
|
|
11
|
+
}
|
|
12
|
+
export const zodErrorMessageBuilder = issues => issues
|
|
13
|
+
.map(issue => {
|
|
14
|
+
const formattedMessage = red(`${bold(issue.code)}: ${issue.message}`);
|
|
15
|
+
const formattedPath = formatErrorPath(issue.path);
|
|
16
|
+
if (formattedPath) {
|
|
17
|
+
return `Validation error at ${bold(formattedPath)}\n${formattedMessage}\n`;
|
|
18
|
+
}
|
|
19
|
+
return `${formattedMessage}\n`;
|
|
20
|
+
})
|
|
21
|
+
.join('\n');
|
|
22
|
+
//# sourceMappingURL=zod-validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zod-validation.js","sourceRoot":"","sources":["../../../../../packages/utils/src/lib/zod-validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAGlC,MAAM,UAAU,eAAe,CAAC,SAA8B;IAC5D,OAAO,SAAS;SACb,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;QAClB,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC5B,OAAO,IAAI,GAAG,GAAG,CAAC;QACpB,CAAC;QACD,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;IACrC,CAAC,CAAC;SACD,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC;AAED,MAAM,CAAC,MAAM,sBAAsB,GAAmB,MAAM,CAAC,EAAE,CAC7D,MAAM;KACH,GAAG,CAAC,KAAK,CAAC,EAAE;IACX,MAAM,gBAAgB,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IACtE,MAAM,aAAa,GAAG,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClD,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,uBAAuB,IAAI,CAAC,aAAa,CAAC,KAAK,gBAAgB,IAAI,CAAC;IAC7E,CAAC;IACD,OAAO,GAAG,gBAAgB,IAAI,CAAC;AACjC,CAAC,CAAC;KACD,IAAI,CAAC,IAAI,CAAC,CAAC"}
|