@code-pushup/cli 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 (81) hide show
  1. package/package.json +10 -9
  2. package/src/index.js +6 -0
  3. package/src/index.js.map +1 -0
  4. package/src/lib/autorun/autorun-command.js +43 -0
  5. package/src/lib/autorun/autorun-command.js.map +1 -0
  6. package/src/lib/cli.js +40 -0
  7. package/src/lib/cli.js.map +1 -0
  8. package/src/lib/collect/collect-command.js +38 -0
  9. package/src/lib/collect/collect-command.js.map +1 -0
  10. package/src/lib/commands.js +21 -0
  11. package/src/lib/commands.js.map +1 -0
  12. package/src/lib/compare/compare-command.d.ts +1 -1
  13. package/src/lib/compare/compare-command.js +24 -0
  14. package/src/lib/compare/compare-command.js.map +1 -0
  15. package/src/lib/constants.js +3 -0
  16. package/src/lib/constants.js.map +1 -0
  17. package/src/lib/history/history-command.js +50 -0
  18. package/src/lib/history/history-command.js.map +1 -0
  19. package/src/lib/history/history.model.js +2 -0
  20. package/src/lib/history/history.model.js.map +1 -0
  21. package/src/lib/history/history.options.d.ts +1 -1
  22. package/src/lib/history/history.options.js +41 -0
  23. package/src/lib/history/history.options.js.map +1 -0
  24. package/src/lib/history/utils.d.ts +1 -1
  25. package/src/lib/history/utils.js +27 -0
  26. package/src/lib/history/utils.js.map +1 -0
  27. package/src/lib/implementation/compare.model.js +2 -0
  28. package/src/lib/implementation/compare.model.js.map +1 -0
  29. package/src/lib/implementation/compare.options.d.ts +1 -1
  30. package/src/lib/implementation/compare.options.js +19 -0
  31. package/src/lib/implementation/compare.options.js.map +1 -0
  32. package/src/lib/implementation/core-config.middleware.d.ts +3 -3
  33. package/src/lib/implementation/core-config.middleware.js +31 -0
  34. package/src/lib/implementation/core-config.middleware.js.map +1 -0
  35. package/src/lib/implementation/core-config.model.js +2 -0
  36. package/src/lib/implementation/core-config.model.js.map +1 -0
  37. package/src/lib/implementation/core-config.options.d.ts +1 -1
  38. package/src/lib/implementation/core-config.options.js +43 -0
  39. package/src/lib/implementation/core-config.options.js.map +1 -0
  40. package/src/lib/implementation/filter.middleware.d.ts +1 -1
  41. package/src/lib/implementation/filter.middleware.js +61 -0
  42. package/src/lib/implementation/filter.middleware.js.map +1 -0
  43. package/src/lib/implementation/filter.model.js +2 -0
  44. package/src/lib/implementation/filter.model.js.map +1 -0
  45. package/src/lib/implementation/filter.options.d.ts +1 -1
  46. package/src/lib/implementation/filter.options.js +36 -0
  47. package/src/lib/implementation/filter.options.js.map +1 -0
  48. package/src/lib/implementation/formatting.js +26 -0
  49. package/src/lib/implementation/formatting.js.map +1 -0
  50. package/src/lib/implementation/global.model.d.ts +1 -1
  51. package/src/lib/implementation/global.model.js +2 -0
  52. package/src/lib/implementation/global.model.js.map +1 -0
  53. package/src/lib/implementation/global.options.d.ts +1 -1
  54. package/src/lib/implementation/global.options.js +23 -0
  55. package/src/lib/implementation/global.options.js.map +1 -0
  56. package/src/lib/implementation/global.utils.js +45 -0
  57. package/src/lib/implementation/global.utils.js.map +1 -0
  58. package/src/lib/implementation/logging.js +24 -0
  59. package/src/lib/implementation/logging.js.map +1 -0
  60. package/src/lib/implementation/merge-diffs.model.js +2 -0
  61. package/src/lib/implementation/merge-diffs.model.js.map +1 -0
  62. package/src/lib/implementation/merge-diffs.options.d.ts +1 -1
  63. package/src/lib/implementation/merge-diffs.options.js +10 -0
  64. package/src/lib/implementation/merge-diffs.options.js.map +1 -0
  65. package/src/lib/implementation/validate-filter-options.utils.d.ts +1 -1
  66. package/src/lib/implementation/validate-filter-options.utils.js +86 -0
  67. package/src/lib/implementation/validate-filter-options.utils.js.map +1 -0
  68. package/src/lib/merge-diffs/merge-diffs-command.js +22 -0
  69. package/src/lib/merge-diffs/merge-diffs-command.js.map +1 -0
  70. package/src/lib/middlewares.js +13 -0
  71. package/src/lib/middlewares.js.map +1 -0
  72. package/src/lib/options.d.ts +1 -1
  73. package/src/lib/options.js +17 -0
  74. package/src/lib/options.js.map +1 -0
  75. package/src/lib/print-config/print-config-command.js +17 -0
  76. package/src/lib/print-config/print-config-command.js.map +1 -0
  77. package/src/lib/upload/upload-command.js +26 -0
  78. package/src/lib/upload/upload-command.js.map +1 -0
  79. package/src/lib/yargs-cli.js +105 -0
  80. package/src/lib/yargs-cli.js.map +1 -0
  81. package/index.js +0 -4262
