1 | ;
|
2 | var __importDefault = (this && this.__importDefault) || function (mod) {
|
3 | return (mod && mod.__esModule) ? mod : { "default": mod };
|
4 | };
|
5 | Object.defineProperty(exports, "__esModule", { value: true });
|
6 | const configuration_base_1 = __importDefault(require("./configuration-base"));
|
7 | const lodash_1 = require("lodash");
|
8 | const get_options_1 = require("../utils/get-options");
|
9 | const option_names_1 = __importDefault(require("./option-names"));
|
10 | const get_filter_fn_1 = __importDefault(require("../utils/get-filter-fn"));
|
11 | const prepare_reporters_1 = __importDefault(require("../utils/prepare-reporters"));
|
12 | const string_1 = require("../utils/string");
|
13 | const render_template_1 = __importDefault(require("../utils/render-template"));
|
14 | const warning_message_1 = __importDefault(require("../notifications/warning-message"));
|
15 | const resolve_path_relatively_cwd_1 = __importDefault(require("../utils/resolve-path-relatively-cwd"));
|
16 | const default_values_1 = require("./default-values");
|
17 | const option_source_1 = __importDefault(require("./option-source"));
|
18 | const CONFIGURATION_FILENAME = '.testcaferc.json';
|
19 | const DEFAULT_SCREENSHOTS_DIRECTORY = 'screenshots';
|
20 | const OPTION_FLAG_NAMES = [
|
21 | option_names_1.default.skipJsErrors,
|
22 | option_names_1.default.quarantineMode,
|
23 | option_names_1.default.debugMode,
|
24 | option_names_1.default.debugOnFail,
|
25 | option_names_1.default.skipUncaughtErrors,
|
26 | option_names_1.default.stopOnFirstFail,
|
27 | option_names_1.default.takeScreenshotsOnFails,
|
28 | option_names_1.default.disablePageCaching,
|
29 | option_names_1.default.disablePageReloads,
|
30 | option_names_1.default.disableScreenshots,
|
31 | option_names_1.default.allowMultipleWindows
|
32 | ];
|
33 | const OPTION_INIT_FLAG_NAMES = [
|
34 | option_names_1.default.developmentMode,
|
35 | option_names_1.default.retryTestPages,
|
36 | ];
|
37 | class TestCafeConfiguration extends configuration_base_1.default {
|
38 | constructor() {
|
39 | super(CONFIGURATION_FILENAME);
|
40 | }
|
41 | async init(options = {}) {
|
42 | await super.init();
|
43 | const opts = await this._load();
|
44 | if (opts) {
|
45 | this._options = configuration_base_1.default._fromObj(opts);
|
46 | await this._normalizeOptionsAfterLoad();
|
47 | }
|
48 | this.mergeOptions(options);
|
49 | }
|
50 | prepare() {
|
51 | this._prepareFlags();
|
52 | this._setDefaultValues();
|
53 | }
|
54 | notifyAboutOverriddenOptions() {
|
55 | if (!this._overriddenOptions.length)
|
56 | return;
|
57 | const optionsStr = string_1.getConcatenatedValuesString(this._overriddenOptions);
|
58 | const optionsSuffix = string_1.getPluralSuffix(this._overriddenOptions);
|
59 | configuration_base_1.default._showConsoleWarning(render_template_1.default(warning_message_1.default.configOptionsWereOverriden, optionsStr, optionsSuffix));
|
60 | this._overriddenOptions = [];
|
61 | }
|
62 | get startOptions() {
|
63 | const result = {
|
64 | hostname: this.getOption('hostname'),
|
65 | port1: this.getOption('port1'),
|
66 | port2: this.getOption('port2'),
|
67 | options: {
|
68 | ssl: this.getOption('ssl'),
|
69 | developmentMode: this.getOption('developmentMode'),
|
70 | retryTestPages: this.getOption('retryTestPages')
|
71 | }
|
72 | };
|
73 | if (result.options.retryTestPages)
|
74 | result.options.staticContentCaching = default_values_1.STATIC_CONTENT_CACHING_SETTINGS;
|
75 | return result;
|
76 | }
|
77 | _prepareFlag(name) {
|
78 | const option = this._ensureOption(name, void 0, option_source_1.default.Configuration);
|
79 | option.value = !!option.value;
|
80 | }
|
81 | _prepareFlags() {
|
82 | OPTION_FLAG_NAMES.forEach(name => this._prepareFlag(name));
|
83 | }
|
84 | _prepareInitFlags() {
|
85 | OPTION_INIT_FLAG_NAMES.forEach(name => this._prepareFlag(name));
|
86 | }
|
87 | async _normalizeOptionsAfterLoad() {
|
88 | await this._prepareSslOptions();
|
89 | this._prepareInitFlags();
|
90 | this._prepareFilterFn();
|
91 | this._ensureArrayOption(option_names_1.default.src);
|
92 | this._ensureArrayOption(option_names_1.default.browsers);
|
93 | this._ensureArrayOption(option_names_1.default.clientScripts);
|
94 | this._prepareReporters();
|
95 | }
|
96 | _prepareFilterFn() {
|
97 | const filterOption = this._ensureOption(option_names_1.default.filter, null, option_source_1.default.Configuration);
|
98 | if (!filterOption.value)
|
99 | return;
|
100 | const filterOptionValue = filterOption.value;
|
101 | if (filterOptionValue.testGrep)
|
102 | filterOptionValue.testGrep = get_options_1.getGrepOptions(option_names_1.default.filterTestGrep, filterOptionValue.testGrep);
|
103 | if (filterOptionValue.fixtureGrep)
|
104 | filterOptionValue.fixtureGrep = get_options_1.getGrepOptions(option_names_1.default.filterFixtureGrep, filterOptionValue.fixtureGrep);
|
105 | filterOption.value = get_filter_fn_1.default(filterOption.value);
|
106 | }
|
107 | _ensureScreenshotPath() {
|
108 | const path = resolve_path_relatively_cwd_1.default(DEFAULT_SCREENSHOTS_DIRECTORY);
|
109 | const screenshots = this._ensureOption(option_names_1.default.screenshots, {}, option_source_1.default.Configuration).value;
|
110 | if (!screenshots.path)
|
111 | screenshots.path = path;
|
112 | }
|
113 | _prepareReporters() {
|
114 | const reporterOption = this._options[option_names_1.default.reporter];
|
115 | if (!reporterOption)
|
116 | return;
|
117 | const optionValue = lodash_1.castArray(reporterOption.value);
|
118 | reporterOption.value = prepare_reporters_1.default(optionValue);
|
119 | }
|
120 | async _prepareSslOptions() {
|
121 | const sslOptions = this._options[option_names_1.default.ssl];
|
122 | if (!sslOptions)
|
123 | return;
|
124 | sslOptions.value = await get_options_1.getSSLOptions(sslOptions.value);
|
125 | }
|
126 | _setDefaultValues() {
|
127 | this._ensureOptionWithValue(option_names_1.default.selectorTimeout, default_values_1.DEFAULT_TIMEOUT.selector, option_source_1.default.Configuration);
|
128 | this._ensureOptionWithValue(option_names_1.default.assertionTimeout, default_values_1.DEFAULT_TIMEOUT.assertion, option_source_1.default.Configuration);
|
129 | this._ensureOptionWithValue(option_names_1.default.pageLoadTimeout, default_values_1.DEFAULT_TIMEOUT.pageLoad, option_source_1.default.Configuration);
|
130 | this._ensureOptionWithValue(option_names_1.default.speed, default_values_1.DEFAULT_SPEED_VALUE, option_source_1.default.Configuration);
|
131 | this._ensureOptionWithValue(option_names_1.default.appInitDelay, default_values_1.DEFAULT_APP_INIT_DELAY, option_source_1.default.Configuration);
|
132 | this._ensureOptionWithValue(option_names_1.default.concurrency, default_values_1.DEFAULT_CONCURRENCY_VALUE, option_source_1.default.Configuration);
|
133 | this._ensureOptionWithValue(option_names_1.default.src, default_values_1.DEFAULT_SOURCE_DIRECTORIES, option_source_1.default.Configuration);
|
134 | this._ensureOptionWithValue(option_names_1.default.developmentMode, default_values_1.DEFAULT_DEVELOPMENT_MODE, option_source_1.default.Configuration);
|
135 | this._ensureOptionWithValue(option_names_1.default.retryTestPages, default_values_1.DEFAULT_RETRY_TEST_PAGES, option_source_1.default.Configuration);
|
136 | this._ensureScreenshotPath();
|
137 | }
|
138 | static get FILENAME() {
|
139 | return CONFIGURATION_FILENAME;
|
140 | }
|
141 | }
|
142 | exports.default = TestCafeConfiguration;
|
143 | module.exports = exports.default;
|
144 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdGNhZmUtY29uZmlndXJhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25maWd1cmF0aW9uL3Rlc3RjYWZlLWNvbmZpZ3VyYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw4RUFBaUQ7QUFDakQsbUNBQW1DO0FBQ25DLHNEQUFxRTtBQUNyRSxrRUFBMEM7QUFDMUMsMkVBQWlEO0FBQ2pELG1GQUEwRDtBQUMxRCw0Q0FBK0U7QUFDL0UsK0VBQXNEO0FBQ3RELHVGQUFnRTtBQUNoRSx1R0FBNEU7QUFFNUUscURBUzBCO0FBRTFCLG9FQUEyQztBQUczQyxNQUFNLHNCQUFzQixHQUFHLGtCQUFrQixDQUFDO0FBRWxELE1BQU0sNkJBQTZCLEdBQUcsYUFBYSxDQUFDO0FBRXBELE1BQU0saUJBQWlCLEdBQUc7SUFDdEIsc0JBQVksQ0FBQyxZQUFZO0lBQ3pCLHNCQUFZLENBQUMsY0FBYztJQUMzQixzQkFBWSxDQUFDLFNBQVM7SUFDdEIsc0JBQVksQ0FBQyxXQUFXO0lBQ3hCLHNCQUFZLENBQUMsa0JBQWtCO0lBQy9CLHNCQUFZLENBQUMsZUFBZTtJQUM1QixzQkFBWSxDQUFDLHNCQUFzQjtJQUNuQyxzQkFBWSxDQUFDLGtCQUFrQjtJQUMvQixzQkFBWSxDQUFDLGtCQUFrQjtJQUMvQixzQkFBWSxDQUFDLGtCQUFrQjtJQUMvQixzQkFBWSxDQUFDLG9CQUFvQjtDQUNwQyxDQUFDO0FBRUYsTUFBTSxzQkFBc0IsR0FBRztJQUMzQixzQkFBWSxDQUFDLGVBQWU7SUFDNUIsc0JBQVksQ0FBQyxjQUFjO0NBQzlCLENBQUM7QUFnQkYsTUFBcUIscUJBQXNCLFNBQVEsNEJBQWE7SUFDNUQ7UUFDSSxLQUFLLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRU0sS0FBSyxDQUFDLElBQUksQ0FBRSxPQUFPLEdBQUcsRUFBRTtRQUMzQixNQUFNLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztR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c0IsQ0FBQyxzQkFBWSxDQUFDLEdBQUcsRUFBRSwyQ0FBMEIsRUFBRSx1QkFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3RHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxzQkFBWSxDQUFDLGVBQWUsRUFBRSx5Q0FBd0IsRUFBRSx1QkFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2hILElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxzQkFBWSxDQUFDLGNBQWMsRUFBRSx5Q0FBd0IsRUFBRSx1QkFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRS9HLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFTSxNQUFNLEtBQUssUUFBUTtRQUN0QixPQUFPLHNCQUFzQixDQUFDO0lBQ2xDLENBQUM7Q0FDSjtBQTdJRCx3Q0E2SUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQ29uZmlndXJhdGlvbiBmcm9tICcuL2NvbmZpZ3VyYXRpb24tYmFzZSc7XG5pbXBvcnQgeyBjYXN0QXJyYXkgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgZ2V0R3JlcE9wdGlvbnMsIGdldFNTTE9wdGlvbnMgfSBmcm9tICcuLi91dGlscy9nZXQtb3B0aW9ucyc7XG5pbXBvcnQgT1BUSU9OX05BTUVTIGZyb20gJy4vb3B0aW9uLW5hbWVzJztcbmltcG9ydCBnZXRGaWx0ZXJGbiBmcm9tICcuLi91dGlscy9nZXQtZmlsdGVyLWZuJztcbmltcG9ydCBwcmVwYXJlUmVwb3J0ZXJzIGZyb20gJy4uL3V0aWxzL3ByZXBhcmUtcmVwb3J0ZXJzJztcbmltcG9ydCB7IGdldENvbmNhdGVuYXRlZFZhbHVlc1N0cmluZywgZ2V0UGx1cmFsU3VmZml4IH0gZnJvbSAnLi4vdXRpbHMvc3RyaW5nJztcbmltcG9ydCByZW5kZXJUZW1wbGF0ZSBmcm9tICcuLi91dGlscy9yZW5kZXItdGVtcGxhdGUnO1xuaW1wb3J0IFdBUk5JTkdfTUVTU0FHRVMgZnJvbSAnLi4vbm90aWZpY2F0aW9ucy93YXJuaW5nLW1lc3NhZ2UnO1xuaW1wb3J0IHJlc29sdmVQYXRoUmVsYXRpdmVseUN3ZCBmcm9tICcuLi91dGlscy9yZXNvbHZlLXBhdGgtcmVsYXRpdmVseS1jd2QnO1xuXG5pbXBvcnQge1xuICAgIERFRkFVTFRfQVBQX0lOSVRfREVMQVksXG4gICAgREVGQVVMVF9DT05DVVJSRU5DWV9WQUxVRSxcbiAgICBERUZBVUxUX1NQRUVEX1ZBTFVFLFxuICAgIERFRkFVTFRfVElNRU9VVCxcbiAgICBERUZBVUxUX1NPVVJDRV9ESVJFQ1RPUklFUyxcbiAgICBERUZBVUxUX0RFVkVMT1BNRU5UX01PREUsXG4gICAgREVGQVVMVF9SRVRSWV9URVNUX1BBR0VTLFxuICAgIFNUQVRJQ19DT05URU5UX0NBQ0hJTkdfU0VUVElOR1Ncbn0gZnJvbSAnLi9kZWZhdWx0LXZhbHVlcyc7XG5cbmltcG9ydCBPcHRpb25Tb3VyY2UgZnJvbSAnLi9vcHRpb24tc291cmNlJztcbmltcG9ydCB7IERpY3Rpb25hcnksIEZpbHRlck9wdGlvbiwgUmVwb3J0ZXJPcHRpb24sIFN0YXRpY0NvbnRlbnRDYWNoaW5nT3B0aW9ucyB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5cbmNvbnN0IENPTkZJR1VSQVRJT05fRklMRU5BTUUgPSAnLnRlc3RjYWZlcmMuanNvbic7XG5cbmNvbnN0IERFRkFVTFRfU0NSRUVOU0hPVFNfRElSRUNUT1JZID0gJ3NjcmVlbnNob3RzJztcblxuY29uc3QgT1BUSU9OX0ZMQUdfTkFNRVMgPSBbXG4gICAgT1BUSU9OX05BTUVTLnNraXBKc0Vycm9ycyxcbiAgICBPUFRJT05fTkFNRVMucXVhcmFudGluZU1vZGUsXG4gICAgT1BUSU9OX05BTUVTLmRlYnVnTW9kZSxcbiAgICBPUFRJT05fTkFNRVMuZGVidWdPbkZhaWwsXG4gICAgT1BUSU9OX05BTUVTLnNraXBVbmNhdWdodEVycm9ycyxcbiAgICBPUFRJT05fTkFNRVMuc3RvcE9uRmlyc3RGYWlsLFxuICAgIE9QVElPTl9OQU1FUy50YWtlU2NyZWVuc2hvdHNPbkZhaWxzLFxuICAgIE9QVElPTl9OQU1FUy5kaXNhYmxlUGFnZUNhY2hpbmcsXG4gICAgT1BUSU9OX05BTUVTLmRpc2FibGVQYWdlUmVsb2FkcyxcbiAgICBPUFRJT05fTkFNRVMuZGlzYWJsZVNjcmVlbnNob3RzLFxuICAgIE9QVElPTl9OQU1FUy5hbGxvd011bHRpcGxlV2luZG93c1xuXTtcblxuY29uc3QgT1BUSU9OX0lOSVRfRkxBR19OQU1FUyA9IFtcbiAgICBPUFRJT05fTkFNRVMuZGV2ZWxvcG1lbnRNb2RlLFxuICAgIE9QVElPTl9OQU1FUy5yZXRyeVRlc3RQYWdlcyxcbl07XG5cbmludGVyZmFjZSBUZXN0Q2FmZUFkZGl0aW9uYWxTdGFydE9wdGlvbnMge1xuICAgIHJldHJ5VGVzdFBhZ2VzOiBib29sZWFuO1xuICAgIHNzbDogc3RyaW5nO1xuICAgIHN0YXRpY0NvbnRlbnRDYWNoaW5nPzogU3RhdGljQ29udGVudENhY2hpbmdPcHRpb25zO1xuICAgIGRldmVsb3BtZW50TW9kZTogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIFRlc3RDYWZlU3RhcnRPcHRpb25zIHtcbiAgICBob3N0bmFtZT86IHN0cmluZztcbiAgICBwb3J0MT86IG51bWJlcjtcbiAgICBwb3J0Mj86IG51bWJlcjtcbiAgICBvcHRpb25zOiBUZXN0Q2FmZUFkZGl0aW9uYWxTdGFydE9wdGlvbnM7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlc3RDYWZlQ29uZmlndXJhdGlvbiBleHRlbmRzIENvbmZpZ3VyYXRpb24ge1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvciAoKSB7XG4gICAgICAgIHN1cGVyKENPTkZJR1VSQVRJT05fRklMRU5BTUUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBpbml0IChvcHRpb25zID0ge30pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgc3VwZXIuaW5pdCgpO1xuXG4gICAgICAgIGNvbnN0IG9wdHMgPSBhd2FpdCB0aGlzLl9sb2FkKCk7XG5cbiAgICAgICAgaWYgKG9wdHMpIHtcbiAgICAgICAgICAgIHRoaXMuX29wdGlvbnMgPSBDb25maWd1cmF0aW9uLl9mcm9tT2JqKG9wdHMpO1xuXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9ub3JtYWxpemVPcHRpb25zQWZ0ZXJMb2FkKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm1lcmdlT3B0aW9ucyhvcHRpb25zKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcHJlcGFyZSAoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3ByZXBhcmVGbGFncygpO1xuICAgICAgICB0aGlzLl9zZXREZWZhdWx0VmFsdWVzKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG5vdGlmeUFib3V0T3ZlcnJpZGRlbk9wdGlvbnMgKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuX292ZXJyaWRkZW5PcHRpb25zLmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBjb25zdCBvcHRpb25zU3RyICAgID0gZ2V0Q29uY2F0ZW5hdGVkVmFsdWVzU3RyaW5nKHRoaXMuX292ZXJyaWRkZW5PcHRpb25zKTtcbiAgICAgICAgY29uc3Qgb3B0aW9uc1N1ZmZpeCA9IGdldFBsdXJhbFN1ZmZpeCh0aGlzLl9vdmVycmlkZGVuT3B0aW9ucyk7XG5cbiAgICAgICAgQ29uZmlndXJhdGlvbi5fc2hvd0NvbnNvbGVXYXJuaW5nKHJlbmRlclRlbXBsYXRlKFdBUk5JTkdfTUVTU0FHRVMuY29uZmlnT3B0aW9uc1dlcmVPdmVycmlkZW4sIG9wdGlvbnNTdHIsIG9wdGlvbnNTdWZmaXgpKTtcblxuICAgICAgICB0aGlzLl9vdmVycmlkZGVuT3B0aW9ucyA9IFtdO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgc3RhcnRPcHRpb25zICgpOiBUZXN0Q2FmZVN0YXJ0T3B0aW9ucyB7XG4gICAgICAgIGNvbnN0IHJlc3VsdDogVGVzdENhZmVTdGFydE9wdGlvbnMgPSB7XG4gICAgICAgICAgICBob3N0bmFtZTogdGhpcy5nZXRPcHRpb24oJ2hvc3RuYW1lJykgYXMgc3RyaW5nLFxuICAgICAgICAgICAgcG9ydDE6ICAgIHRoaXMuZ2V0T3B0aW9uKCdwb3J0MScpIGFzIG51bWJlcixcbiAgICAgICAgICAgIHBvcnQyOiAgICB0aGlzLmdldE9wdGlvbigncG9ydDInKSBhcyBudW1iZXIsXG5cbiAgICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICBzc2w6ICAgICAgICAgICAgIHRoaXMuZ2V0T3B0aW9uKCdzc2wnKSBhcyBzdHJpbmcsXG4gICAgICAgICAgICAgICAgZGV2ZWxvcG1lbnRNb2RlOiB0aGlzLmdldE9wdGlvbignZGV2ZWxvcG1lbnRNb2RlJykgYXMgYm9vbGVhbixcbiAgICAgICAgICAgICAgICByZXRyeVRlc3RQYWdlczogIHRoaXMuZ2V0T3B0aW9uKCdyZXRyeVRlc3RQYWdlcycpIGFzIGJvb2xlYW5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAocmVzdWx0Lm9wdGlvbnMucmV0cnlUZXN0UGFnZXMpXG4gICAgICAgICAgICByZXN1bHQub3B0aW9ucy5zdGF0aWNDb250ZW50Q2FjaGluZyA9IFNUQVRJQ19DT05URU5UX0NBQ0hJTkdfU0VUVElOR1M7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9wcmVwYXJlRmxhZyAobmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG9wdGlvbiA9IHRoaXMuX2Vuc3VyZU9wdGlvbihuYW1lLCB2b2lkIDAsIE9wdGlvblNvdXJjZS5Db25maWd1cmF0aW9uKTtcblxuICAgICAgICBvcHRpb24udmFsdWUgPSAhIW9wdGlvbi52YWx1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9wcmVwYXJlRmxhZ3MgKCk6IHZvaWQge1xuICAgICAgICBPUFRJT05fRkxBR19OQU1FUy5mb3JFYWNoKG5hbWUgPT4gdGhpcy5fcHJlcGFyZUZsYWcobmFtZSkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3ByZXBhcmVJbml0RmxhZ3MgKCk6IHZvaWQge1xuICAgICAgICBPUFRJT05fSU5JVF9GTEFHX05BTUVTLmZvckVhY2gobmFtZSA9PiB0aGlzLl9wcmVwYXJlRmxhZyhuYW1lKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfbm9ybWFsaXplT3B0aW9uc0FmdGVyTG9hZCAoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuX3ByZXBhcmVTc2xPcHRpb25zKCk7XG4gICAgICAgIHRoaXMuX3ByZXBhcmVJbml0RmxhZ3MoKTtcbiAgICAgICAgdGhpcy5fcHJlcGFyZUZpbHRlckZuKCk7XG4gICAgICAgIHRoaXMuX2Vuc3VyZUFycmF5T3B0aW9uKE9QVElPTl9OQU1FUy5zcmMpO1xuICAgICAgICB0aGlzLl9lbnN1cmVBcnJheU9wdGlvbihPUFRJT05fTkFNRVMuYnJvd3NlcnMpO1xuICAgICAgICB0aGlzLl9lbnN1cmVBcnJheU9wdGlvbihPUFRJT05fTkFNRVMuY2xpZW50U2NyaXB0cyk7XG4gICAgICAgIHRoaXMuX3ByZXBhcmVSZXBvcnRlcnMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9wcmVwYXJlRmlsdGVyRm4gKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBmaWx0ZXJPcHRpb24gPSB0aGlzLl9lbnN1cmVPcHRpb24oT1BUSU9OX05BTUVTLmZpbHRlciwgbnVsbCwgT3B0aW9uU291cmNlLkNvbmZpZ3VyYXRpb24pO1xuXG4gICAgICAgIGlmICghZmlsdGVyT3B0aW9uLnZhbHVlKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGZpbHRlck9wdGlvblZhbHVlID0gZmlsdGVyT3B0aW9uLnZhbHVlIGFzIEZpbHRlck9wdGlvbjtcblxuICAgICAgICBpZiAoZmlsdGVyT3B0aW9uVmFsdWUudGVzdEdyZXApXG4gICAgICAgICAgICBmaWx0ZXJPcHRpb25WYWx1ZS50ZXN0R3JlcCA9IGdldEdyZXBPcHRpb25zKE9QVElPTl9OQU1FUy5maWx0ZXJUZXN0R3JlcCwgZmlsdGVyT3B0aW9uVmFsdWUudGVzdEdyZXAgYXMgc3RyaW5nKTtcblxuICAgICAgICBpZiAoZmlsdGVyT3B0aW9uVmFsdWUuZml4dHVyZUdyZXApXG4gICAgICAgICAgICBmaWx0ZXJPcHRpb25WYWx1ZS5maXh0dXJlR3JlcCA9IGdldEdyZXBPcHRpb25zKE9QVElPTl9OQU1FUy5maWx0ZXJGaXh0dXJlR3JlcCwgZmlsdGVyT3B0aW9uVmFsdWUuZml4dHVyZUdyZXAgYXMgc3RyaW5nKTtcblxuICAgICAgICBmaWx0ZXJPcHRpb24udmFsdWUgPSBnZXRGaWx0ZXJGbihmaWx0ZXJPcHRpb24udmFsdWUpIGFzIEZ1bmN0aW9uO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2Vuc3VyZVNjcmVlbnNob3RQYXRoICgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcGF0aCAgICAgICAgPSByZXNvbHZlUGF0aFJlbGF0aXZlbHlDd2QoREVGQVVMVF9TQ1JFRU5TSE9UU19ESVJFQ1RPUlkpO1xuICAgICAgICBjb25zdCBzY3JlZW5zaG90cyA9IHRoaXMuX2Vuc3VyZU9wdGlvbihPUFRJT05fTkFNRVMuc2NyZWVuc2hvdHMsIHt9LCBPcHRpb25Tb3VyY2UuQ29uZmlndXJhdGlvbikudmFsdWUgYXMgRGljdGlvbmFyeTxzdHJpbmc+O1xuXG4gICAgICAgIGlmICghc2NyZWVuc2hvdHMucGF0aClcbiAgICAgICAgICAgIHNjcmVlbnNob3RzLnBhdGggPSBwYXRoO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3ByZXBhcmVSZXBvcnRlcnMgKCk6IHZvaWQge1xuICAgICAgICBjb25zdCByZXBvcnRlck9wdGlvbiA9IHRoaXMuX29wdGlvbnNbT1BUSU9OX05BTUVTLnJlcG9ydGVyXTtcblxuICAgICAgICBpZiAoIXJlcG9ydGVyT3B0aW9uKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IG9wdGlvblZhbHVlID0gY2FzdEFycmF5KHJlcG9ydGVyT3B0aW9uLnZhbHVlIGFzIFJlcG9ydGVyT3B0aW9uKTtcblxuICAgICAgICByZXBvcnRlck9wdGlvbi52YWx1ZSA9IHByZXBhcmVSZXBvcnRlcnMob3B0aW9uVmFsdWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX3ByZXBhcmVTc2xPcHRpb25zICgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3Qgc3NsT3B0aW9ucyA9IHRoaXMuX29wdGlvbnNbT1BUSU9OX05BTUVTLnNzbF07XG5cbiAgICAgICAgaWYgKCFzc2xPcHRpb25zKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIHNzbE9wdGlvbnMudmFsdWUgPSBhd2FpdCBnZXRTU0xPcHRpb25zKHNzbE9wdGlvbnMudmFsdWUgYXMgc3RyaW5nKSBhcyBEaWN0aW9uYXJ5PHN0cmluZyB8IGJvb2xlYW4gfCBudW1iZXI+O1xuICAgIH1cblxuICAgIHByaXZhdGUgX3NldERlZmF1bHRWYWx1ZXMgKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9lbnN1cmVPcHRpb25XaXRoVmFsdWUoT1BUSU9OX05BTUVTLnNlbGVjdG9yVGltZW91dCwgREVGQVVMVF9USU1FT1VULnNlbGVjdG9yLCBPcHRpb25Tb3VyY2UuQ29uZmlndXJhdGlvbik7XG4gICAgICAgIHRoaXMuX2Vuc3VyZU9wdGlvbldpdGhWYWx1ZShPUFRJT05fTkFNRVMuYXNzZXJ0aW9uVGltZW91dCwgREVGQVVMVF9USU1FT1VULmFzc2VydGlvbiwgT3B0aW9uU291cmNlLkNvbmZpZ3VyYXRpb24pO1xuICAgICAgICB0aGlzLl9lbnN1cmVPcHRpb25XaXRoVmFsdWUoT1BUSU9OX05BTUVTLnBhZ2VMb2FkVGltZW91dCwgREVGQVVMVF9USU1FT1VULnBhZ2VMb2FkLCBPcHRpb25Tb3VyY2UuQ29uZmlndXJhdGlvbik7XG4gICAgICAgIHRoaXMuX2Vuc3VyZU9wdGlvbldpdGhWYWx1ZShPUFRJT05fTkFNRVMuc3BlZWQsIERFRkFVTFRfU1BFRURfVkFMVUUsIE9wdGlvblNvdXJjZS5Db25maWd1cmF0aW9uKTtcbiAgICAgICAgdGhpcy5fZW5zdXJlT3B0aW9uV2l0aFZhbHVlKE9QVElPTl9OQU1FUy5hcHBJbml0RGVsYXksIERFRkFVTFRfQVBQX0lOSVRfREVMQVksIE9wdGlvblNvdXJjZS5Db25maWd1cmF0aW9uKTtcbiAgICAgICAgdGhpcy5fZW5zdXJlT3B0aW9uV2l0aFZhbHVlKE9QVElPTl9OQU1FUy5jb25jdXJyZW5jeSwgREVGQVVMVF9DT05DVVJSRU5DWV9WQUxVRSwgT3B0aW9uU291cmNlLkNvbmZpZ3VyYXRpb24pO1xuICAgICAgICB0aGlzLl9lbnN1cmVPcHRpb25XaXRoVmFsdWUoT1BUSU9OX05BTUVTLnNyYywgREVGQVVMVF9TT1VSQ0VfRElSRUNUT1JJRVMsIE9wdGlvblNvdXJjZS5Db25maWd1cmF0aW9uKTtcbiAgICAgICAgdGhpcy5fZW5zdXJlT3B0aW9uV2l0aFZhbHVlKE9QVElPTl9OQU1FUy5kZXZlbG9wbWVudE1vZGUsIERFRkFVTFRfREVWRUxPUE1FTlRfTU9ERSwgT3B0aW9uU291cmNlLkNvbmZpZ3VyYXRpb24pO1xuICAgICAgICB0aGlzLl9lbnN1cmVPcHRpb25XaXRoVmFsdWUoT1BUSU9OX05BTUVTLnJldHJ5VGVzdFBhZ2VzLCBERUZBVUxUX1JFVFJZX1RFU1RfUEFHRVMsIE9wdGlvblNvdXJjZS5Db25maWd1cmF0aW9uKTtcblxuICAgICAgICB0aGlzLl9lbnN1cmVTY3JlZW5zaG90UGF0aCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0IEZJTEVOQU1FICgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gQ09ORklHVVJBVElPTl9GSUxFTkFNRTtcbiAgICB9XG59XG4iXX0= |
\ | No newline at end of file |