@code-pushup/cli 0.56.0 → 0.58.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 +10 -9
- package/src/index.js +6 -0
- package/src/index.js.map +1 -0
- package/src/lib/autorun/autorun-command.js +43 -0
- package/src/lib/autorun/autorun-command.js.map +1 -0
- package/src/lib/cli.js +40 -0
- package/src/lib/cli.js.map +1 -0
- package/src/lib/collect/collect-command.js +38 -0
- package/src/lib/collect/collect-command.js.map +1 -0
- package/src/lib/commands.js +21 -0
- package/src/lib/commands.js.map +1 -0
- package/src/lib/compare/compare-command.d.ts +1 -1
- package/src/lib/compare/compare-command.js +24 -0
- package/src/lib/compare/compare-command.js.map +1 -0
- package/src/lib/constants.js +3 -0
- package/src/lib/constants.js.map +1 -0
- package/src/lib/history/history-command.js +50 -0
- package/src/lib/history/history-command.js.map +1 -0
- package/src/lib/history/history.model.js +2 -0
- package/src/lib/history/history.model.js.map +1 -0
- package/src/lib/history/history.options.d.ts +1 -1
- package/src/lib/history/history.options.js +41 -0
- package/src/lib/history/history.options.js.map +1 -0
- package/src/lib/history/utils.d.ts +1 -1
- package/src/lib/history/utils.js +27 -0
- package/src/lib/history/utils.js.map +1 -0
- package/src/lib/implementation/compare.model.js +2 -0
- package/src/lib/implementation/compare.model.js.map +1 -0
- package/src/lib/implementation/compare.options.d.ts +1 -1
- package/src/lib/implementation/compare.options.js +19 -0
- package/src/lib/implementation/compare.options.js.map +1 -0
- package/src/lib/implementation/core-config.middleware.d.ts +3 -3
- package/src/lib/implementation/core-config.middleware.js +31 -0
- package/src/lib/implementation/core-config.middleware.js.map +1 -0
- package/src/lib/implementation/core-config.model.js +2 -0
- package/src/lib/implementation/core-config.model.js.map +1 -0
- package/src/lib/implementation/core-config.options.d.ts +1 -1
- package/src/lib/implementation/core-config.options.js +43 -0
- package/src/lib/implementation/core-config.options.js.map +1 -0
- package/src/lib/implementation/filter.middleware.d.ts +4 -1
- package/src/lib/implementation/filter.middleware.js +81 -0
- package/src/lib/implementation/filter.middleware.js.map +1 -0
- package/src/lib/implementation/filter.middleware.utils.d.ts +11 -0
- package/src/lib/implementation/filter.middleware.utils.js +41 -0
- package/src/lib/implementation/filter.middleware.utils.js.map +1 -0
- package/src/lib/implementation/filter.model.js +2 -0
- package/src/lib/implementation/filter.model.js.map +1 -0
- package/src/lib/implementation/filter.options.d.ts +1 -1
- package/src/lib/implementation/filter.options.js +36 -0
- package/src/lib/implementation/filter.options.js.map +1 -0
- package/src/lib/implementation/formatting.js +26 -0
- package/src/lib/implementation/formatting.js.map +1 -0
- package/src/lib/implementation/global.model.d.ts +1 -1
- package/src/lib/implementation/global.model.js +2 -0
- package/src/lib/implementation/global.model.js.map +1 -0
- package/src/lib/implementation/global.options.d.ts +1 -1
- package/src/lib/implementation/global.options.js +23 -0
- package/src/lib/implementation/global.options.js.map +1 -0
- package/src/lib/implementation/global.utils.js +45 -0
- package/src/lib/implementation/global.utils.js.map +1 -0
- package/src/lib/implementation/logging.js +24 -0
- package/src/lib/implementation/logging.js.map +1 -0
- package/src/lib/implementation/merge-diffs.model.js +2 -0
- package/src/lib/implementation/merge-diffs.model.js.map +1 -0
- package/src/lib/implementation/merge-diffs.options.d.ts +1 -1
- package/src/lib/implementation/merge-diffs.options.js +10 -0
- package/src/lib/implementation/merge-diffs.options.js.map +1 -0
- package/src/lib/implementation/validate-filter-options.utils.d.ts +7 -4
- package/src/lib/implementation/validate-filter-options.utils.js +119 -0
- package/src/lib/implementation/validate-filter-options.utils.js.map +1 -0
- package/src/lib/merge-diffs/merge-diffs-command.js +22 -0
- package/src/lib/merge-diffs/merge-diffs-command.js.map +1 -0
- package/src/lib/middlewares.js +13 -0
- package/src/lib/middlewares.js.map +1 -0
- package/src/lib/options.d.ts +1 -1
- package/src/lib/options.js +17 -0
- package/src/lib/options.js.map +1 -0
- package/src/lib/print-config/print-config-command.js +17 -0
- package/src/lib/print-config/print-config-command.js.map +1 -0
- package/src/lib/upload/upload-command.js +26 -0
- package/src/lib/upload/upload-command.js.map +1 -0
- package/src/lib/yargs-cli.js +105 -0
- package/src/lib/yargs-cli.js.map +1 -0
- package/index.js +0 -4262
|
@@ -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"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/* eslint-disable max-lines-per-function */
|
|
2
|
+
import { blue, dim, green } from 'ansis';
|
|
3
|
+
import { createRequire } from 'node:module';
|
|
4
|
+
import yargs, {} from 'yargs';
|
|
5
|
+
import { formatSchema } from '@code-pushup/models';
|
|
6
|
+
import { TERMINAL_WIDTH } from '@code-pushup/utils';
|
|
7
|
+
import { descriptionStyle, formatNestedValues, formatObjectValue, headerStyle, titleStyle, } from './implementation/formatting.js';
|
|
8
|
+
import { logErrorBeforeThrow } from './implementation/global.utils.js';
|
|
9
|
+
export const yargsDecorator = {
|
|
10
|
+
'Commands:': `${green('Commands')}:`,
|
|
11
|
+
'Options:': `${green('Options')}:`,
|
|
12
|
+
'Examples:': `${green('Examples')}:`,
|
|
13
|
+
boolean: blue('boolean'),
|
|
14
|
+
count: blue('count'),
|
|
15
|
+
string: blue('string'),
|
|
16
|
+
array: blue('array'),
|
|
17
|
+
required: blue('required'),
|
|
18
|
+
'default:': `${blue('default')}:`,
|
|
19
|
+
'choices:': `${blue('choices')}:`,
|
|
20
|
+
'aliases:': `${blue('aliases')}:`,
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* returns configurable yargs CLI for code-pushup
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* yargsCli(hideBin(process.argv))
|
|
27
|
+
* // bootstrap CLI; format arguments
|
|
28
|
+
* .argv;
|
|
29
|
+
*/
|
|
30
|
+
export function yargsCli(argv, cfg) {
|
|
31
|
+
const { usageMessage, scriptName, noExitProcess } = cfg;
|
|
32
|
+
const commands = cfg.commands ?? [];
|
|
33
|
+
const middlewares = cfg.middlewares ?? [];
|
|
34
|
+
const options = cfg.options ?? {};
|
|
35
|
+
const groups = cfg.groups ?? {};
|
|
36
|
+
const examples = cfg.examples ?? [];
|
|
37
|
+
const cli = yargs(argv);
|
|
38
|
+
const packageJson = createRequire(import.meta.url)('../../package.json');
|
|
39
|
+
// setup yargs
|
|
40
|
+
cli
|
|
41
|
+
.updateLocale(yargsDecorator)
|
|
42
|
+
// take minimum of TERMINAL_WIDTH or full width of the terminal
|
|
43
|
+
.wrap(Math.max(TERMINAL_WIDTH, cli.terminalWidth()))
|
|
44
|
+
.help('help', descriptionStyle('Show help'))
|
|
45
|
+
.alias('h', 'help')
|
|
46
|
+
.showHelpOnFail(false)
|
|
47
|
+
.version('version', dim `Show version`, packageJson.version)
|
|
48
|
+
.check(args => {
|
|
49
|
+
const persist = args['persist'];
|
|
50
|
+
return persist == null || validatePersistFormat(persist);
|
|
51
|
+
})
|
|
52
|
+
.parserConfiguration({
|
|
53
|
+
'strip-dashed': true,
|
|
54
|
+
})
|
|
55
|
+
.coerce('config', (config) => Array.isArray(config) ? config.at(-1) : config)
|
|
56
|
+
.options(formatNestedValues(options, 'describe'));
|
|
57
|
+
// usage message
|
|
58
|
+
if (usageMessage) {
|
|
59
|
+
cli.usage(titleStyle(usageMessage));
|
|
60
|
+
}
|
|
61
|
+
// script name
|
|
62
|
+
if (scriptName) {
|
|
63
|
+
cli.scriptName(scriptName);
|
|
64
|
+
}
|
|
65
|
+
// add examples
|
|
66
|
+
examples.forEach(([exampleName, description]) => cli.example(exampleName, descriptionStyle(description)));
|
|
67
|
+
// add groups
|
|
68
|
+
Object.entries(groups).forEach(([groupName, optionNames]) => cli.group(optionNames, headerStyle(groupName)));
|
|
69
|
+
// add middlewares
|
|
70
|
+
middlewares.forEach(({ middlewareFunction, applyBeforeValidation }) => {
|
|
71
|
+
cli.middleware(logErrorBeforeThrow(middlewareFunction), applyBeforeValidation);
|
|
72
|
+
});
|
|
73
|
+
// add commands
|
|
74
|
+
commands.forEach(commandObj => {
|
|
75
|
+
cli.command(formatObjectValue({
|
|
76
|
+
...commandObj,
|
|
77
|
+
handler: logErrorBeforeThrow(commandObj.handler),
|
|
78
|
+
...(typeof commandObj.builder === 'function' && {
|
|
79
|
+
builder: logErrorBeforeThrow(commandObj.builder),
|
|
80
|
+
}),
|
|
81
|
+
}, 'describe'));
|
|
82
|
+
});
|
|
83
|
+
// this flag should be set for tests and debugging purposes
|
|
84
|
+
// when there is an error and exitProcess is called, it suppresses the error message
|
|
85
|
+
// more info here: https://yargs.js.org/docs/#api-reference-exitprocessenable
|
|
86
|
+
if (noExitProcess) {
|
|
87
|
+
cli.exitProcess(false);
|
|
88
|
+
}
|
|
89
|
+
// return CLI object
|
|
90
|
+
return cli;
|
|
91
|
+
}
|
|
92
|
+
function validatePersistFormat(persist) {
|
|
93
|
+
try {
|
|
94
|
+
if (persist.format != null) {
|
|
95
|
+
persist.format
|
|
96
|
+
.flatMap(format => format.split(','))
|
|
97
|
+
.forEach(format => formatSchema.parse(format));
|
|
98
|
+
}
|
|
99
|
+
return true;
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
throw new Error(`Invalid persist.format option. Valid options are: ${Object.values(formatSchema.Values).join(', ')}`);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=yargs-cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"yargs-cli.js","sourceRoot":"","sources":["../../../../../packages/cli/src/lib/yargs-cli.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,EAMb,MAAM,OAAO,CAAC;AACf,OAAO,EAAsB,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,WAAW,EACX,UAAU,GACX,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAEvE,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,WAAW,EAAE,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG;IACpC,UAAU,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG;IAClC,WAAW,EAAE,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG;IACpC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC;IACxB,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC;IACpB,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC;IACtB,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC;IACpB,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC;IAC1B,UAAU,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG;IACjC,UAAU,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG;IACjC,UAAU,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG;CAClC,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,UAAU,QAAQ,CACtB,IAAc,EACd,GAYC;IAED,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,GAAG,GAAG,CAAC;IACxD,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC;IACpC,MAAM,WAAW,GAAG,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC;IAC1C,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;IAClC,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC;IAChC,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC;IACpC,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;IAExB,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAChD,oBAAoB,CACkB,CAAC;IAEzC,cAAc;IACd,GAAG;SACA,YAAY,CAAC,cAAc,CAAC;QAC7B,+DAA+D;SAC9D,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC;SACnD,IAAI,CAAC,MAAM,EAAE,gBAAgB,CAAC,WAAW,CAAC,CAAC;SAC3C,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC;SAClB,cAAc,CAAC,KAAK,CAAC;SACrB,OAAO,CAAC,SAAS,EAAE,GAAG,CAAA,cAAc,EAAE,WAAW,CAAC,OAAO,CAAC;SAC1D,KAAK,CAAC,IAAI,CAAC,EAAE;QACZ,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAA8B,CAAC;QAC7D,OAAO,OAAO,IAAI,IAAI,IAAI,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC3D,CAAC,CAAC;SACD,mBAAmB,CAAC;QACnB,cAAc,EAAE,IAAI;KACyB,CAAC;SAC/C,MAAM,CAAC,QAAQ,EAAE,CAAC,MAAyB,EAAE,EAAE,CAC9C,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAC/C;SACA,OAAO,CAAC,kBAAkB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;IAEpD,gBAAgB;IAChB,IAAI,YAAY,EAAE,CAAC;QACjB,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC;IACtC,CAAC;IAED,cAAc;IACd,IAAI,UAAU,EAAE,CAAC;QACf,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IAC7B,CAAC;IAED,eAAe;IACf,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE,EAAE,CAC9C,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,gBAAgB,CAAC,WAAW,CAAC,CAAC,CACxD,CAAC;IAEF,aAAa;IACb,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE,EAAE,CAC1D,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC,CAC/C,CAAC;IAEF,kBAAkB;IAClB,WAAW,CAAC,OAAO,CAAC,CAAC,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,EAAE,EAAE;QACpE,GAAG,CAAC,UAAU,CACZ,mBAAmB,CAAC,kBAAwC,CAAC,EAC7D,qBAAqB,CACtB,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,eAAe;IACf,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;QAC5B,GAAG,CAAC,OAAO,CACT,iBAAiB,CACf;YACE,GAAG,UAAU;YACb,OAAO,EAAE,mBAAmB,CAAC,UAAU,CAAC,OAAO,CAAC;YAChD,GAAG,CAAC,OAAO,UAAU,CAAC,OAAO,KAAK,UAAU,IAAI;gBAC9C,OAAO,EAAE,mBAAmB,CAAC,UAAU,CAAC,OAAO,CAAC;aACjD,CAAC;SACH,EACD,UAAU,CACX,CACF,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,2DAA2D;IAC3D,oFAAoF;IACpF,6EAA6E;IAC7E,IAAI,aAAa,EAAE,CAAC;QAClB,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IAED,oBAAoB;IACpB,OAAO,GAAyB,CAAC;AACnC,CAAC;AAED,SAAS,qBAAqB,CAAC,OAAsB;IACnD,IAAI,CAAC;QACH,IAAI,OAAO,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC;YAC3B,OAAO,CAAC,MAAM;iBACX,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;iBACpC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;QACnD,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CACb,qDAAqD,MAAM,CAAC,MAAM,CAChE,YAAY,CAAC,MAAM,CACpB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACf,CAAC;IACJ,CAAC;AACH,CAAC"}
|