@@ -0,0 +1,61 @@
1
+ import { filterItemRefsBy } from '@code-pushup/utils';
2
+ import { handleConflictingOptions, validateFilterOption, validateFinalState, } from './validate-filter-options.utils.js';
3
+ export function filterMiddleware(originalProcessArgs) {
4
+ const { plugins, categories, skipCategories = [], onlyCategories = [], skipPlugins = [], onlyPlugins = [], verbose = false, } = originalProcessArgs;
5
+ if (skipCategories.length === 0 &&
6
+ onlyCategories.length === 0 &&
7
+ skipPlugins.length === 0 &&
8
+ onlyPlugins.length === 0) {
9
+ return originalProcessArgs;
10
+ }
11
+ handleConflictingOptions('categories', onlyCategories, skipCategories);
12
+ handleConflictingOptions('plugins', onlyPlugins, skipPlugins);
13
+ const filteredCategories = applyCategoryFilters({ categories, plugins }, skipCategories, onlyCategories, verbose);
14
+ const filteredPlugins = applyPluginFilters({ categories: filteredCategories, plugins }, skipPlugins, onlyPlugins, verbose);
15
+ const finalCategories = filteredCategories
16
+ ? filterItemRefsBy(filteredCategories, ref => filteredPlugins.some(plugin => plugin.slug === ref.plugin))
17
+ : filteredCategories;
18
+ validateFinalState({ categories: finalCategories, plugins: filteredPlugins }, { categories, plugins });
19
+ return {
20
+ ...originalProcessArgs,
21
+ plugins: filteredPlugins,
22
+ categories: finalCategories,
23
+ };
24
+ }
25
+ function applyFilters(items, skipItems, onlyItems, key) {
26
+ return items.filter(item => {
27
+ const itemKey = item[key];
28
+ return (!skipItems.includes(itemKey) &&
29
+ (onlyItems.length === 0 || onlyItems.includes(itemKey)));
30
+ });
31
+ }
32
+ function applyCategoryFilters({ categories, plugins }, skipCategories, onlyCategories, verbose) {
33
+ if ((skipCategories.length === 0 && onlyCategories.length === 0) ||
34
+ !categories ||
35
+ categories.length === 0) {
36
+ return categories;
37
+ }
38
+ validateFilterOption('skipCategories', { plugins, categories }, { itemsToFilter: skipCategories, verbose });
39
+ validateFilterOption('onlyCategories', { plugins, categories }, { itemsToFilter: onlyCategories, verbose });
40
+ return applyFilters(categories, skipCategories, onlyCategories, 'slug');
41
+ }
42
+ function applyPluginFilters({ categories, plugins }, skipPlugins, onlyPlugins, verbose) {
43
+ const filteredPlugins = filterPluginsFromCategories({
44
+ categories,
45
+ plugins,
46
+ });
47
+ if (skipPlugins.length === 0 && onlyPlugins.length === 0) {
48
+ return filteredPlugins;
49
+ }
50
+ validateFilterOption('skipPlugins', { plugins: filteredPlugins, categories }, { itemsToFilter: skipPlugins, verbose });
51
+ validateFilterOption('onlyPlugins', { plugins: filteredPlugins, categories }, { itemsToFilter: onlyPlugins, verbose });
52
+ return applyFilters(filteredPlugins, skipPlugins, onlyPlugins, 'slug');
53
+ }
54
+ function filterPluginsFromCategories({ categories, plugins, }) {
55
+ if (!categories || categories.length === 0) {
56
+ return plugins;
57
+ }
58
+ const validPluginSlugs = new Set(categories.flatMap(category => category.refs.map(ref => ref.plugin)));
59
+ return plugins.filter(plugin => validPluginSlugs.has(plugin.slug));
60
+ }
61
+ //# sourceMappingURL=filter.middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter.middleware.js","sourceRoot":"","sources":["../../../../../../packages/cli/src/lib/implementation/filter.middleware.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=filter.model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter.model.js","sourceRoot":"","sources":["../../../../../../packages/cli/src/lib/implementation/filter.model.ts"],"names":[],"mappings":""}
@@ -1,5 +1,5 @@
1
1
  import type { Options } from 'yargs';
2
- import type { FilterCliOptions } from './filter.model';
2
+ import type { FilterCliOptions } from './filter.model.js';
3
3
  export declare const skipCategoriesOption: Options;
