@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.
Files changed (103) hide show
  1. package/package.json +12 -7
  2. package/src/index.d.ts +30 -29
  3. package/src/index.js +30 -0
  4. package/src/index.js.map +1 -0
  5. package/src/lib/diff.js +38 -0
  6. package/src/lib/diff.js.map +1 -0
  7. package/src/lib/errors.js +14 -0
  8. package/src/lib/errors.js.map +1 -0
  9. package/src/lib/execute-process.d.ts +0 -1
  10. package/src/lib/execute-process.js +101 -0
  11. package/src/lib/execute-process.js.map +1 -0
  12. package/src/lib/file-system.d.ts +5 -5
  13. package/src/lib/file-system.js +113 -0
  14. package/src/lib/file-system.js.map +1 -0
  15. package/src/lib/filter.js +10 -0
  16. package/src/lib/filter.js.map +1 -0
  17. package/src/lib/formatting.js +83 -0
  18. package/src/lib/formatting.js.map +1 -0
  19. package/src/lib/git/git.commits-and-tags.js +148 -0
  20. package/src/lib/git/git.commits-and-tags.js.map +1 -0
  21. package/src/lib/git/git.d.ts +2 -2
  22. package/src/lib/git/git.js +58 -0
  23. package/src/lib/git/git.js.map +1 -0
  24. package/src/lib/group-by-status.js +6 -0
  25. package/src/lib/group-by-status.js.map +1 -0
  26. package/src/lib/guards.d.ts +2 -0
  27. package/src/lib/guards.js +10 -0
  28. package/src/lib/guards.js.map +1 -0
  29. package/src/lib/log-results.js +28 -0
  30. package/src/lib/log-results.js.map +1 -0
  31. package/src/lib/logging.js +33 -0
  32. package/src/lib/logging.js.map +1 -0
  33. package/src/lib/merge-configs.js +104 -0
  34. package/src/lib/merge-configs.js.map +1 -0
  35. package/src/lib/progress.js +57 -0
  36. package/src/lib/progress.js.map +1 -0
  37. package/src/lib/reports/constants.js +19 -0
  38. package/src/lib/reports/constants.js.map +1 -0
  39. package/src/lib/reports/environment-type.d.ts +1 -1
  40. package/src/lib/reports/environment-type.js +17 -0
  41. package/src/lib/reports/environment-type.js.map +1 -0
  42. package/src/lib/reports/flatten-plugins.js +8 -0
  43. package/src/lib/reports/flatten-plugins.js.map +1 -0
  44. package/src/lib/reports/formatting.d.ts +1 -1
  45. package/src/lib/reports/formatting.js +105 -0
  46. package/src/lib/reports/formatting.js.map +1 -0
  47. package/src/lib/reports/generate-md-report-categoy-section.d.ts +1 -1
  48. package/src/lib/reports/generate-md-report-categoy-section.js +63 -0
  49. package/src/lib/reports/generate-md-report-categoy-section.js.map +1 -0
  50. package/src/lib/reports/generate-md-report.d.ts +1 -1
  51. package/src/lib/reports/generate-md-report.js +116 -0
  52. package/src/lib/reports/generate-md-report.js.map +1 -0
  53. package/src/lib/reports/generate-md-reports-diff-utils.d.ts +1 -1
  54. package/src/lib/reports/generate-md-reports-diff-utils.js +117 -0
  55. package/src/lib/reports/generate-md-reports-diff-utils.js.map +1 -0
  56. package/src/lib/reports/generate-md-reports-diff.d.ts +1 -1
  57. package/src/lib/reports/generate-md-reports-diff.js +158 -0
  58. package/src/lib/reports/generate-md-reports-diff.js.map +1 -0
  59. package/src/lib/reports/load-report.js +15 -0
  60. package/src/lib/reports/load-report.js.map +1 -0
  61. package/src/lib/reports/log-stdout-summary.d.ts +1 -1
  62. package/src/lib/reports/log-stdout-summary.js +102 -0
  63. package/src/lib/reports/log-stdout-summary.js.map +1 -0
  64. package/src/lib/reports/scoring.d.ts +1 -1
  65. package/src/lib/reports/scoring.js +78 -0
  66. package/src/lib/reports/scoring.js.map +1 -0
  67. package/src/lib/reports/sorting.d.ts +1 -1
  68. package/src/lib/reports/sorting.js +91 -0
  69. package/src/lib/reports/sorting.js.map +1 -0
  70. package/src/lib/reports/types.js +7 -0
  71. package/src/lib/reports/types.js.map +1 -0
  72. package/src/lib/reports/utils.d.ts +1 -1
  73. package/src/lib/reports/utils.js +209 -0
  74. package/src/lib/reports/utils.js.map +1 -0
  75. package/src/lib/semver.js +17 -0
  76. package/src/lib/semver.js.map +1 -0
  77. package/src/lib/text-formats/constants.js +14 -0
  78. package/src/lib/text-formats/constants.js.map +1 -0
  79. package/src/lib/text-formats/html/details.js +20 -0
  80. package/src/lib/text-formats/html/details.js.map +1 -0
  81. package/src/lib/text-formats/html/font-style.js +13 -0
  82. package/src/lib/text-formats/html/font-style.js.map +1 -0
  83. package/src/lib/text-formats/html/link.js +4 -0
  84. package/src/lib/text-formats/html/link.js.map +1 -0
  85. package/src/lib/text-formats/html/table.js +27 -0
  86. package/src/lib/text-formats/html/table.js.map +1 -0
  87. package/src/lib/text-formats/index.d.ts +5 -5
  88. package/src/lib/text-formats/index.js +14 -0
  89. package/src/lib/text-formats/index.js.map +1 -0
  90. package/src/lib/text-formats/table.js +92 -0
  91. package/src/lib/text-formats/table.js.map +1 -0
  92. package/src/lib/transform.d.ts +1 -2
  93. package/src/lib/transform.js +111 -0
  94. package/src/lib/transform.js.map +1 -0
  95. package/src/lib/types.d.ts +3 -3
  96. package/src/lib/types.js +2 -0
  97. package/src/lib/types.js.map +1 -0
  98. package/src/lib/verbose-utils.js +20 -0
  99. package/src/lib/verbose-utils.js.map +1 -0
  100. package/src/lib/zod-validation.d.ts +3 -0
  101. package/src/lib/zod-validation.js +22 -0
  102. package/src/lib/zod-validation.js.map +1 -0
  103. 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,4 @@