4
4
  export declare const onlyCategoriesOption: Options;
5
5
  export declare const skipPluginsOption: Options;
@@ -0,0 +1,36 @@
1
+ import { coerceArray } from './global.utils.js';
2
+ export const skipCategoriesOption = {
3
+ describe: 'List of categories to skip. If not set all categories are run.',
4
+ type: 'array',
5
+ default: [],
6
+ coerce: coerceArray,
7
+ };
8
+ export const onlyCategoriesOption = {
9
+ describe: 'List of categories to run. If not set all categories are run.',
10
+ type: 'array',
11
+ default: [],
12
+ coerce: coerceArray,
13
+ };
14
+ export const skipPluginsOption = {
15
+ describe: 'List of plugins to skip. If not set all plugins are run.',
16
+ type: 'array',
17
+ default: [],
18
+ coerce: coerceArray,
19
+ alias: 'P',
20
+ };
21
+ export const onlyPluginsOption = {
22
+ describe: 'List of plugins to run. If not set all plugins are run.',
23
+ type: 'array',
24
+ default: [],
25
+ coerce: coerceArray,
26
+ alias: 'p',
27
+ };
28
+ export function yargsFilterOptionsDefinition() {
29
+ return {
30
+ skipCategories: skipCategoriesOption,
31
+ onlyCategories: onlyCategoriesOption,
32
+ skipPlugins: skipPluginsOption,
33
+ onlyPlugins: onlyPluginsOption,
34
+ };
35
+ }
36
+ //# sourceMappingURL=filter.options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter.options.js","sourceRoot":"","sources":["../../../../../../packages/cli/src/lib/implementation/filter.options.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,CAAC,MAAM,oBAAoB,GAAY;IAC3C,QAAQ,EAAE,gEAAgE;IAC1E,IAAI,EAAE,OAAO;IACb,OAAO,EAAE,EAAE;IACX,MAAM,EAAE,WAAW;CACpB,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAY;IAC3C,QAAQ,EAAE,+DAA+D;IACzE,IAAI,EAAE,OAAO;IACb,OAAO,EAAE,EAAE;IACX,MAAM,EAAE,WAAW;CACpB,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAY;IACxC,QAAQ,EAAE,0DAA0D;IACpE,IAAI,EAAE,OAAO;IACb,OAAO,EAAE,EAAE;IACX,MAAM,EAAE,WAAW;IACnB,KAAK,EAAE,GAAG;CACX,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAY;IACxC,QAAQ,EAAE,yDAAyD;IACnE,IAAI,EAAE,OAAO;IACb,OAAO,EAAE,EAAE;IACX,MAAM,EAAE,WAAW;IACnB,KAAK,EAAE,GAAG;CACX,CAAC;AAEF,MAAM,UAAU,4BAA4B;IAI1C,OAAO;QACL,cAAc,EAAE,oBAAoB;QACpC,cAAc,EAAE,oBAAoB;QACpC,WAAW,EAAE,iBAAiB;QAC9B,WAAW,EAAE,iBAAiB;KAC/B,CAAC;AACJ,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { bold, dim, green } from 'ansis';
2
+ export function titleStyle(title) {
3
+ return `${bold(title)}`;
4
+ }
5
+ export function headerStyle(title) {
6
+ return `${green(title)}`;
7
+ }
8
+ export function descriptionStyle(title) {
9
+ return `${dim(title)}`;
10
+ }
11
+ export function formatObjectValue(opts, propName) {
12
+ const description = opts[propName];
13
+ return {
14
+ ...opts,
15
+ ...(typeof description === 'string' && {
16
+ [propName]: descriptionStyle(description),
17
+ }),
18
+ };
19
+ }
20
+ export function formatNestedValues(options, propName) {
21
+ return Object.fromEntries(Object.entries(options).map(([key, opts]) => [
22
+ key,
23
+ formatObjectValue(opts, propName),
24
+ ]));
25
+ }
26
+ //# sourceMappingURL=formatting.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatting.js","sourceRoot":"","sources":["../../../../../../packages/cli/src/lib/implementation/formatting.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAEzC,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAI,IAAO,EAAE,QAAiB;IAC7D,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;IACnC,OAAO;QACL,GAAG,IAAI;QACP,GAAG,CAAC,OAAO,WAAW,KAAK,QAAQ,IAAI;YACrC,CAAC,QAAQ,CAAC,EAAE,gBAAgB,CAAC,WAAW,CAAC;SAC1C,CAAC;KACH,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,OAA0B,EAC1B,QAAiB;IAEjB,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC;QAC3C,GAAG;QACH,iBAAiB,CAAC,IAAI,EAAE,QAAQ,CAAC;KAClC,CAAC,CACH,CAAC;AACJ,CAAC"}
@@ -1,3 +1,3 @@
1
1
  import type { GlobalOptions } from '@code-pushup/core';
2
- import type { ConfigCliOptions } from './core-config.model';
2
+ import type { ConfigCliOptions } from './core-config.model.js';
3
3
  export type GeneralCliOptions = ConfigCliOptions & GlobalOptions;
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=global.model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global.model.js","sourceRoot":"","sources":["../../../../../../packages/cli/src/lib/implementation/global.model.ts"],"names":[],"mappings":""}
@@ -1,3 +1,3 @@
1
1
  import type { Options } from 'yargs';
2
- import type { GeneralCliOptions } from './global.model';
2
+ import type { GeneralCliOptions } from './global.model.js';
3
3
  export declare function yargsGlobalOptionsDefinition(): Record<keyof GeneralCliOptions, Options>;
@@ -0,0 +1,23 @@
1
+ export function yargsGlobalOptionsDefinition() {
2
+ return {
3
+ progress: {
4
+ describe: 'Show progress bar in stdout.',
5
+ type: 'boolean',
6
+ default: true,
7
+ },
8
+ verbose: {
9
+ describe: 'When true creates more verbose output. This is helpful when debugging.',
10
+ type: 'boolean',
11
+ default: false,
12
+ },
13
+ config: {
14
+ describe: 'Path to config file. By default it loads code-pushup.config.(ts|mjs|js).',
15
+ type: 'string',
16
+ },
17
+ tsconfig: {
18
+ describe: 'Path to a TypeScript config, to be used when loading config file.',
19
+ type: 'string',
20
+ },
21
+ };
22
+ }
23
+ //# sourceMappingURL=global.options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global.options.js","sourceRoot":"","sources":["../../../../../../packages/cli/src/lib/implementation/global.options.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,4BAA4B;IAI1C,OAAO;QACL,QAAQ,EAAE;YACR,QAAQ,EAAE,8BAA8B;YACxC,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,IAAI;SACd;QACD,OAAO,EAAE;YACP,QAAQ,EACN,wEAAwE;YAC1E,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,KAAK;SACf;QACD,MAAM,EAAE;YACN,QAAQ,EACN,0EAA0E;YAC5E,IAAI,EAAE,QAAQ;SACf;QACD,QAAQ,EAAE;YACR,QAAQ,EACN,mEAAmE;YACrE,IAAI,EAAE,QAAQ;SACf;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,45 @@
1
+ import yargs from 'yargs';
2
+ import { toArray, ui } from '@code-pushup/utils';
3
+ import { OptionValidationError } from './validate-filter-options.utils.js';
4
+ export function filterKebabCaseKeys(obj) {
5
+ return Object.entries(obj)
6
+ .filter(([key]) => !key.includes('-'))
7
+ .reduce((acc, [key, value]) => typeof value === 'string' ||
8
+ (typeof value === 'object' && Array.isArray(obj[key]))
9
+ ? { ...acc, [key]: value }
10
+ : typeof value === 'object' && !Array.isArray(value) && value != null
11
+ ? {
12
+ ...acc,
13
+ [key]: filterKebabCaseKeys(value),
14
+ }
15
+ : { ...acc, [key]: value }, {});
16
+ }
17
+ // Log error and flush stdout to ensure all logs are printed
18
+ // before Yargs exits or rethrows the error.
19
+ // This prevents log suppression, especially in async execution.
20
+ // Related issue: https://github.com/yargs/yargs/issues/2118
21
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
22
+ export function logErrorBeforeThrow(fn) {
23
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
24
+ return (async (...args) => {
25
+ try {
26
+ return await fn(...args);
27
+ }
28
+ catch (error) {
29
+ if (error instanceof OptionValidationError) {
30
+ ui().logger.error(error.message);
31
+ await new Promise(resolve => process.stdout.write('', resolve));
32
+ yargs().exit(1, error);
33
+ }
34
+ else {
35
+ console.error(error);
36
+ await new Promise(resolve => process.stdout.write('', resolve));
37
+ throw error;
38
+ }
39
+ }
40
+ });
41
+ }
42
+ export function coerceArray(param) {
43
+ return [...new Set(toArray(param).flatMap(f => f.split(',')))];
44
+ }
45
+ //# sourceMappingURL=global.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global.utils.js","sourceRoot":"","sources":["../../../../../../packages/cli/src/lib/implementation/global.utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAE3E,MAAM,UAAU,mBAAmB,CACjC,GAAM;IAEN,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;SACvB,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;SACrC,MAAM,CACL,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CACpB,OAAO,KAAK,KAAK,QAAQ;QACzB,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACpD,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE;QAC1B,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,IAAI;YACnE,CAAC,CAAC;gBACE,GAAG,GAAG;gBACN,CAAC,GAAG,CAAC,EAAE,mBAAmB,CAAC,KAAgC,CAAC;aAC7D;YACH,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,EAChC,EAAE,CACE,CAAC;AACX,CAAC;AAED,4DAA4D;AAC5D,4CAA4C;AAC5C,gEAAgE;AAChE,4DAA4D;AAC5D,8DAA8D;AAC9D,MAAM,UAAU,mBAAmB,CACjC,EAAK;IAEL,8DAA8D;IAC9D,OAAO,CAAC,KAAK,EAAE,GAAG,IAAW,EAAE,EAAE;QAC/B,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;QAC3B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,qBAAqB,EAAE,CAAC;gBAC3C,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBACjC,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;gBAChE,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YACzB,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACrB,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;gBAChE,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC,CAAM,CAAC;AACV,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACjE,CAAC"}
@@ -0,0 +1,24 @@
1
+ import { bold, gray } from 'ansis';
2
+ import { link, ui } from '@code-pushup/utils';
3
+ export function renderConfigureCategoriesHint() {
4
+ ui().logger.info(gray(`💡 Configure categories to see the scores in an overview table. See: ${link('https://github.com/code-pushup/cli/blob/main/packages/cli/README.md')}`));
5
+ }
6
+ export function uploadSuccessfulLog(url) {
7
+ ui().logger.success('Upload successful!');
8
+ ui().logger.success(link(url));
9
+ }
10
+ export function collectSuccessfulLog() {
11
+ ui().logger.success('Collecting report successful!');
12
+ }
13
+ export function renderIntegratePortalHint() {
14
+ ui()
15
+ .sticker()
16
+ .add(bold.gray('💡 Integrate the portal'))
17
+ .add('')
18
+ .add(`${gray('❯')} Upload a report to the server - ${gray('npx code-pushup upload')}`)
19
+ .add(` ${link('https://github.com/code-pushup/cli/tree/main/packages/cli#upload-command')}`)
20
+ .add(`${gray('❯')} ${gray('Portal Integration')} - ${link('https://github.com/code-pushup/cli/blob/main/packages/cli/README.md#portal-integration')}`)
21
+ .add(`${gray('❯')} ${gray('Upload Command')} - ${link('https://github.com/code-pushup/cli/blob/main/packages/cli/README.md#portal-integration')}`)
22
+ .render();
23
+ }
24
+ //# sourceMappingURL=logging.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logging.js","sourceRoot":"","sources":["../../../../../../packages/cli/src/lib/implementation/logging.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AACnC,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAC;AAE9C,MAAM,UAAU,6BAA6B;IAC3C,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CACd,IAAI,CACF,wEAAwE,IAAI,CAC1E,qEAAqE,CACtE,EAAE,CACJ,CACF,CAAC;AACJ,CAAC;AACD,MAAM,UAAU,mBAAmB,CAAC,GAAW;IAC7C,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAC1C,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,+BAA+B,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,yBAAyB;IACvC,EAAE,EAAE;SACD,OAAO,EAAE;SACT,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;SACzC,GAAG,CAAC,EAAE,CAAC;SACP,GAAG,CACF,GAAG,IAAI,CAAC,GAAG,CAAC,oCAAoC,IAAI,CAClD,wBAAwB,CACzB,EAAE,CACJ;SACA,GAAG,CACF,KAAK,IAAI,CACP,0EAA0E,CAC3E,EAAE,CACJ;SACA,GAAG,CACF,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,oBAAoB,CAAC,MAAM,IAAI,CAClD,wFAAwF,CACzF,EAAE,CACJ;SACA,GAAG,CACF,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,IAAI,CAC9C,wFAAwF,CACzF,EAAE,CACJ;SACA,MAAM,EAAE,CAAC;AACd,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=merge-diffs.model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge-diffs.model.js","sourceRoot":"","sources":["../../../../../../packages/cli/src/lib/implementation/merge-diffs.model.ts"],"names":[],"mappings":""}
@@ -1,3 +1,3 @@
1
1
  import type { Options } from 'yargs';