1
+ export function link(href, text) {
2
+ return `<a href="${href}">${text || href}</a>`;
3
+ }
4
+ //# sourceMappingURL=link.js.map
@@ -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":"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"}
@@ -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 ? // eslint-disable-next-line @typescript-eslint/naming-convention
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":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEnC,MAAM,UAAU,OAAO,CAAI,GAAY;IACrC,OAAO,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,YAAY,CAAmB,GAAM;IACnD,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAgB,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,eAAe,CAAmB,GAAM;IACtD,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,CAA4B,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,iBAAiB,CAA2B,OAAiB;IAC3E,OAAO,MAAM,CAAC,WAAW,CAAC,OAAO,CAAiB,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,MAAW;IAEX,OAAO,MAAM,CAAC,MAAM,CAClB,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAC5D,EAAE,CACH,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,QAAQ,CAAsC,KAAU;IACtE,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,SAAS,CAAI,GAAM;IACjC,OAAO,GAAG,IAAI,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;AAC7E,CAAC;AAED,MAAM,UAAU,QAAQ,CAAI,KAAU,EAAE,QAA2B;IACjE,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC;IAC/B,4BAA4B;IAC5B,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC;IAClD,qEAAqE;IACrE,OAAO,WAAW,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,WAAW,CAAC,GAAG,SAAS,CAAC;AACvE,CAAC;AAQD;;;;;;;;;GASG;AACH,MAAM,UAAU,eAAe,CAE7B,MAAyB;IACzB,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;QACrD,sBAAsB;QACtB,IAAI,GAAG,KAAK,GAAG,EAAE,CAAC;YAChB,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC;QACrD,CAAC;QACD,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;QAC7C,8BAA8B;QAC9B,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;QAClD,CAAC;QACD,6BAA6B;QAE7B,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;QAClD,CAAC;QAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,MAAM,CAAC,OAAO,CAAC,KAAsC,CAAC,CAAC,OAAO;YACnE,4DAA4D;YAC5D,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CACpD,CAAC;QACJ,CAAC;QAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,CAAC,GAAG,MAAM,GAAG,GAAG,KAAK,KAAK,GAAG,CAAC,CAAC;QACxC,CAAC;QAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,CAAC,GAAG,MAAM,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC,CAAC;QACtC,CAAC;QAED,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,EAAE,CAAC,CAAC;QAClD,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,oBAAoB,OAAO,KAAK,YAAY,GAAG,EAAE,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,OAAO,QAAQ,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,aAAa,CAAc,SAAiB;IAC1D,MAAM,eAAe,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC;IACzD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAM,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,WAAW,CAAI,IAAS;IACtC,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,UAAU,CAAmB,IAAO;IAClD,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,iBAAiB,EAAE,GAAG,IAAI,CAAC,KAAK,CACvD,CAAC,CACF,EAAmB,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,KAAa,EACb,aAAqB;IAErB,OAAO,MAAM,CACX,GAAG,IAAI,CAAC,KAAK,CACX,MAAM,CAAC,UAAU,CAAC,GAAG,KAAK,IAAI,aAAa,EAAE,CAAC,CAC/C,KAAK,aAAa,EAAE,CACtB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,KAAa;IACrC,wDAAwD;IACxD,IAAI,KAAK,GAAG,EAAE,KAAK,CAAC,IAAI,KAAK,GAAG,GAAG,KAAK,EAAE,EAAE,CAAC;QAC3C,OAAO,GAAG,KAAK,IAAI,CAAC;IACtB,CAAC;IAED,IAAI,KAAK,GAAG,EAAE,KAAK,CAAC,IAAI,KAAK,GAAG,GAAG,KAAK,EAAE,EAAE,CAAC;QAC3C,OAAO,GAAG,KAAK,IAAI,CAAC;IACtB,CAAC;IAED,IAAI,KAAK,GAAG,EAAE,KAAK,CAAC,IAAI,KAAK,GAAG,GAAG,KAAK,EAAE,EAAE,CAAC;QAC3C,OAAO,GAAG,KAAK,IAAI,CAAC;IACtB,CAAC;IACD,uDAAuD;IAEvD,OAAO,GAAG,KAAK,IAAI,CAAC;AACtB,CAAC"}
@@ -1,8 +1,8 @@
1
- export type ExcludeNullFromPropertyTypes<T> = {
2
- [P in keyof T]: Exclude<T[P], null>;
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 Array<unknown> ? T : never;
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
  };
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -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,3 @@
1
+ import type { MessageBuilder } from 'zod-validation-error';
2
+ export declare function formatErrorPath(errorPath: (string | number)[]): string;
3
+ export declare const zodErrorMessageBuilder: MessageBuilder;
@@ -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"}