2
- import type { MergeDiffsOptions } from './merge-diffs.model';
2
+ import type { MergeDiffsOptions } from './merge-diffs.model.js';
3
3
  export declare function yargsMergeDiffsOptionsDefinition(): Record<keyof MergeDiffsOptions, Options>;
@@ -0,0 +1,10 @@
1
+ export function yargsMergeDiffsOptionsDefinition() {
2
+ return {
3
+ files: {
4
+ describe: 'List of report-diff.json paths',
5
+ type: 'array',
6
+ demandOption: true,
7
+ },
8
+ };
9
+ }
10
+ //# sourceMappingURL=merge-diffs.options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge-diffs.options.js","sourceRoot":"","sources":["../../../../../../packages/cli/src/lib/implementation/merge-diffs.options.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,gCAAgC;IAI9C,OAAO;QACL,KAAK,EAAE;YACL,QAAQ,EAAE,gCAAgC;YAC1C,IAAI,EAAE,OAAO;YACb,YAAY,EAAE,IAAI;SACnB;KACF,CAAC;AACJ,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import type { CategoryConfig, PluginConfig } from '@code-pushup/models';
2
- import type { FilterOptionType, Filterables } from './filter.model';
2
+ import type { FilterOptionType, Filterables } from './filter.model.js';
3
3
  export declare class OptionValidationError extends Error {
4
4
  }
5
5
  export declare function validateFilterOption(option: FilterOptionType, { plugins, categories }: Filterables, { itemsToFilter, verbose }: {
@@ -0,0 +1,86 @@
1
+ import { capitalize, filterItemRefsBy, pluralize, ui, } from '@code-pushup/utils';
2
+ export class OptionValidationError extends Error {
3
+ }
4
+ export function validateFilterOption(option, { plugins, categories = [] }, { itemsToFilter, verbose }) {
5
+ const itemsToFilterSet = new Set(itemsToFilter);
6
+ const validItems = isCategoryOption(option)
7
+ ? categories
8
+ : isPluginOption(option)
9
+ ? plugins
10
+ : [];
11
+ const invalidItems = itemsToFilter.filter(item => !validItems.some(({ slug }) => slug === item));
12
+ const message = createValidationMessage(option, invalidItems, validItems);
13
+ if (isOnlyOption(option) &&
14
+ itemsToFilterSet.size > 0 &&
15
+ itemsToFilterSet.size === invalidItems.length) {
16
+ throw new OptionValidationError(message);
17
+ }
18
+ if (invalidItems.length > 0) {
19
+ ui().logger.warning(message);
20
+ }
21
+ if (isPluginOption(option) && categories.length > 0 && verbose) {
22
+ const removedCategorySlugs = filterItemRefsBy(categories, ({ plugin }) => isOnlyOption(option)
23
+ ? !itemsToFilterSet.has(plugin)
24
+ : itemsToFilterSet.has(plugin)).map(({ slug }) => slug);
25
+ if (removedCategorySlugs.length > 0) {
26
+ ui().logger.info(`The --${option} argument removed the following categories: ${removedCategorySlugs.join(', ')}.`);
27
+ }
28
+ }
29
+ }
30
+ export function validateFinalState(filteredItems, originalItems) {
31
+ const { categories: filteredCategories = [], plugins: filteredPlugins } = filteredItems;
32
+ const { categories: originalCategories = [], plugins: originalPlugins } = originalItems;
33
+ if (filteredCategories.length === 0 &&
34
+ filteredPlugins.length === 0 &&
35
+ (originalPlugins.length > 0 || originalCategories.length > 0)) {
36
+ const availablePlugins = originalPlugins.map(p => p.slug).join(', ') || 'none';
37
+ const availableCategories = originalCategories.map(c => c.slug).join(', ') || 'none';
38
+ throw new OptionValidationError(`Nothing to report. No plugins or categories are available after filtering. Available plugins: ${availablePlugins}. Available categories: ${availableCategories}.`);
39
+ }
40
+ }
41
+ function isCategoryOption(option) {
42
+ return option.endsWith('Categories');
43
+ }
44
+ function isPluginOption(option) {
45
+ return option.endsWith('Plugins');
46
+ }
47
+ export function isOnlyOption(option) {
48
+ return option.startsWith('only');
49
+ }
50
+ export function getItemType(option, count) {
51
+ const itemType = isCategoryOption(option)
52
+ ? 'category'
53
+ : isPluginOption(option)
54
+ ? 'plugin'
55
+ : 'item';
56
+ return pluralize(itemType, count);
57
+ }
58
+ export function createValidationMessage(option, invalidItems, validItems) {
59
+ const invalidItem = getItemType(option, invalidItems.length);
60
+ const invalidItemText = invalidItems.length === 1
61
+ ? `a ${invalidItem} that does not exist:`
62
+ : `${invalidItem} that do not exist:`;
63
+ const invalidSlugs = invalidItems.join(', ');
64
+ const validItem = getItemType(option, validItems.length);
65
+ const validItemText = validItems.length === 1
66
+ ? `The only valid ${validItem} is`
67
+ : `Valid ${validItem} are`;
68
+ const validSlugs = validItems.map(({ slug }) => slug).join(', ');
69
+ return `The --${option} argument references ${invalidItemText} ${invalidSlugs}. ${validItemText} ${validSlugs}.`;
70
+ }
71
+ export function handleConflictingOptions(type, onlyItems, skipItems) {
72
+ const conflictingItems = onlyItems.filter(item => skipItems.includes(item));
73
+ if (conflictingItems.length > 0) {
74
+ const conflictSubject = () => {
75
+ switch (type) {
76
+ case 'categories':
77
+ return conflictingItems.length > 1 ? 'categories are' : 'category is';
78
+ case 'plugins':
79
+ return conflictingItems.length > 1 ? 'plugins are' : 'plugin is';
80
+ }
81
+ };
82
+ const conflictingSlugs = conflictingItems.join(', ');
83
+ throw new OptionValidationError(`The following ${conflictSubject()} specified in both --only${capitalize(type)} and --skip${capitalize(type)}: ${conflictingSlugs}. Please choose one option.`);
84
+ }
85
+ }
86
+ //# sourceMappingURL=validate-filter-options.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-filter-options.utils.js","sourceRoot":"","sources":["../../../../../../packages/cli/src/lib/implementation/validate-filter-options.utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { bold, gray } from 'ansis';
2
+ import { mergeDiffs } from '@code-pushup/core';
3
+ import { ui } from '@code-pushup/utils';
4
+ import { CLI_NAME } from '../constants.js';
5
+ import { yargsMergeDiffsOptionsDefinition } from '../implementation/merge-diffs.options.js';
6
+ export function yargsMergeDiffsCommandObject() {
7
+ const command = 'merge-diffs';
8
+ return {
9
+ command,
10
+ describe: 'Combine many report diffs into a single diff file',
11
+ builder: yargsMergeDiffsOptionsDefinition(),
12
+ handler: async (args) => {
13
+ ui().logger.log(bold(CLI_NAME));
14
+ ui().logger.info(gray(`Run ${command}...`));
15
+ const options = args;
16
+ const { files, persist } = options;
17
+ const outputPath = await mergeDiffs(files, persist);
18
+ ui().logger.info(`Reports diff written to ${bold(outputPath)}`);
19
+ },
20
+ };
21
+ }
22
+ //# sourceMappingURL=merge-diffs-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge-diffs-command.js","sourceRoot":"","sources":["../../../../../../packages/cli/src/lib/merge-diffs/merge-diffs-command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAEnC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,OAAO,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,OAAO,EAAE,gCAAgC,EAAE,MAAM,0CAA0C,CAAC;AAE5F,MAAM,UAAU,4BAA4B;IAC1C,MAAM,OAAO,GAAG,aAAa,CAAC;IAC9B,OAAO;QACL,OAAO;QACP,QAAQ,EAAE,mDAAmD;QAC7D,OAAO,EAAE,gCAAgC,EAAE;QAC3C,OAAO,EAAE,KAAK,EAAE,IAAa,EAAE,EAAE;YAC/B,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YAChC,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,OAAO,KAAK,CAAC,CAAC,CAAC;YAE5C,MAAM,OAAO,GAAG,IAEf,CAAC;YACF,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;YAEnC,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YAEpD,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,2BAA2B,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAClE,CAAC;KACsB,CAAC;AAC5B,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { coreConfigMiddleware } from './implementation/core-config.middleware.js';
2
+ import { filterMiddleware } from './implementation/filter.middleware.js';
3
+ export const middlewares = [
4
+ {
5
+ middlewareFunction: coreConfigMiddleware,
6
+ applyBeforeValidation: false,
7
+ },
8
+ {
9
+ middlewareFunction: filterMiddleware,
10
+ applyBeforeValidation: false,
11
+ },
12
+ ];
13
+ //# sourceMappingURL=middlewares.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middlewares.js","sourceRoot":"","sources":["../../../../../packages/cli/src/lib/middlewares.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AAClF,OAAO,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AAEzE,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB;QACE,kBAAkB,EAAE,oBAAqD;QACzE,qBAAqB,EAAE,KAAK;KAC7B;IACD;QACE,kBAAkB,EAAE,gBAAiD;QACrE,qBAAqB,EAAE,KAAK;KAC7B;CACF,CAAC"}
@@ -10,9 +10,9 @@ export declare const options: {
10
10
  "upload.project": import("yargs").Options;
11
11
  "upload.apiKey": import("yargs").Options;
12
12
  "upload.server": import("yargs").Options;
13
- tsconfig: import("yargs").Options;
14
13
  progress: import("yargs").Options;
15
14
  verbose: import("yargs").Options;
15
+ tsconfig: import("yargs").Options;
16
16
  config: import("yargs").Options;
17
17
  };
18
18
  export declare const groups: {
@@ -0,0 +1,17 @@
1
+ import { yargsCoreConfigOptionsDefinition, yargsPersistConfigOptionsDefinition, yargsUploadConfigOptionsDefinition, } from './implementation/core-config.options.js';
2
+ import { yargsFilterOptionsDefinition } from './implementation/filter.options.js';
3
+ import { yargsGlobalOptionsDefinition } from './implementation/global.options.js';
4
+ export const options = {
5
+ ...yargsGlobalOptionsDefinition(),
6
+ ...yargsCoreConfigOptionsDefinition(),
7
+ ...yargsFilterOptionsDefinition(),
8
+ };
9
+ export const groups = {
10
+ 'Global Options:': [
11
+ ...Object.keys(yargsGlobalOptionsDefinition()),
12
+ ...Object.keys(yargsFilterOptionsDefinition()),
13
+ ],
14
+ 'Persist Options:': Object.keys(yargsPersistConfigOptionsDefinition()),
15
+ 'Upload Options:': Object.keys(yargsUploadConfigOptionsDefinition()),
16
+ };
17
+ //# sourceMappingURL=options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.js","sourceRoot":"","sources":["../../../../../packages/cli/src/lib/options.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gCAAgC,EAChC,mCAAmC,EACnC,kCAAkC,GACnC,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,4BAA4B,EAAE,MAAM,oCAAoC,CAAC;AAClF,OAAO,EAAE,4BAA4B,EAAE,MAAM,oCAAoC,CAAC;AAElF,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,GAAG,4BAA4B,EAAE;IACjC,GAAG,gCAAgC,EAAE;IACrC,GAAG,4BAA4B,EAAE;CAClC,CAAC;AAEF,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,iBAAiB,EAAE;QACjB,GAAG,MAAM,CAAC,IAAI,CAAC,4BAA4B,EAAE,CAAC;QAC9C,GAAG,MAAM,CAAC,IAAI,CAAC,4BAA4B,EAAE,CAAC;KAC/C;IACD,kBAAkB,EAAE,MAAM,CAAC,IAAI,CAAC,mCAAmC,EAAE,CAAC;IACtE,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,kCAAkC,EAAE,CAAC;CACrE,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { ui } from '@code-pushup/utils';
2
+ import { filterKebabCaseKeys } from '../implementation/global.utils.js';
3
+ export function yargsConfigCommandObject() {
4
+ const command = 'print-config';
5
+ return {
6
+ command,
7
+ describe: 'Print config',
8
+ handler: yargsArgs => {
9
+ const { _, $0, ...args } = yargsArgs;
10
+ // it is important to filter out kebab case keys
11
+ // because yargs duplicates options in camel case and kebab case
12
+ const cleanArgs = filterKebabCaseKeys(args);
13
+ ui().logger.log(JSON.stringify(cleanArgs, null, 2));
14
+ },
15
+ };
16
+ }
17
+ //# sourceMappingURL=print-config-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"print-config-command.js","sourceRoot":"","sources":["../../../../../../packages/cli/src/lib/print-config/print-config-command.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAExE,MAAM,UAAU,wBAAwB;IACtC,MAAM,OAAO,GAAG,cAAc,CAAC;IAC/B,OAAO;QACL,OAAO;QACP,QAAQ,EAAE,cAAc;QACxB,OAAO,EAAE,SAAS,CAAC,EAAE;YACnB,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,GAAG,SAAS,CAAC;YACrC,gDAAgD;YAChD,gEAAgE;YAChE,MAAM,SAAS,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;YAC5C,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACtD,CAAC;KACsB,CAAC;AAC5B,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { bold, gray } from 'ansis';
2
+ import { upload } from '@code-pushup/core';
3
+ import { ui } from '@code-pushup/utils';
4
+ import { CLI_NAME } from '../constants.js';
5
+ import { renderIntegratePortalHint, uploadSuccessfulLog, } from '../implementation/logging.js';
6
+ export function yargsUploadCommandObject() {
7
+ const command = 'upload';
8
+ return {
9
+ command,
10
+ describe: 'Upload report results to the portal',
11
+ handler: async (args) => {
12
+ ui().logger.log(bold(CLI_NAME));
13
+ ui().logger.info(gray(`Run ${command}...`));
14
+ const options = args;
15
+ if (options.upload == null) {
16
+ renderIntegratePortalHint();
17
+ throw new Error('Upload configuration not set');
18
+ }
19
+ const report = await upload(options);
20
+ if (report?.url) {
21
+ uploadSuccessfulLog(report.url);
22
+ }
23
+ },
24
+ };
25
+ }
26
+ //# sourceMappingURL=upload-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload-command.js","sourceRoot":"","sources":["../../../../../../packages/cli/src/lib/upload/upload-command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAEnC,OAAO,EAAsB,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EACL,yBAAyB,EACzB,mBAAmB,GACpB,MAAM,8BAA8B,CAAC;AAEtC,MAAM,UAAU,wBAAwB;IACtC,MAAM,OAAO,GAAG,QAAQ,CAAC;IACzB,OAAO;QACL,OAAO;QACP,QAAQ,EAAE,qCAAqC;QAC/C,OAAO,EAAE,KAAK,EAAK,IAA2B,EAAE,EAAE;YAChD,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YAChC,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,OAAO,KAAK,CAAC,CAAC,CAAC;YAE5C,MAAM,OAAO,GAAG,IAAgC,CAAC;YACjD,IAAI,OAAO,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC;gBAC3B,yBAAyB,EAAE,CAAC;gBAC5B,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;YAClD,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC;YACrC,IAAI,MAAM,EAAE,GAAG,EAAE,CAAC;gBAChB,mBAAmB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;KACsB,CAAC;AAC5B,CAAC"}