appium 2.0.0-beta.24 → 2.0.0-beta.27
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/build/lib/appium-config.schema.json +278 -0
- package/build/lib/appium.js +45 -66
- package/build/lib/cli/args.js +19 -39
- package/build/lib/cli/driver-command.js +5 -9
- package/build/lib/cli/extension-command.js +73 -64
- package/build/lib/cli/extension.js +10 -23
- package/build/lib/cli/parser.js +9 -19
- package/build/lib/cli/plugin-command.js +5 -9
- package/build/lib/cli/utils.js +2 -4
- package/build/lib/config-file.js +5 -10
- package/build/lib/config.js +50 -20
- package/build/lib/constants.js +60 -0
- package/build/lib/extension/driver-config.js +190 -0
- package/build/lib/extension/extension-config.js +297 -0
- package/build/lib/extension/index.js +77 -0
- package/build/lib/extension/manifest.js +246 -0
- package/build/lib/extension/package-changed.js +68 -0
- package/build/lib/extension/plugin-config.js +87 -0
- package/build/lib/grid-register.js +2 -4
- package/build/lib/logger.js +2 -4
- package/build/lib/logsink.js +2 -4
- package/build/lib/main.js +42 -71
- package/build/lib/schema/appium-config-schema.js +2 -4
- package/build/lib/schema/arg-spec.js +11 -14
- package/build/lib/schema/cli-args.js +2 -4
- package/build/lib/schema/cli-transformers.js +2 -4
- package/build/lib/schema/index.js +2 -4
- package/build/lib/schema/keywords.js +2 -4
- package/build/lib/schema/schema.js +61 -37
- package/build/lib/utils.js +1 -32
- package/lib/appium.js +50 -68
- package/lib/cli/args.js +19 -23
- package/lib/cli/driver-command.js +10 -2
- package/lib/cli/extension-command.js +216 -135
- package/lib/cli/extension.js +7 -15
- package/lib/cli/parser.js +6 -14
- package/lib/cli/plugin-command.js +1 -2
- package/lib/config-file.js +12 -15
- package/lib/config.js +55 -24
- package/lib/constants.js +79 -0
- package/lib/extension/driver-config.js +230 -0
- package/lib/extension/extension-config.js +459 -0
- package/lib/extension/index.js +103 -0
- package/lib/extension/manifest.js +590 -0
- package/lib/extension/package-changed.js +64 -0
- package/lib/extension/plugin-config.js +111 -0
- package/lib/grid-register.js +4 -4
- package/lib/main.js +57 -93
- package/lib/schema/arg-spec.js +3 -3
- package/lib/schema/cli-args.js +1 -0
- package/lib/schema/keywords.js +1 -1
- package/lib/schema/schema.js +67 -29
- package/lib/utils.js +2 -32
- package/package.json +29 -21
- package/{postinstall.js → scripts/postinstall.js} +1 -1
- package/types/types.d.ts +70 -31
- package/bin/ios-webkit-debug-proxy-launcher.js +0 -71
- package/build/check-npm-pack-files.js +0 -23
- package/build/commands-yml/parse.js +0 -319
- package/build/commands-yml/validator.js +0 -130
- package/build/index.js +0 -19
- package/build/lib/cli/npm.js +0 -220
- package/build/lib/driver-config.js +0 -100
- package/build/lib/drivers.js +0 -100
- package/build/lib/ext-config-io.js +0 -165
- package/build/lib/extension-config.js +0 -320
- package/build/lib/plugin-config.js +0 -69
- package/build/lib/plugins.js +0 -18
- package/build/postinstall.js +0 -90
- package/build/test/cli/cli-e2e-specs.js +0 -221
- package/build/test/cli/cli-helpers.js +0 -86
- package/build/test/cli/cli-specs.js +0 -71
- package/build/test/cli/fixtures/test-driver/package.json +0 -27
- package/build/test/cli/schema-args-specs.js +0 -48
- package/build/test/cli/schema-e2e-specs.js +0 -47
- package/build/test/config-e2e-specs.js +0 -112
- package/build/test/config-file-e2e-specs.js +0 -209
- package/build/test/config-file-specs.js +0 -281
- package/build/test/config-specs.js +0 -246
- package/build/test/driver-e2e-specs.js +0 -435
- package/build/test/driver-specs.js +0 -386
- package/build/test/ext-config-io-specs.js +0 -181
- package/build/test/extension-config-specs.js +0 -365
- package/build/test/fixtures/allow-feat.txt +0 -5
- package/build/test/fixtures/caps.json +0 -3
- package/build/test/fixtures/config/allow-insecure.txt +0 -3
- package/build/test/fixtures/config/appium.config.bad-nodeconfig.json +0 -5
- package/build/test/fixtures/config/appium.config.bad.json +0 -32
- package/build/test/fixtures/config/appium.config.ext-good.json +0 -9
- package/build/test/fixtures/config/appium.config.ext-unknown-props.json +0 -10
- package/build/test/fixtures/config/appium.config.good.js +0 -40
- package/build/test/fixtures/config/appium.config.good.json +0 -33
- package/build/test/fixtures/config/appium.config.good.yaml +0 -30
- package/build/test/fixtures/config/appium.config.invalid.json +0 -31
- package/build/test/fixtures/config/appium.config.security-array.json +0 -5
- package/build/test/fixtures/config/appium.config.security-delimited.json +0 -5
- package/build/test/fixtures/config/appium.config.security-path.json +0 -5
- package/build/test/fixtures/config/driver-fake.config.json +0 -8
- package/build/test/fixtures/config/nodeconfig.json +0 -3
- package/build/test/fixtures/config/plugin-fake.config.json +0 -0
- package/build/test/fixtures/default-args.js +0 -35
- package/build/test/fixtures/deny-feat.txt +0 -5
- package/build/test/fixtures/driver.schema.js +0 -20
- package/build/test/fixtures/extensions.yaml +0 -27
- package/build/test/fixtures/flattened-schema.js +0 -532
- package/build/test/fixtures/plugin.schema.js +0 -20
- package/build/test/fixtures/schema-with-extensions.js +0 -28
- package/build/test/grid-register-specs.js +0 -74
- package/build/test/helpers.js +0 -75
- package/build/test/logger-specs.js +0 -76
- package/build/test/npm-specs.js +0 -20
- package/build/test/parser-specs.js +0 -319
- package/build/test/plugin-e2e-specs.js +0 -316
- package/build/test/schema/arg-spec-specs.js +0 -70
- package/build/test/schema/cli-args-specs.js +0 -408
- package/build/test/schema/schema-specs.js +0 -407
- package/build/test/utils-specs.js +0 -288
- package/lib/cli/npm.js +0 -251
- package/lib/driver-config.js +0 -101
- package/lib/drivers.js +0 -84
- package/lib/ext-config-io.js +0 -287
- package/lib/extension-config.js +0 -366
- package/lib/plugin-config.js +0 -63
- package/lib/plugins.js +0 -13
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
|
-
require("source-map-support/register");
|
|
6
|
-
|
|
7
|
-
var _helpers = require("../helpers");
|
|
8
|
-
|
|
9
|
-
var _sinon = _interopRequireDefault(require("sinon"));
|
|
10
|
-
|
|
11
|
-
var _schema = require("../../lib/schema/schema");
|
|
12
|
-
|
|
13
|
-
const expect = chai.expect;
|
|
14
|
-
describe('cli/schema-args', function () {
|
|
15
|
-
let schemaArgs;
|
|
16
|
-
let sandbox;
|
|
17
|
-
beforeEach(function () {
|
|
18
|
-
sandbox = _sinon.default.createSandbox();
|
|
19
|
-
schemaArgs = _helpers.rewiremock.proxy(() => require('../../lib/schema/cli-args'));
|
|
20
|
-
});
|
|
21
|
-
afterEach(function () {
|
|
22
|
-
sandbox.restore();
|
|
23
|
-
});
|
|
24
|
-
describe('toParserArgs()', function () {
|
|
25
|
-
describe('when called with no parameters', function () {
|
|
26
|
-
beforeEach(_schema.finalizeSchema);
|
|
27
|
-
afterEach(_schema.resetSchema);
|
|
28
|
-
it('should return a Map', function () {
|
|
29
|
-
expect(schemaArgs.toParserArgs()).to.be.an.instanceof(Map).and.have.property('size').that.is.above(0);
|
|
30
|
-
});
|
|
31
|
-
it('should generate metavars in SCREAMING_SNAKE_CASE', function () {
|
|
32
|
-
const argDefs = schemaArgs.toParserArgs();
|
|
33
|
-
const argDefsWithMetavar = [...argDefs].filter(arg => arg[1].metavar);
|
|
34
|
-
expect(argDefsWithMetavar).not.to.be.empty;
|
|
35
|
-
expect(argDefsWithMetavar.every(arg => /[A-Z_]+/.test(arg[1].metavar))).to.be.true;
|
|
36
|
-
});
|
|
37
|
-
});
|
|
38
|
-
describe('when schema has not yet been compiled', function () {
|
|
39
|
-
it('should throw', function () {
|
|
40
|
-
(0, _schema.resetSchema)();
|
|
41
|
-
expect(() => schemaArgs.toParserArgs()).to.throw(_schema.SchemaFinalizationError);
|
|
42
|
-
});
|
|
43
|
-
});
|
|
44
|
-
});
|
|
45
|
-
});require('source-map-support').install();
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvY2xpL3NjaGVtYS1hcmdzLXNwZWNzLmpzIl0sIm5hbWVzIjpbImV4cGVjdCIsImNoYWkiLCJkZXNjcmliZSIsInNjaGVtYUFyZ3MiLCJzYW5kYm94IiwiYmVmb3JlRWFjaCIsInNpbm9uIiwiY3JlYXRlU2FuZGJveCIsInJld2lyZW1vY2siLCJwcm94eSIsInJlcXVpcmUiLCJhZnRlckVhY2giLCJyZXN0b3JlIiwiZmluYWxpemVTY2hlbWEiLCJyZXNldFNjaGVtYSIsIml0IiwidG9QYXJzZXJBcmdzIiwidG8iLCJiZSIsImFuIiwiaW5zdGFuY2VvZiIsIk1hcCIsImFuZCIsImhhdmUiLCJwcm9wZXJ0eSIsInRoYXQiLCJpcyIsImFib3ZlIiwiYXJnRGVmcyIsImFyZ0RlZnNXaXRoTWV0YXZhciIsImZpbHRlciIsImFyZyIsIm1ldGF2YXIiLCJub3QiLCJlbXB0eSIsImV2ZXJ5IiwidGVzdCIsInRydWUiLCJ0aHJvdyIsIlNjaGVtYUZpbmFsaXphdGlvbkVycm9yIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxNQUFNLEdBQUdDLElBQUksQ0FBQ0QsTUFBcEI7QUFFQUUsUUFBUSxDQUFDLGlCQUFELEVBQW9CLFlBQVk7QUFFdEMsTUFBSUMsVUFBSjtBQUtBLE1BQUlDLE9BQUo7QUFFQUMsRUFBQUEsVUFBVSxDQUFDLFlBQVk7QUFDckJELElBQUFBLE9BQU8sR0FBR0UsZUFBTUMsYUFBTixFQUFWO0FBQ0FKLElBQUFBLFVBQVUsR0FBR0ssb0JBQVdDLEtBQVgsQ0FBaUIsTUFBTUMsT0FBTyxDQUFDLDJCQUFELENBQTlCLENBQWI7QUFDRCxHQUhTLENBQVY7QUFLQUMsRUFBQUEsU0FBUyxDQUFDLFlBQVk7QUFDcEJQLElBQUFBLE9BQU8sQ0FBQ1EsT0FBUjtBQUNELEdBRlEsQ0FBVDtBQUlBVixFQUFBQSxRQUFRLENBQUMsZ0JBQUQsRUFBbUIsWUFBWTtBQUNyQ0EsSUFBQUEsUUFBUSxDQUFDLGdDQUFELEVBQW1DLFlBQVk7QUFDckRHLE1BQUFBLFVBQVUsQ0FBQ1Esc0JBQUQsQ0FBVjtBQUVBRixNQUFBQSxTQUFTLENBQUNHLG1CQUFELENBQVQ7QUFFQUMsTUFBQUEsRUFBRSxDQUFDLHFCQUFELEVBQXdCLFlBQVk7QUFDcENmLFFBQUFBLE1BQU0sQ0FBQ0csVUFBVSxDQUFDYSxZQUFYLEVBQUQsQ0FBTixDQUFrQ0MsRUFBbEMsQ0FBcUNDLEVBQXJDLENBQXdDQyxFQUF4QyxDQUEyQ0MsVUFBM0MsQ0FBc0RDLEdBQXRELEVBQTJEQyxHQUEzRCxDQUErREMsSUFBL0QsQ0FBb0VDLFFBQXBFLENBQTZFLE1BQTdFLEVBQXFGQyxJQUFyRixDQUEwRkMsRUFBMUYsQ0FBNkZDLEtBQTdGLENBQW1HLENBQW5HO0FBQ0QsT0FGQyxDQUFGO0FBSUFaLE1BQUFBLEVBQUUsQ0FBQyxrREFBRCxFQUFxRCxZQUFZO0FBQ2pFLGNBQU1hLE9BQU8sR0FBR3pCLFVBQVUsQ0FBQ2EsWUFBWCxFQUFoQjtBQUNBLGNBQU1hLGtCQUFrQixHQUFHLENBQUMsR0FBR0QsT0FBSixFQUFhRSxNQUFiLENBQXFCQyxHQUFELElBQVNBLEdBQUcsQ0FBQyxDQUFELENBQUgsQ0FBT0MsT0FBcEMsQ0FBM0I7QUFDQWhDLFFBQUFBLE1BQU0sQ0FBQzZCLGtCQUFELENBQU4sQ0FBMkJJLEdBQTNCLENBQStCaEIsRUFBL0IsQ0FBa0NDLEVBQWxDLENBQXFDZ0IsS0FBckM7QUFFQWxDLFFBQUFBLE1BQU0sQ0FDSjZCLGtCQUFrQixDQUFDTSxLQUFuQixDQUEwQkosR0FBRCxJQUFTLFVBQVVLLElBQVYsQ0FBZUwsR0FBRyxDQUFDLENBQUQsQ0FBSCxDQUFPQyxPQUF0QixDQUFsQyxDQURJLENBQU4sQ0FFRWYsRUFGRixDQUVLQyxFQUZMLENBRVFtQixJQUZSO0FBR0QsT0FSQyxDQUFGO0FBU0QsS0FsQk8sQ0FBUjtBQW9CQW5DLElBQUFBLFFBQVEsQ0FBQyx1Q0FBRCxFQUEwQyxZQUFZO0FBQzVEYSxNQUFBQSxFQUFFLENBQUMsY0FBRCxFQUFpQixZQUFZO0FBQzdCO0FBQ0FmLFFBQUFBLE1BQU0sQ0FBQyxNQUFNRyxVQUFVLENBQUNhLFlBQVgsRUFBUCxDQUFOLENBQXdDQyxFQUF4QyxDQUEyQ3FCLEtBQTNDLENBQ0VDLCtCQURGO0FBR0QsT0FMQyxDQUFGO0FBTUQsS0FQTyxDQUFSO0FBUUQsR0E3Qk8sQ0FBUjtBQThCRCxDQWhETyxDQUFSIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtyZXdpcmVtb2NrfSBmcm9tICcuLi9oZWxwZXJzJztcbmltcG9ydCBzaW5vbiBmcm9tICdzaW5vbic7XG5pbXBvcnQge2ZpbmFsaXplU2NoZW1hLCByZXNldFNjaGVtYSwgU2NoZW1hRmluYWxpemF0aW9uRXJyb3J9IGZyb20gJy4uLy4uL2xpYi9zY2hlbWEvc2NoZW1hJztcblxuY29uc3QgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5cbmRlc2NyaWJlKCdjbGkvc2NoZW1hLWFyZ3MnLCBmdW5jdGlvbiAoKSB7XG4gIC8qKiBAdHlwZSB7aW1wb3J0KCcuLi8uLi9saWIvc2NoZW1hL2NsaS1hcmdzJyl9ICovXG4gIGxldCBzY2hlbWFBcmdzO1xuXG4gIC8qKlxuICAgKiBAdHlwZSB7aW1wb3J0KCdzaW5vbicpLlNpbm9uU2FuZGJveH1cbiAgICovXG4gIGxldCBzYW5kYm94O1xuXG4gIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgIHNhbmRib3ggPSBzaW5vbi5jcmVhdGVTYW5kYm94KCk7XG4gICAgc2NoZW1hQXJncyA9IHJld2lyZW1vY2sucHJveHkoKCkgPT4gcmVxdWlyZSgnLi4vLi4vbGliL3NjaGVtYS9jbGktYXJncycpKTtcbiAgfSk7XG5cbiAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICBzYW5kYm94LnJlc3RvcmUoKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3RvUGFyc2VyQXJncygpJywgZnVuY3Rpb24gKCkge1xuICAgIGRlc2NyaWJlKCd3aGVuIGNhbGxlZCB3aXRoIG5vIHBhcmFtZXRlcnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBiZWZvcmVFYWNoKGZpbmFsaXplU2NoZW1hKTtcblxuICAgICAgYWZ0ZXJFYWNoKHJlc2V0U2NoZW1hKTtcblxuICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBNYXAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGV4cGVjdChzY2hlbWFBcmdzLnRvUGFyc2VyQXJncygpKS50by5iZS5hbi5pbnN0YW5jZW9mKE1hcCkuYW5kLmhhdmUucHJvcGVydHkoJ3NpemUnKS50aGF0LmlzLmFib3ZlKDApO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgbWV0YXZhcnMgaW4gU0NSRUFNSU5HX1NOQUtFX0NBU0UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGFyZ0RlZnMgPSBzY2hlbWFBcmdzLnRvUGFyc2VyQXJncygpO1xuICAgICAgICBjb25zdCBhcmdEZWZzV2l0aE1ldGF2YXIgPSBbLi4uYXJnRGVmc10uZmlsdGVyKChhcmcpID0+IGFyZ1sxXS5tZXRhdmFyKTtcbiAgICAgICAgZXhwZWN0KGFyZ0RlZnNXaXRoTWV0YXZhcikubm90LnRvLmJlLmVtcHR5O1xuICAgICAgICAvLyBpcyB0aGVyZSBhIG1vcmUgaWRpb21hdGljIHdheSB0byBkbyB0aGlzP1xuICAgICAgICBleHBlY3QoXG4gICAgICAgICAgYXJnRGVmc1dpdGhNZXRhdmFyLmV2ZXJ5KChhcmcpID0+IC9bQS1aX10rLy50ZXN0KGFyZ1sxXS5tZXRhdmFyKSksXG4gICAgICAgICkudG8uYmUudHJ1ZTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3doZW4gc2NoZW1hIGhhcyBub3QgeWV0IGJlZW4gY29tcGlsZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnc2hvdWxkIHRocm93JywgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXNldFNjaGVtYSgpO1xuICAgICAgICBleHBlY3QoKCkgPT4gc2NoZW1hQXJncy50b1BhcnNlckFyZ3MoKSkudG8udGhyb3coXG4gICAgICAgICAgU2NoZW1hRmluYWxpemF0aW9uRXJyb3JcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl0sImZpbGUiOiJ0ZXN0L2NsaS9zY2hlbWEtYXJncy1zcGVjcy5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
|
-
require("source-map-support/register");
|
|
6
|
-
|
|
7
|
-
var _path = _interopRequireDefault(require("path"));
|
|
8
|
-
|
|
9
|
-
var _support = require("@appium/support");
|
|
10
|
-
|
|
11
|
-
var _cliHelpers = require("./cli-helpers");
|
|
12
|
-
|
|
13
|
-
const {
|
|
14
|
-
expect
|
|
15
|
-
} = chai;
|
|
16
|
-
describe('CLI behavior controlled by schema', function () {
|
|
17
|
-
let appiumHome;
|
|
18
|
-
before(async function () {
|
|
19
|
-
appiumHome = await _support.tempDir.openDir();
|
|
20
|
-
});
|
|
21
|
-
after(async function () {
|
|
22
|
-
await _support.fs.rimraf(appiumHome);
|
|
23
|
-
});
|
|
24
|
-
describe('keyword', function () {
|
|
25
|
-
let help;
|
|
26
|
-
before(async function () {
|
|
27
|
-
await (0, _cliHelpers.installLocalExtension)(appiumHome, 'driver', _path.default.join(__dirname, 'fixtures', 'test-driver'));
|
|
28
|
-
help = await (0, _cliHelpers.runAppium)(appiumHome, ['server', '--help']);
|
|
29
|
-
});
|
|
30
|
-
describe('appiumCliIgnored', function () {
|
|
31
|
-
it('should still support arguments without this keyword', function () {
|
|
32
|
-
expect(help).to.match(/oliver-boliver/);
|
|
33
|
-
});
|
|
34
|
-
it('should cause the argument to be suppressed', function () {
|
|
35
|
-
expect(help).not.to.match(/mcmonkey-mcbean/);
|
|
36
|
-
});
|
|
37
|
-
});
|
|
38
|
-
describe('appiumDeprecated', function () {
|
|
39
|
-
it('should mark the argument as deprecated', function () {
|
|
40
|
-
expect(help).to.match(/\[DEPRECATED\] funkytelechy/);
|
|
41
|
-
});
|
|
42
|
-
});
|
|
43
|
-
});
|
|
44
|
-
});require('source-map-support').install();
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvY2xpL3NjaGVtYS1lMmUtc3BlY3MuanMiXSwibmFtZXMiOlsiZXhwZWN0IiwiY2hhaSIsImRlc2NyaWJlIiwiYXBwaXVtSG9tZSIsImJlZm9yZSIsInRlbXBEaXIiLCJvcGVuRGlyIiwiYWZ0ZXIiLCJmcyIsInJpbXJhZiIsImhlbHAiLCJwYXRoIiwiam9pbiIsIl9fZGlybmFtZSIsIml0IiwidG8iLCJtYXRjaCIsIm5vdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTTtBQUFDQSxFQUFBQTtBQUFELElBQVdDLElBQWpCO0FBRUFDLFFBQVEsQ0FBQyxtQ0FBRCxFQUFzQyxZQUFZO0FBSXhELE1BQUlDLFVBQUo7QUFFQUMsRUFBQUEsTUFBTSxDQUFDLGtCQUFrQjtBQUN2QkQsSUFBQUEsVUFBVSxHQUFHLE1BQU1FLGlCQUFRQyxPQUFSLEVBQW5CO0FBQ0QsR0FGSyxDQUFOO0FBSUFDLEVBQUFBLEtBQUssQ0FBQyxrQkFBa0I7QUFDdEIsVUFBTUMsWUFBR0MsTUFBSCxDQUFVTixVQUFWLENBQU47QUFDRCxHQUZJLENBQUw7QUFJQUQsRUFBQUEsUUFBUSxDQUFDLFNBQUQsRUFBWSxZQUFZO0FBSTlCLFFBQUlRLElBQUo7QUFFQU4sSUFBQUEsTUFBTSxDQUFDLGtCQUFrQjtBQUN2QixZQUFNLHVDQUNKRCxVQURJLEVBRUosUUFGSSxFQUdKUSxjQUFLQyxJQUFMLENBQVVDLFNBQVYsRUFBcUIsVUFBckIsRUFBaUMsYUFBakMsQ0FISSxDQUFOO0FBS0FILE1BQUFBLElBQUksR0FBRyxNQUFNLDJCQUFVUCxVQUFWLEVBQXNCLENBQUMsUUFBRCxFQUFXLFFBQVgsQ0FBdEIsQ0FBYjtBQUNELEtBUEssQ0FBTjtBQVNBRCxJQUFBQSxRQUFRLENBQUMsa0JBQUQsRUFBcUIsWUFBWTtBQUN2Q1ksTUFBQUEsRUFBRSxDQUFDLHFEQUFELEVBQXdELFlBQVk7QUFDcEVkLFFBQUFBLE1BQU0sQ0FBQ1UsSUFBRCxDQUFOLENBQWFLLEVBQWIsQ0FBZ0JDLEtBQWhCLENBQXNCLGdCQUF0QjtBQUNELE9BRkMsQ0FBRjtBQUlBRixNQUFBQSxFQUFFLENBQUMsNENBQUQsRUFBK0MsWUFBWTtBQUMzRGQsUUFBQUEsTUFBTSxDQUFDVSxJQUFELENBQU4sQ0FBYU8sR0FBYixDQUFpQkYsRUFBakIsQ0FBb0JDLEtBQXBCLENBQTBCLGlCQUExQjtBQUNELE9BRkMsQ0FBRjtBQUdELEtBUk8sQ0FBUjtBQVVBZCxJQUFBQSxRQUFRLENBQUMsa0JBQUQsRUFBcUIsWUFBWTtBQUN2Q1ksTUFBQUEsRUFBRSxDQUFDLHdDQUFELEVBQTJDLFlBQVk7QUFDdkRkLFFBQUFBLE1BQU0sQ0FBQ1UsSUFBRCxDQUFOLENBQWFLLEVBQWIsQ0FBZ0JDLEtBQWhCLENBQXNCLDZCQUF0QjtBQUNELE9BRkMsQ0FBRjtBQUdELEtBSk8sQ0FBUjtBQUtELEdBOUJPLENBQVI7QUErQkQsQ0E3Q08sQ0FBUiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQge2ZzLCB0ZW1wRGlyfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHtpbnN0YWxsTG9jYWxFeHRlbnNpb24sIHJ1bkFwcGl1bX0gZnJvbSAnLi9jbGktaGVscGVycyc7XG5cbmNvbnN0IHtleHBlY3R9ID0gY2hhaTtcblxuZGVzY3JpYmUoJ0NMSSBiZWhhdmlvciBjb250cm9sbGVkIGJ5IHNjaGVtYScsIGZ1bmN0aW9uICgpIHtcbiAgLyoqXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBsZXQgYXBwaXVtSG9tZTtcblxuICBiZWZvcmUoYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGFwcGl1bUhvbWUgPSBhd2FpdCB0ZW1wRGlyLm9wZW5EaXIoKTtcbiAgfSk7XG5cbiAgYWZ0ZXIoYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGF3YWl0IGZzLnJpbXJhZihhcHBpdW1Ib21lKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2tleXdvcmQnLCBmdW5jdGlvbiAoKSB7XG4gICAgLyoqXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKi9cbiAgICBsZXQgaGVscDtcblxuICAgIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBpbnN0YWxsTG9jYWxFeHRlbnNpb24oXG4gICAgICAgIGFwcGl1bUhvbWUsXG4gICAgICAgICdkcml2ZXInLFxuICAgICAgICBwYXRoLmpvaW4oX19kaXJuYW1lLCAnZml4dHVyZXMnLCAndGVzdC1kcml2ZXInKSxcbiAgICAgICk7XG4gICAgICBoZWxwID0gYXdhaXQgcnVuQXBwaXVtKGFwcGl1bUhvbWUsIFsnc2VydmVyJywgJy0taGVscCddKTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdhcHBpdW1DbGlJZ25vcmVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgaXQoJ3Nob3VsZCBzdGlsbCBzdXBwb3J0IGFyZ3VtZW50cyB3aXRob3V0IHRoaXMga2V5d29yZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZXhwZWN0KGhlbHApLnRvLm1hdGNoKC9vbGl2ZXItYm9saXZlci8pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgY2F1c2UgdGhlIGFyZ3VtZW50IHRvIGJlIHN1cHByZXNzZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGV4cGVjdChoZWxwKS5ub3QudG8ubWF0Y2goL21jbW9ua2V5LW1jYmVhbi8pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnYXBwaXVtRGVwcmVjYXRlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGl0KCdzaG91bGQgbWFyayB0aGUgYXJndW1lbnQgYXMgZGVwcmVjYXRlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZXhwZWN0KGhlbHApLnRvLm1hdGNoKC9cXFtERVBSRUNBVEVEXFxdIGZ1bmt5dGVsZWNoeS8pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXSwiZmlsZSI6InRlc3QvY2xpL3NjaGVtYS1lMmUtc3BlY3MuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
|
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
|
-
require("source-map-support/register");
|
|
6
|
-
|
|
7
|
-
var _sinon = _interopRequireDefault(require("sinon"));
|
|
8
|
-
|
|
9
|
-
var _config = require("../lib/config");
|
|
10
|
-
|
|
11
|
-
var _axios = _interopRequireDefault(require("axios"));
|
|
12
|
-
|
|
13
|
-
var _support = require("@appium/support");
|
|
14
|
-
|
|
15
|
-
describe('Config', function () {
|
|
16
|
-
describe('getGitRev', function () {
|
|
17
|
-
it('should get a reasonable git revision', async function () {
|
|
18
|
-
let rev = await (0, _config.getGitRev)();
|
|
19
|
-
rev.should.be.a('string');
|
|
20
|
-
rev.length.should.be.equal(40);
|
|
21
|
-
rev.match(/[0-9a-f]+/i)[0].should.eql(rev);
|
|
22
|
-
});
|
|
23
|
-
});
|
|
24
|
-
describe('getBuildInfo', function () {
|
|
25
|
-
async function verifyBuildInfoUpdate(useLocalGit) {
|
|
26
|
-
const buildInfo = (0, _config.getBuildInfo)();
|
|
27
|
-
mockFs.expects('exists').atLeast(1).returns(useLocalGit);
|
|
28
|
-
buildInfo['git-sha'] = undefined;
|
|
29
|
-
buildInfo.built = undefined;
|
|
30
|
-
await (0, _config.updateBuildInfo)(true);
|
|
31
|
-
buildInfo.should.be.an('object');
|
|
32
|
-
should.exist(buildInfo['git-sha']);
|
|
33
|
-
should.exist(buildInfo.built);
|
|
34
|
-
should.exist(buildInfo.version);
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
let mockFs;
|
|
38
|
-
let getStub;
|
|
39
|
-
beforeEach(function () {
|
|
40
|
-
mockFs = _sinon.default.mock(_support.fs);
|
|
41
|
-
getStub = _sinon.default.stub(_axios.default, 'get');
|
|
42
|
-
});
|
|
43
|
-
afterEach(function () {
|
|
44
|
-
getStub.restore();
|
|
45
|
-
mockFs.restore();
|
|
46
|
-
});
|
|
47
|
-
it('should get a configuration object if the local git metadata is present', async function () {
|
|
48
|
-
await verifyBuildInfoUpdate(true);
|
|
49
|
-
});
|
|
50
|
-
it('should get a configuration object if the local git metadata is not present', async function () {
|
|
51
|
-
getStub.onCall(0).returns({
|
|
52
|
-
data: [{
|
|
53
|
-
name: `v${_config.APPIUM_VER}`,
|
|
54
|
-
zipball_url: 'https://api.github.com/repos/appium/appium/zipball/v1.9.0-beta.1',
|
|
55
|
-
tarball_url: 'https://api.github.com/repos/appium/appium/tarball/v1.9.0-beta.1',
|
|
56
|
-
commit: {
|
|
57
|
-
sha: '3c2752f9f9c56000705a4ae15b3ba68a5d2e644c',
|
|
58
|
-
url: 'https://api.github.com/repos/appium/appium/commits/3c2752f9f9c56000705a4ae15b3ba68a5d2e644c'
|
|
59
|
-
},
|
|
60
|
-
node_id: 'MDM6UmVmNzUzMDU3MDp2MS45LjAtYmV0YS4x'
|
|
61
|
-
}, {
|
|
62
|
-
name: 'v1.8.2-beta',
|
|
63
|
-
zipball_url: 'https://api.github.com/repos/appium/appium/zipball/v1.8.2-beta',
|
|
64
|
-
tarball_url: 'https://api.github.com/repos/appium/appium/tarball/v1.8.2-beta',
|
|
65
|
-
commit: {
|
|
66
|
-
sha: '5b98b9197e75aa85e7507d21d3126c1a63d1ce8f',
|
|
67
|
-
url: 'https://api.github.com/repos/appium/appium/commits/5b98b9197e75aa85e7507d21d3126c1a63d1ce8f'
|
|
68
|
-
},
|
|
69
|
-
node_id: 'MDM6UmVmNzUzMDU3MDp2MS44LjItYmV0YQ=='
|
|
70
|
-
}]
|
|
71
|
-
});
|
|
72
|
-
getStub.onCall(1).returns({
|
|
73
|
-
data: {
|
|
74
|
-
sha: '3c2752f9f9c56000705a4ae15b3ba68a5d2e644c',
|
|
75
|
-
node_id: 'MDY6Q29tbWl0NzUzMDU3MDozYzI3NTJmOWY5YzU2MDAwNzA1YTRhZTE1YjNiYTY4YTVkMmU2NDRj',
|
|
76
|
-
commit: {
|
|
77
|
-
author: {
|
|
78
|
-
name: 'Isaac Murchie',
|
|
79
|
-
email: 'isaac@saucelabs.com',
|
|
80
|
-
date: '2018-08-17T19:48:00Z'
|
|
81
|
-
},
|
|
82
|
-
committer: {
|
|
83
|
-
name: 'Isaac Murchie',
|
|
84
|
-
email: 'isaac@saucelabs.com',
|
|
85
|
-
date: '2018-08-17T19:48:00Z'
|
|
86
|
-
},
|
|
87
|
-
message: 'v1.9.0-beta.1',
|
|
88
|
-
tree: {
|
|
89
|
-
sha: '2c0974727470eba419ea0b9951c52f72f8036b18',
|
|
90
|
-
url: 'https://api.github.com/repos/appium/appium/git/trees/2c0974727470eba419ea0b9951c52f72f8036b18'
|
|
91
|
-
},
|
|
92
|
-
url: 'https://api.github.com/repos/appium/appium/git/commits/3c2752f9f9c56000705a4ae15b3ba68a5d2e644c',
|
|
93
|
-
comment_count: 0,
|
|
94
|
-
verification: {
|
|
95
|
-
verified: false,
|
|
96
|
-
reason: 'unsigned',
|
|
97
|
-
signature: null,
|
|
98
|
-
payload: null
|
|
99
|
-
}
|
|
100
|
-
},
|
|
101
|
-
url: 'https://api.github.com/repos/appium/appium/commits/3c2752f9f9c56000705a4ae15b3ba68a5d2e644c',
|
|
102
|
-
html_url: 'https://github.com/appium/appium/commit/3c2752f9f9c56000705a4ae15b3ba68a5d2e644c',
|
|
103
|
-
comments_url: 'https://api.github.com/repos/appium/appium/commits/3c2752f9f9c56000705a4ae15b3ba68a5d2e644c/comments'
|
|
104
|
-
}
|
|
105
|
-
});
|
|
106
|
-
await verifyBuildInfoUpdate(false);
|
|
107
|
-
});
|
|
108
|
-
});
|
|
109
|
-
});require('source-map-support').install();
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvY29uZmlnLWUyZS1zcGVjcy5qcyJdLCJuYW1lcyI6WyJkZXNjcmliZSIsIml0IiwicmV2Iiwic2hvdWxkIiwiYmUiLCJhIiwibGVuZ3RoIiwiZXF1YWwiLCJtYXRjaCIsImVxbCIsInZlcmlmeUJ1aWxkSW5mb1VwZGF0ZSIsInVzZUxvY2FsR2l0IiwiYnVpbGRJbmZvIiwibW9ja0ZzIiwiZXhwZWN0cyIsImF0TGVhc3QiLCJyZXR1cm5zIiwidW5kZWZpbmVkIiwiYnVpbHQiLCJhbiIsImV4aXN0IiwidmVyc2lvbiIsImdldFN0dWIiLCJiZWZvcmVFYWNoIiwic2lub24iLCJtb2NrIiwiZnMiLCJzdHViIiwiYXhpb3MiLCJhZnRlckVhY2giLCJyZXN0b3JlIiwib25DYWxsIiwiZGF0YSIsIm5hbWUiLCJBUFBJVU1fVkVSIiwiemlwYmFsbF91cmwiLCJ0YXJiYWxsX3VybCIsImNvbW1pdCIsInNoYSIsInVybCIsIm5vZGVfaWQiLCJhdXRob3IiLCJlbWFpbCIsImRhdGUiLCJjb21taXR0ZXIiLCJtZXNzYWdlIiwidHJlZSIsImNvbW1lbnRfY291bnQiLCJ2ZXJpZmljYXRpb24iLCJ2ZXJpZmllZCIsInJlYXNvbiIsInNpZ25hdHVyZSIsInBheWxvYWQiLCJodG1sX3VybCIsImNvbW1lbnRzX3VybCJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7O0FBQ0E7O0FBTUE7O0FBQ0E7O0FBR0FBLFFBQVEsQ0FBQyxRQUFELEVBQVcsWUFBWTtBQUM3QkEsRUFBQUEsUUFBUSxDQUFDLFdBQUQsRUFBYyxZQUFZO0FBQ2hDQyxJQUFBQSxFQUFFLENBQUMsc0NBQUQsRUFBeUMsa0JBQWtCO0FBQzNELFVBQUlDLEdBQUcsR0FBRyxNQUFNLHdCQUFoQjtBQUNBQSxNQUFBQSxHQUFHLENBQUNDLE1BQUosQ0FBV0MsRUFBWCxDQUFjQyxDQUFkLENBQWdCLFFBQWhCO0FBQ0FILE1BQUFBLEdBQUcsQ0FBQ0ksTUFBSixDQUFXSCxNQUFYLENBQWtCQyxFQUFsQixDQUFxQkcs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Y0FBQUEsSUFBSSxFQUFFLGVBREE7QUFFTlMsY0FBQUEsS0FBSyxFQUFFLHFCQUZEO0FBR05DLGNBQUFBLElBQUksRUFBRTtBQUhBLGFBREY7QUFNTkMsWUFBQUEsU0FBUyxFQUFFO0FBQ1RYLGNBQUFBLElBQUksRUFBRSxlQURHO0FBRVRTLGNBQUFBLEtBQUssRUFBRSxxQkFGRTtBQUdUQyxjQUFBQSxJQUFJLEVBQUU7QUFIRyxhQU5MO0FBV05FLFlBQUFBLE9BQU8sRUFBRSxlQVhIO0FBWU5DLFlBQUFBLElBQUksRUFBRTtBQUNKUixjQUFBQSxHQUFHLEVBQUUsMENBREQ7QUFFSkMsY0FBQUEsR0FBRyxFQUFFO0FBRkQsYUFaQTtBQWdCTkEsWUFBQUEsR0FBRyxFQUFFLGlHQWhCQztBQWlCTlEsWUFBQUEsYUFBYSxFQUFFLENBakJUO0FBa0JOQyxZQUFBQSxZQUFZLEVBQUU7QUFDWkMsY0FBQUEsUUFBUSxFQUFFLEtBREU7QUFFWkMsY0FBQUEsTUFBTSxFQUFFLFVBRkk7QUFHWkMsY0FBQUEsU0FBUyxFQUFFLElBSEM7QUFJWkMsY0FBQUEsT0FBTyxFQUFFO0FBSkc7QUFsQlIsV0FKSjtBQTZCSmIsVUFBQUEsR0FBRyxFQUFFLDZGQTdCRDtBQThCSmMsVUFBQUEsUUFBUSxFQUNOLGtGQS9CRTtBQWdDSkMsVUFBQUEsWUFBWSxFQUNWO0FBakNFO0FBRGtCLE9BQTFCO0FBcUNBLFlBQU01QyxxQkFBcUIsQ0FBQyxLQUFELENBQTNCO0FBQ0QsS0FuRUMsQ0FBRjtBQW9FRCxHQS9GTyxDQUFSO0FBZ0dELENBekdPLENBQVIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgc2lub24gZnJvbSAnc2lub24nO1xuaW1wb3J0IHtcbiAgZ2V0R2l0UmV2LFxuICBnZXRCdWlsZEluZm8sXG4gIHVwZGF0ZUJ1aWxkSW5mbyxcbiAgQVBQSVVNX1ZFUixcbn0gZnJvbSAnLi4vbGliL2NvbmZpZyc7XG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHsgZnMgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuXG5cbmRlc2NyaWJlKCdDb25maWcnLCBmdW5jdGlvbiAoKSB7XG4gIGRlc2NyaWJlKCdnZXRHaXRSZXYnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBnZXQgYSByZWFzb25hYmxlIGdpdCByZXZpc2lvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGxldCByZXYgPSBhd2FpdCBnZXRHaXRSZXYoKTtcbiAgICAgIHJldi5zaG91bGQuYmUuYSgnc3RyaW5nJyk7XG4gICAgICByZXYubGVuZ3RoLnNob3VsZC5iZS5lcXVhbCg0MCk7XG4gICAgICByZXYubWF0Y2goL1swLTlhLWZdKy9pKVswXS5zaG91bGQuZXFsKHJldik7XG4gICAgfSk7XG4gIH0pO1xuICBkZXNjcmliZSgnZ2V0QnVpbGRJbmZvJywgZnVuY3Rpb24gKCkge1xuICAgIGFzeW5jIGZ1bmN0aW9uIHZlcmlmeUJ1aWxkSW5mb1VwZGF0ZSAodXNlTG9jYWxHaXQpIHtcbiAgICAgIGNvbnN0IGJ1aWxkSW5mbyA9IGdldEJ1aWxkSW5mbygpO1xuICAgICAgbW9ja0ZzLmV4cGVjdHMoJ2V4aXN0cycpLmF0TGVhc3QoMSkucmV0dXJucyh1c2VMb2NhbEdpdCk7XG4gICAgICBidWlsZEluZm9bJ2dpdC1zaGEnXSA9IHVuZGVmaW5lZDtcbiAgICAgIGJ1aWxkSW5mby5idWlsdCA9IHVuZGVmaW5lZDtcbiAgICAgIGF3YWl0IHVwZGF0ZUJ1aWxkSW5mbyh0cnVlKTtcbiAgICAgIGJ1aWxkSW5mby5zaG91bGQuYmUuYW4oJ29iamVjdCcpO1xuICAgICAgc2hvdWxkLmV4aXN0KGJ1aWxkSW5mb1snZ2l0LXNoYSddKTtcbiAgICAgIHNob3VsZC5leGlzdChidWlsZEluZm8uYnVpbHQpO1xuICAgICAgc2hvdWxkLmV4aXN0KGJ1aWxkSW5mby52ZXJzaW9uKTtcbiAgICB9XG5cbiAgICBsZXQgbW9ja0ZzO1xuICAgIGxldCBnZXRTdHViO1xuICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgbW9ja0ZzID0gc2lub24ubW9jayhmcyk7XG4gICAgICBnZXRTdHViID0gc2lub24uc3R1YihheGlvcywgJ2dldCcpO1xuICAgIH0pO1xuICAgIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBnZXRTdHViLnJlc3RvcmUoKTtcbiAgICAgIG1vY2tGcy5yZXN0b3JlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGdldCBhIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGlmIHRoZSBsb2NhbCBnaXQgbWV0YWRhdGEgaXMgcHJlc2VudCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IHZlcmlmeUJ1aWxkSW5mb1VwZGF0ZSh0cnVlKTtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIGdldCBhIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGlmIHRoZSBsb2NhbCBnaXQgbWV0YWRhdGEgaXMgbm90IHByZXNlbnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBnZXRTdHViLm9uQ2FsbCgwKS5yZXR1cm5zKHtcbiAgICAgICAgZGF0YTogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IGB2JHtBUFBJVU1fVkVSfWAsXG4gICAgICAgICAgICB6aXBiYWxsX3VybDpcbiAgICAgICAgICAgICAgJ2h0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYXBwaXVtL2FwcGl1bS96aXBiYWxsL3YxLjkuMC1iZXRhLjEnLFxuICAgICAgICAgICAgdGFyYmFsbF91cmw6XG4gICAgICAgICAgICAgICdodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2FwcGl1bS9hcHBpdW0vdGFyYmFsbC92MS45LjAtYmV0YS4xJyxcbiAgICAgICAgICAgIGNvbW1pdDoge1xuICAgICAgICAgICAgICBzaGE6ICczYzI3NTJmOWY5YzU2MDAwNzA1YTRhZTE1YjNiYTY4YTVkMmU2NDRjJyxcbiAgICAgICAgICAgICAgdXJsOiAnaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9hcHBpdW0vYXBwaXVtL2NvbW1pdHMvM2MyNzUyZjlmOWM1NjAwMDcwNWE0YWUxNWIzYmE2OGE1ZDJlNjQ0YycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbm9kZV9pZDogJ01ETTZVbVZtTnpVek1EVTNNRHAyTVM0NUxqQXRZbVYwWVM0eCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAndjEuOC4yLWJldGEnLFxuICAgICAgICAgICAgemlwYmFsbF91cmw6XG4gICAgICAgICAgICAgICdodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2FwcGl1bS9hcHBpdW0vemlwYmFsbC92MS44LjItYmV0YScsXG4gICAgICAgICAgICB0YXJiYWxsX3VybDpcbiAgICAgICAgICAgICAgJ2h0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYXBwaXVtL2FwcGl1bS90YXJiYWxsL3YxLjguMi1iZXRhJyxcbiAgICAgICAgICAgIGNvbW1pdDoge1xuICAgICAgICAgICAgICBzaGE6ICc1Yjk4YjkxOTdlNzVhYTg1ZTc1MDdkMjFkMzEyNmMxYTYzZDFjZThmJyxcbiAgICAgICAgICAgICAgdXJsOiAnaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9hcHBpdW0vYXBwaXVtL2NvbW1pdHMvNWI5OGI5MTk3ZTc1YWE4NWU3NTA3ZDIxZDMxMjZjMWE2M2QxY2U4ZicsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbm9kZV9pZDogJ01ETTZVbVZtTnpVek1EVTNNRHAyTVM0NExqSXRZbVYwWVE9PScsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0pO1xuICAgICAgZ2V0U3R1Yi5vbkNhbGwoMSkucmV0dXJucyh7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBzaGE6ICczYzI3NTJmOWY5YzU2MDAwNzA1YTRhZTE1YjNiYTY4YTVkMmU2NDRjJyxcbiAgICAgICAgICBub2RlX2lkOlxuICAgICAgICAgICAgJ01EWTZRMjl0YldsME56VXpNRFUzTURvell6STNOVEptT1dZNVl6VTJNREF3TnpBMVlUUmhaVEUxWWpOaVlUWTRZVFZrTW1VMk5EUmonLFxuICAgICAgICAgIGNvbW1pdDoge1xuICAgICAgICAgICAgYXV0aG9yOiB7XG4gICAgICAgICAgICAgIG5hbWU6ICdJc2FhYyBNdXJjaGllJyxcbiAgICAgICAgICAgICAgZW1haWw6ICdpc2FhY0BzYXVjZWxhYnMuY29tJyxcbiAgICAgICAgICAgICAgZGF0ZTogJzIwMTgtMDgtMTdUMTk6NDg6MDBaJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb21taXR0ZXI6IHtcbiAgICAgICAgICAgICAgbmFtZTogJ0lzYWFjIE11cmNoaWUnLFxuICAgICAgICAgICAgICBlbWFpbDogJ2lzYWFjQHNhdWNlbGFicy5jb20nLFxuICAgICAgICAgICAgICBkYXRlOiAnMjAxOC0wOC0xN1QxOTo0ODowMFonLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICd2MS45LjAtYmV0YS4xJyxcbiAgICAgICAgICAgIHRyZWU6IHtcbiAgICAgICAgICAgICAgc2hhOiAnMmMwOTc0NzI3NDcwZWJhNDE5ZWEwYjk5NTFjNTJmNzJmODAzNmIxOCcsXG4gICAgICAgICAgICAgIHVybDogJ2h0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYXBwaXVtL2FwcGl1bS9naXQvdHJlZXMvMmMwOTc0NzI3NDcwZWJhNDE5ZWEwYjk5NTFjNTJmNzJmODAzNmIxOCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdXJsOiAnaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9hcHBpdW0vYXBwaXVtL2dpdC9jb21taXRzLzNjMjc1MmY5ZjljNTYwMDA3MDVhNGFlMTViM2JhNjhhNWQyZTY0NGMnLFxuICAgICAgICAgICAgY29tbWVudF9jb3VudDogMCxcbiAgICAgICAgICAgIHZlcmlmaWNhdGlvbjoge1xuICAgICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXG4gICAgICAgICAgICAgIHJlYXNvbjogJ3Vuc2lnbmVkJyxcbiAgICAgICAgICAgICAgc2lnbmF0dXJlOiBudWxsLFxuICAgICAgICAgICAgICBwYXlsb2FkOiBudWxsLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHVybDogJ2h0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYXBwaXVtL2FwcGl1bS9jb21taXRzLzNjMjc1MmY5ZjljNTYwMDA3MDVhNGFlMTViM2JhNjhhNWQyZTY0NGMnLFxuICAgICAgICAgIGh0bWxfdXJsOlxuICAgICAgICAgICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtL2NvbW1pdC8zYzI3NTJmOWY5YzU2MDAwNzA1YTRhZTE1YjNiYTY4YTVkMmU2NDRjJyxcbiAgICAgICAgICBjb21tZW50c191cmw6XG4gICAgICAgICAgICAnaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9hcHBpdW0vYXBwaXVtL2NvbW1pdHMvM2MyNzUyZjlmOWM1NjAwMDcwNWE0YWUxNWIzYmE2OGE1ZDJlNjQ0Yy9jb21tZW50cycsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIGF3YWl0IHZlcmlmeUJ1aWxkSW5mb1VwZGF0ZShmYWxzZSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXSwiZmlsZSI6InRlc3QvY29uZmlnLWUyZS1zcGVjcy5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9
|
|
@@ -1,209 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
|
-
require("source-map-support/register");
|
|
6
|
-
|
|
7
|
-
var _configFile = require("../lib/config-file");
|
|
8
|
-
|
|
9
|
-
var _schema = require("../lib/schema/schema");
|
|
10
|
-
|
|
11
|
-
var _driverSchema = _interopRequireDefault(require("./fixtures/driver.schema.js"));
|
|
12
|
-
|
|
13
|
-
var _helpers = require("./helpers");
|
|
14
|
-
|
|
15
|
-
describe('config file behavior', function () {
|
|
16
|
-
const GOOD_FILEPATH = (0, _helpers.resolveFixture)('config', 'appium.config.good.json');
|
|
17
|
-
const BAD_NODECONFIG_FILEPATH = (0, _helpers.resolveFixture)('config', 'appium.config.bad-nodeconfig.json');
|
|
18
|
-
const BAD_FILEPATH = (0, _helpers.resolveFixture)('config', 'appium.config.bad.json');
|
|
19
|
-
const INVALID_JSON_FILEPATH = (0, _helpers.resolveFixture)('config', 'appium.config.invalid.json');
|
|
20
|
-
const SECURITY_ARRAY_FILEPATH = (0, _helpers.resolveFixture)('config', 'appium.config.security-array.json');
|
|
21
|
-
const SECURITY_DELIMITED_FILEPATH = (0, _helpers.resolveFixture)('config', 'appium.config.security-delimited.json');
|
|
22
|
-
const SECURITY_PATH_FILEPATH = (0, _helpers.resolveFixture)('config', 'appium.config.security-path.json');
|
|
23
|
-
const UNKNOWN_PROPS_FILEPATH = (0, _helpers.resolveFixture)('config', 'appium.config.ext-unknown-props.json');
|
|
24
|
-
const EXT_PROPS_FILEPATH = (0, _helpers.resolveFixture)('config', 'appium.config.ext-good.json');
|
|
25
|
-
beforeEach(function () {
|
|
26
|
-
(0, _schema.finalizeSchema)();
|
|
27
|
-
});
|
|
28
|
-
afterEach(function () {
|
|
29
|
-
(0, _schema.resetSchema)();
|
|
30
|
-
});
|
|
31
|
-
describe('when provided a path to a config file', function () {
|
|
32
|
-
describe('when the config file is valid per the schema', function () {
|
|
33
|
-
it('should return a valid config object', async function () {
|
|
34
|
-
const result = await (0, _configFile.readConfigFile)(GOOD_FILEPATH, {
|
|
35
|
-
normalize: false
|
|
36
|
-
});
|
|
37
|
-
result.should.deep.equal({
|
|
38
|
-
config: require(GOOD_FILEPATH),
|
|
39
|
-
filepath: GOOD_FILEPATH,
|
|
40
|
-
errors: []
|
|
41
|
-
});
|
|
42
|
-
});
|
|
43
|
-
describe('server.nodeconfig behavior', function () {
|
|
44
|
-
describe('when a string', function () {
|
|
45
|
-
it('should return errors', async function () {
|
|
46
|
-
const result = await (0, _configFile.readConfigFile)(BAD_NODECONFIG_FILEPATH, {
|
|
47
|
-
normalize: false
|
|
48
|
-
});
|
|
49
|
-
result.should.have.nested.property('errors[0].instancePath', '/server/nodeconfig');
|
|
50
|
-
});
|
|
51
|
-
});
|
|
52
|
-
describe('when an object', function () {
|
|
53
|
-
it('should return a valid config object', async function () {
|
|
54
|
-
const result = await (0, _configFile.readConfigFile)(GOOD_FILEPATH, {
|
|
55
|
-
normalize: false
|
|
56
|
-
});
|
|
57
|
-
result.should.have.property('errors').that.is.empty;
|
|
58
|
-
});
|
|
59
|
-
});
|
|
60
|
-
});
|
|
61
|
-
describe('server.allow-insecure behavior', function () {
|
|
62
|
-
describe('when a string path', function () {
|
|
63
|
-
it('should return errors', async function () {
|
|
64
|
-
const result = await (0, _configFile.readConfigFile)(SECURITY_PATH_FILEPATH, {
|
|
65
|
-
normalize: false
|
|
66
|
-
});
|
|
67
|
-
result.should.have.nested.property('errors[0].instancePath', '/server/allow-insecure');
|
|
68
|
-
});
|
|
69
|
-
});
|
|
70
|
-
describe('when a comma-delimited string', function () {
|
|
71
|
-
it('should return errors', async function () {
|
|
72
|
-
const result = await (0, _configFile.readConfigFile)(SECURITY_DELIMITED_FILEPATH, {
|
|
73
|
-
normalize: false
|
|
74
|
-
});
|
|
75
|
-
result.should.have.nested.property('errors[0].instancePath', '/server/allow-insecure');
|
|
76
|
-
});
|
|
77
|
-
});
|
|
78
|
-
describe('when an array', function () {
|
|
79
|
-
it('should return a valid config object', async function () {
|
|
80
|
-
const result = await (0, _configFile.readConfigFile)(SECURITY_ARRAY_FILEPATH, {
|
|
81
|
-
normalize: false
|
|
82
|
-
});
|
|
83
|
-
result.should.deep.equal({
|
|
84
|
-
config: require(SECURITY_ARRAY_FILEPATH),
|
|
85
|
-
filepath: SECURITY_ARRAY_FILEPATH,
|
|
86
|
-
errors: []
|
|
87
|
-
});
|
|
88
|
-
});
|
|
89
|
-
});
|
|
90
|
-
});
|
|
91
|
-
});
|
|
92
|
-
describe('when the config file is invalid per the schema', function () {
|
|
93
|
-
describe('without extensions', function () {
|
|
94
|
-
it('should return an object containing errors', async function () {
|
|
95
|
-
const result = await (0, _configFile.readConfigFile)(BAD_FILEPATH, {
|
|
96
|
-
normalize: false
|
|
97
|
-
});
|
|
98
|
-
result.should.have.deep.property('config', require(BAD_FILEPATH));
|
|
99
|
-
result.should.have.property('filepath', BAD_FILEPATH);
|
|
100
|
-
result.should.have.deep.property('errors').that.contains.members([{
|
|
101
|
-
instancePath: '',
|
|
102
|
-
schemaPath: '#/additionalProperties',
|
|
103
|
-
keyword: 'additionalProperties',
|
|
104
|
-
params: {
|
|
105
|
-
additionalProperty: 'appium-home'
|
|
106
|
-
},
|
|
107
|
-
message: 'must NOT have additional properties',
|
|
108
|
-
isIdentifierLocation: true
|
|
109
|
-
}, {
|
|
110
|
-
instancePath: '/server/allow-cors',
|
|
111
|
-
schemaPath: '#/properties/server/properties/allow-cors/type',
|
|
112
|
-
keyword: 'type',
|
|
113
|
-
params: {
|
|
114
|
-
type: 'boolean'
|
|
115
|
-
},
|
|
116
|
-
message: 'must be boolean'
|
|
117
|
-
}, {
|
|
118
|
-
instancePath: '/server/allow-insecure',
|
|
119
|
-
schemaPath: '#/properties/server/properties/allow-insecure/type',
|
|
120
|
-
keyword: 'type',
|
|
121
|
-
params: {
|
|
122
|
-
type: 'array'
|
|
123
|
-
},
|
|
124
|
-
message: 'must be array'
|
|
125
|
-
}, {
|
|
126
|
-
instancePath: '/server/callback-port',
|
|
127
|
-
schemaPath: '#/properties/server/properties/callback-port/maximum',
|
|
128
|
-
keyword: 'maximum',
|
|
129
|
-
params: {
|
|
130
|
-
comparison: '<=',
|
|
131
|
-
limit: 65535
|
|
132
|
-
},
|
|
133
|
-
message: 'must be <= 65535'
|
|
134
|
-
}, {
|
|
135
|
-
instancePath: '/server/log-level',
|
|
136
|
-
schemaPath: '#/properties/server/properties/log-level/enum',
|
|
137
|
-
keyword: 'enum',
|
|
138
|
-
params: {
|
|
139
|
-
allowedValues: ['info', 'info:debug', 'info:info', 'info:warn', 'info:error', 'warn', 'warn:debug', 'warn:info', 'warn:warn', 'warn:error', 'error', 'error:debug', 'error:info', 'error:warn', 'error:error', 'debug', 'debug:debug', 'debug:info', 'debug:warn', 'debug:error']
|
|
140
|
-
},
|
|
141
|
-
message: 'must be equal to one of the allowed values'
|
|
142
|
-
}, {
|
|
143
|
-
instancePath: '/server/log-no-colors',
|
|
144
|
-
schemaPath: '#/properties/server/properties/log-no-colors/type',
|
|
145
|
-
keyword: 'type',
|
|
146
|
-
params: {
|
|
147
|
-
type: 'boolean'
|
|
148
|
-
},
|
|
149
|
-
message: 'must be boolean'
|
|
150
|
-
}, {
|
|
151
|
-
instancePath: '/server/port',
|
|
152
|
-
schemaPath: '#/properties/server/properties/port/type',
|
|
153
|
-
keyword: 'type',
|
|
154
|
-
params: {
|
|
155
|
-
type: 'integer'
|
|
156
|
-
},
|
|
157
|
-
message: 'must be integer'
|
|
158
|
-
}]).and.lengthOf(7);
|
|
159
|
-
result.should.have.property('reason').that.is.a.string;
|
|
160
|
-
});
|
|
161
|
-
});
|
|
162
|
-
describe('with extensions', function () {
|
|
163
|
-
let result;
|
|
164
|
-
beforeEach(function () {
|
|
165
|
-
(0, _schema.resetSchema)();
|
|
166
|
-
(0, _schema.registerSchema)('driver', 'fake', _driverSchema.default);
|
|
167
|
-
(0, _schema.finalizeSchema)();
|
|
168
|
-
});
|
|
169
|
-
describe('when provided a config file with unknown properties', function () {
|
|
170
|
-
beforeEach(async function () {
|
|
171
|
-
result = await (0, _configFile.readConfigFile)(UNKNOWN_PROPS_FILEPATH, {
|
|
172
|
-
normalize: false
|
|
173
|
-
});
|
|
174
|
-
});
|
|
175
|
-
it('should return an object containing errors', function () {
|
|
176
|
-
result.should.have.deep.property('errors', [{
|
|
177
|
-
instancePath: '/server/driver/fake',
|
|
178
|
-
schemaPath: 'driver-fake.json/additionalProperties',
|
|
179
|
-
keyword: 'additionalProperties',
|
|
180
|
-
params: {
|
|
181
|
-
additionalProperty: 'bubb'
|
|
182
|
-
},
|
|
183
|
-
message: 'must NOT have additional properties',
|
|
184
|
-
isIdentifierLocation: true
|
|
185
|
-
}]);
|
|
186
|
-
});
|
|
187
|
-
});
|
|
188
|
-
describe('when provided a config file with valid properties', function () {
|
|
189
|
-
beforeEach(async function () {
|
|
190
|
-
result = await (0, _configFile.readConfigFile)(EXT_PROPS_FILEPATH, {
|
|
191
|
-
normalize: false
|
|
192
|
-
});
|
|
193
|
-
});
|
|
194
|
-
it('should return an object containing no errors', function () {
|
|
195
|
-
result.should.have.deep.property('errors', []);
|
|
196
|
-
});
|
|
197
|
-
});
|
|
198
|
-
});
|
|
199
|
-
});
|
|
200
|
-
describe('when the config file is invalid JSON', function () {
|
|
201
|
-
it('should reject with a user-friendly error message', async function () {
|
|
202
|
-
await (0, _configFile.readConfigFile)(INVALID_JSON_FILEPATH).should.be.rejectedWith(new RegExp(`${INVALID_JSON_FILEPATH} is invalid`));
|
|
203
|
-
});
|
|
204
|
-
});
|
|
205
|
-
});
|
|
206
|
-
});require('source-map-support').install();
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvY29uZmlnLWZpbGUtZTJlLXNwZWNzLmpzIl0sIm5hbWVzIjpbImRlc2NyaWJlIiwiR09PRF9GSUxFUEFUSCIsIkJBRF9OT0RFQ09ORklHX0ZJTEVQQVRIIiwiQkFEX0ZJTEVQQVRIIiwiSU5WQUxJRF9KU09OX0ZJTEVQQVRIIiwiU0VDVVJJVFlfQVJSQVlfRklMRVBBVEgiLCJTRUNVUklUWV9ERUxJTUlURURfRklMRVBBVEgiLCJTRUNVUklUWV9QQVRIX0ZJTEVQQVRIIiwiVU5LTk9XTl9QUk9QU19GSUxFUEFUSCIsIkVYVF9QUk9QU19GSUxFUEFUSCIsImJlZm9yZUVhY2giLCJhZnRlckVhY2giLCJpdCIsInJlc3VsdCIsIm5vcm1hbGl6ZSIsInNob3VsZCIsImRlZXAiLCJlcXVhbCIsImNvbmZpZyIsInJlcXVpcmUiLCJmaWxlcGF0aCIsImVycm9ycyIsImhhdmUiLCJuZXN0ZWQiLCJwcm9wZXJ0eSIsInRoYXQiLCJpcyIsImVtcHR5IiwiY29udGFpbnMiLCJtZW1iZXJzIiwiaW5zdGFuY2VQYXRoIiwic2NoZW1hUGF0aCIsImtleXdvcmQiLCJwYXJhbXMiLCJhZGRpdGlvbmFsUHJvcGVydHkiLCJtZXNzYWdlIiwiaXNJZGVudGlmaWVyTG9jYXRpb24iLCJ0eXBlIiwiY29tcGFyaXNvbiIsImxpbWl0IiwiYWxsb3dlZFZhbHVlcyIsImFuZCIsImxlbmd0aE9mIiwiYSIsInN0cmluZyIsImV4dFNjaGVtYSIsImJlIiwicmVqZWN0ZWRXaXRoIiwiUmVnRXhwIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFFQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQUEsUUFBUSxDQUFDLHNCQUFELEVBQXlCLFlBQVk7QUFDM0MsUUFBTUMsYUFBYSxHQUFHLDZCQUFlLFFBQWYsRUFBeUIseUJBQXpCLENBQXRCO0FBQ0EsUUFBTUMsdUJBQXVCLEdBQUcsNkJBQzlCLFFBRDhCLEVBRTlCLG1DQUY4QixDQUFoQztBQUlBLFFBQU1DLFlBQVksR0FBRyw2QkFBZSxRQUFmLEVBQXlCLHdCQUF6QixDQUFyQjtBQUNBLFFBQU1DLHFCQUFxQixHQUFHLDZCQUM1QixRQUQ0QixFQUU1Qiw0QkFGNEIsQ0FBOUI7QUFJQSxRQUFNQyx1QkFBdUIsR0FBRyw2QkFDOUIsUUFEOEIsRUFFOUIsbUNBRjhCLENBQWhDO0FBSUEsUUFBTUMsMkJBQTJCLEdBQUcsNkJBQ2xDLFFBRGtDLEVBRWxDLHVDQUZrQyxDQUFwQztBQUlBLFFBQU1DLHNCQUFzQixHQUFHLDZCQUM3QixRQUQ2QixFQUU3QixrQ0FGNkIsQ0FBL0I7QUFJQSxRQUFNQyxzQkFBc0IsR0FBRyw2QkFDN0IsUUFENkIsRUFFN0Isc0NBRjZCLENBQS9CO0FBSUEsUUFBTUMsa0JBQWtCLEdBQUcsNkJBQ3pCLFFBRHlCLEVBRXpCLDZCQUZ5QixDQUEzQjtBQUtBQyxFQUFBQSxVQUFVLENBQUMsWUFBWTtBQUNyQjtBQUNELEdBRlMsQ0FBVjtBQUlBQyxFQUFBQSxTQUFTLENBQUMsWUFBWTtBQUNwQjtBQUNELEdBRlEsQ0FBVDtBQUlBWCxFQUFBQSxRQUFRLENBQUMsdUNBQUQsRUFBMEMsWUFBWTtBQUM1REEsSUFBQUEsUUFBUSxDQUFDLDhDQUFELEVBQWlELFlBQVk7QUFDbkVZLE1BQUFBLEVBQUUsQ0FBQyxxQ0FBRCxFQUF3QyxrQkFBa0I7QUFDMUQsY0FBTUMsTUFBTSxHQUFHLE1BQU0sZ0NBQWVaLGFBQWYsRUFBOEI7QUFDakRhLFVBQUFBLFNBQVMsRUFBRTtBQURzQyxTQUE5QixDQUFyQjtBQUdBRCxRQUFBQSxNQUFNLENBQUNFLE1BQVAsQ0FBY0MsSUFBZCxDQUFtQkMsS0FBbkIsQ0FBeUI7QUFDdkJDLFVBQUFBLE1BQU0sRUFBRUMsT0FBTyxDQUFDbEIsYUFBRCxDQURRO0FBRXZCbUIsVUFBQUEsUUFBUSxFQUFFbkIsYUFGYTtBQUd2Qm9CLFVBQUFBLE1BQU0sRUFBRTtBQUhlLFNBQXpCO0FBS0QsT0FUQyxDQUFGO0FBV0FyQixNQUFBQSxRQUFRLENBQUMsNEJBQUQsRUFBK0IsWUFBWTtBQUNqREEsUUFBQUEsUUFBUSxDQUFDLGVBQUQsRUFBa0IsWUFBWTtBQUNwQ1ksVUFBQUEsRUFBRSxDQUFDLHNCQUFELEVBQXlCLGtCQUFrQjtBQUMzQyxrQkFBTUMsTUFBTSxHQUFHLE1BQU0sZ0NBQWVYLHVCQUFmLEVBQXdDO0FBQzNEWSxjQUFBQSxTQUFTLEVBQUU7QUFEZ0QsYUFBeEMsQ0FBckI7QUFHQUQsWUFBQUEsTUFBTSxDQUFDRSxNQUFQLENBQWNPLElBQWQsQ0FBbUJDLE1BQW5CLENBQTBCQyxRQUExQixDQUNFLHdCQURGLEVBRUUsb0JBRkY7QUFJRCxXQVJDLENBQUY7QUFTRCxTQVZPLENBQVI7QUFZQXhCLFFBQUFBLFFBQVEsQ0FBQyxnQkFBRCxFQUFtQixZQUFZO0FBQ3JDWSxVQUFBQSxFQUFFLENBQUMscUNBQUQsRUFBd0Msa0JBQWtCO0FBQzFELGtCQUFNQyxNQUFNLEdBQUcsTUFBTSxnQ0FBZVosYUFBZixFQUE4QjtBQUNqRGEsY0FBQUEsU0FBUyxFQUFFO0FBRHNDLGFBQTlCLENBQXJCO0FBR0FELFlBQUFBLE1BQU0sQ0FBQ0UsTUFBUCxDQUFjTyxJQUFkLENBQW1CRSxRQUFuQixDQUE0QixRQUE1QixFQUFzQ0MsSUFBdEMsQ0FBMkNDLEVBQTNDLENBQThDQyxLQUE5QztBQUNELFdBTEMsQ0FBRjtBQU1ELFNBUE8sQ0FBUjtBQVFELE9BckJPLENBQVI7QUF1QkEzQixNQUFBQSxRQUFRLENBQUMsZ0NBQUQsRUFBbUMsWUFBWTtBQUNyREEsUUFBQUEsUUFBUSxDQUFDLG9CQUFELEVBQXVCLFlBQVk7QUFDekNZLFVBQUFBLEVBQUUsQ0FBQyxzQkFBRCxFQUF5QixrQkFBa0I7QUFDM0Msa0JBQU1DLE1BQU0sR0FBRyxNQUFNLGdDQUFlTixzQkFBZixFQUF1QztBQUMxRE8sY0FBQUEsU0FBUyxFQUFFO0FBRCtDLGFBQXZDLENBQXJCO0FBR0FELFlBQUFBLE1BQU0sQ0FBQ0UsTUFBUCxDQUFjTyxJQUFkLENBQW1CQyxNQUFuQixDQUEwQkMsUUFBMUIsQ0FDRSx3QkFERixFQUVFLHdCQUZGO0FBSUQsV0FSQyxDQUFGO0FBU0QsU0FWTyxDQUFSO0FBWUF4QixRQUFBQSxRQUFRLENBQUMsK0JBQUQsRUFBa0MsWUFBWTtBQUNwRFksVUFBQUEsRUFBRSxDQUFDLHNCQUFELEVBQXlCLGtCQUFrQjtBQUMzQyxrQkFBTUMsTUFBTSxHQUFHLE1BQU0sZ0NBQWVQLDJCQUFmLEVBQTRDO0FBQy9EUSxjQUFBQSxTQUFTLEVBQUU7QUFEb0QsYUFBNUMsQ0FBckI7QUFHQUQsWUFBQUEsTUFBTSxDQUFDRSxNQUFQLENBQWNPLElBQWQsQ0FBbUJDLE1BQW5CLENBQTBCQyxRQUExQixDQUNFLHdCQURGLEVBRUUsd0JBRkY7QUFJRCxXQVJDLENBQUY7QUFTRCxTQVZPLENBQVI7QUFZQXhCLFFBQUFBLFFBQVEsQ0FBQyxlQUFELEVBQWtCLFlBQVk7QUFDcENZLFVBQUFBLEVBQUUsQ0FBQyxxQ0FBRCxFQUF3QyxrQkFBa0I7QUFDMUQsa0JBQU1DLE1BQU0sR0FBRyxNQUFNLGdDQUFlUix1QkFBZixFQUF3QztBQUMzRFMsY0FBQUEsU0FBUyxFQUFFO0FBRGdELGFBQXhDLENBQXJCO0FBR0FELFlBQUFBLE1BQU0sQ0FBQ0UsTUFBUCxDQUFjQyxJQUFkLENBQW1CQyxLQUFuQixDQUF5QjtBQUN2QkMsY0FBQUEsTUFBTSxFQUFFQyxPQUFPLENBQUNkLHVCQUFELENBRFE7QUFFdkJlLGNBQUFBLFFBQVEsRUFBRWYsdUJBRmE7QUFHdkJnQixjQUFBQSxNQUFNLEVBQUU7QUFIZSxhQUF6QjtBQUtELFdBVEMsQ0FBRjtBQVVELFNBWE8sQ0FBUjtBQVlELE9BckNPLENBQVI7QUFzQ0QsS0F6RU8sQ0FBUjtBQTJFQXJCLElBQUFBLFFBQVEsQ0FBQyxnREFBRCxFQUFtRCxZQUFZO0FBQ3JFQSxNQUFBQSxRQUFRLENBQUMsb0JBQUQsRUFBdUIsWUFBWTtBQUN6Q1ksUUFBQUEsRUFBRSxDQUFDLDJDQUFELEVBQThDLGtCQUFrQjtBQUNoRSxnQkFBTUMsTUFBTSxHQUFHLE1BQU0sZ0NBQWVWLFlBQWYsRUFBNkI7QUFDaERXLFlBQUFBLFNBQVMsRUFBRTtBQURxQyxXQUE3QixDQUFyQjtBQUdBRCxVQUFBQSxNQUFNLENBQUNFLE1BQVAsQ0FBY08sSUFBZCxDQUFtQk4sSUFBbkIsQ0FBd0JRLFFBQXhCLENBQWlDLFFBQWpDLEVBQTJDTCxPQUFPLENBQUNoQixZQUFELENBQWxEO0FBQ0FVLFVBQUFBLE1BQU0sQ0FBQ0UsTUFBUCxDQUFjTyxJQUFkLENBQW1CRSxRQUFuQixDQUE0QixVQUE1QixFQUF3Q3JCLFlBQXhDO0FBQ0FVLFVBQUFBLE1BQU0sQ0FBQ0UsTUFBUCxDQUFjTyxJQUFkLENBQW1CTixJQUFuQixDQUF3QlEsUUFBeEIsQ0FBaUMsUUFBakMsRUFBMkNDLElBQTNDLENBQWdERyxRQUFoRCxDQUF5REMsT0FBekQsQ0FBaUUsQ0FDL0Q7QUFDRUMsWUFBQUEsWUFBWSxFQUFFLEVBRGhCO0FBRUVDLFlBQUFBLFVBQVUsRUFBRSx3QkFGZDtBQUdFQyxZQUFBQSxPQUFPLEVBQUUsc0JBSFg7QUFJRUMsWUFBQUEsTUFBTSxFQUFFO0FBQ05DLGNBQUFBLGtCQUFrQixFQUFFO0FBRGQsYUFKVjtBQU9FQyxZQUFBQSxPQUFPLEVBQUUscUNBUFg7QUFRRUMsWUFBQUEsb0JBQW9CLEVBQUU7QUFSeEIsV0FEK0QsRUFXL0Q7QUFDRU4sWUFBQUEsWUFBWSxFQUFFLG9CQURoQjtBQUVFQyxZQUFBQSxVQUFVLEVBQUUsZ0RBRmQ7QUFHRUMsWUFBQUEsT0FBTyxFQUFFLE1BSFg7QUFJRUMsWUFBQUEsTUFBTSxFQUFFO0FBQ05JLGNBQUFBLElBQUksRUFBRTtBQURBLGFBSlY7QUFPRUYsWUFBQUEsT0FBTyxFQUFFO0FBUFgsV0FYK0QsRUFvQi9EO0FBQ0VMLFlBQUFBLFlBQVksRUFBRSx3QkFEaEI7QUFFRUMsWUFBQUEsVUFBVSxFQUFFLG9EQUZkO0FBR0VDLFlBQUFBLE9BQU8sRUFBRSxNQUhYO0FBSUVDLFlBQUFBLE1BQU0sRUFBRTtBQUNOSSxjQUFBQSxJQUFJLEVBQUU7QUFEQSxhQUpWO0FBT0VGLFlBQUFBLE9BQU8sRUFBRTtBQVBYLFdBcEIrRCxFQTZCL0Q7QUFDRUwsWUFBQUEsWUFBWSxFQUFFLHVCQURoQjtBQUVFQyxZQUFBQSxVQUFVLEVBQ1Isc0RBSEo7QUFJRUMsWUFBQUEsT0FBTyxFQUFFLFNBSlg7QUFLRUMsWUFBQUEsTUFBTSxFQUFFO0FBQ05LLGNBQUFBLFVBQVUsRUFBRSxJQUROO0FBRU5DLGNBQUFBLEtBQUssRUFBRTtBQUZELGFBTFY7QUFTRUosWUFBQUEsT0FBTyxFQUFFO0FBVFgsV0E3QitELEVBd0MvRDtBQUNFTCxZQUFBQSxZQUFZLEVBQUUsbUJBRGhCO0FBRUVDLFlBQUFBLFVBQVUsRUFBRSwrQ0FGZDtBQUdFQyxZQUFBQSxPQUFPLEVBQUUsTUFIWDtBQUlFQyxZQUFBQSxNQUFNLEVBQUU7QUFDTk8sY0FBQUEsYUFBYSxFQUFFLENBQ2IsTUFEYSxFQUViLFlBRmEsRUFHYixXQUhhLEVBSWIsV0FKYSxFQUtiLFlBTGEsRUFNYixNQU5hLEVBT2IsWUFQYSxFQVFiLFdBUmEsRUFTYixXQVRhLEVBVWIsWUFWYSxFQVdiLE9BWGEsRUFZYixhQVphLEVBYWIsWUFiYSxFQWNiLFlBZGEsRUFlYixhQWZhLEVBZ0JiLE9BaEJhLEVBaUJiLGFBakJhLEVBa0JiLFlBbEJhLEVBbUJiLFlBbkJhLEVBb0JiLGFBcEJhO0FBRFQsYUFKVjtBQTRCRUwsWUFBQUEsT0FBTyxFQUFFO0FBNUJYLFdBeEMrRCxFQXNFL0Q7QUFDRUwsWUFBQUEsWUFBWSxFQUFFLHVCQURoQjtBQUVFQyxZQUFBQSxVQUFVLEVBQUUsbURBRmQ7QUFHRUMsWUFBQUEsT0FBTyxFQUFFLE1BSFg7QUFJRUMsWUFBQUEsTUFBTSxFQUFFO0FBQ05JLGNBQUFBLElBQUksRUFBRTtBQURBLGFBSlY7QUFPRUYsWUFBQUEsT0FBTyxFQUFFO0FBUFgsV0F0RStELEVBK0UvRDtBQUNFTCxZQUFBQSxZQUFZLEVBQUUsY0FEaEI7QUFFRUMsWUFBQUEsVUFBVSxFQUFFLDBDQUZkO0FBR0VDLFlBQUFBLE9BQU8sRUFBRSxNQUhYO0FBSUVDLFlBQUFBLE1BQU0sRUFBRTtBQUNOSSxjQUFBQSxJQUFJLEVBQUU7QUFEQSxhQUpWO0FBT0VGLFlBQUFBLE9BQU8sRUFBRTtBQVBYLFdBL0UrRCxDQUFqRSxFQXdGR00sR0F4RkgsQ0F3Rk9DLFFBeEZQLENBd0ZnQixDQXhGaEI7QUEwRkE3QixVQUFBQSxNQUFNLENBQUNFLE1BQVAsQ0FBY08sSUFBZCxDQUFtQkUsUUFBbkIsQ0FBNEIsUUFBNUIsRUFBc0NDLElBQXRDLENBQTJDQyxFQUEzQyxDQUE4Q2lCLENBQTlDLENBQWdEQyxNQUFoRDtBQUNELFNBakdDLENBQUY7QUFrR0QsT0FuR08sQ0FBUjtBQXFHQTVDLE1BQUFBLFFBQVEsQ0FBQyxpQkFBRCxFQUFvQixZQUFZO0FBRXRDLFlBQUlhLE1BQUo7QUFFQUgsUUFBQUEsVUFBVSxDQUFDLFlBQVk7QUFDckI7QUFDQSxzQ0FBZSxRQUFmLEVBQXlCLE1BQXpCLEVBQWlDbUMscUJBQWpDO0FBQ0E7QUFDRCxTQUpTLENBQVY7QUFNQTdDLFFBQUFBLFFBQVEsQ0FBQyxxREFBRCxFQUF3RCxZQUFZO0FBQzFFVSxVQUFBQSxVQUFVLENBQUMsa0JBQWtCO0FBQzNCRyxZQUFBQSxNQUFNLEdBQUcsTUFBTSxnQ0FBZUwsc0JBQWYsRUFBdUM7QUFDcERNLGNBQUFBLFNBQVMsRUFBRTtBQUR5QyxhQUF2QyxDQUFmO0FBR0QsV0FKUyxDQUFWO0FBS0FGLFVBQUFBLEVBQUUsQ0FBQywyQ0FBRCxFQUE4QyxZQUFZO0FBQzFEQyxZQUFBQSxNQUFNLENBQUNFLE1BQVAsQ0FBY08sSUFBZCxDQUFtQk4sSUFBbkIsQ0FBd0JRLFFBQXhCLENBQWlDLFFBQWpDLEVBQTJDLENBQ3pDO0FBQ0VNLGNBQUFBLFlBQVksRUFBRSxxQkFEaEI7QUFFRUMsY0FBQUEsVUFBVSxFQUNSLHVDQUhKO0FBSUVDLGNBQUFBLE9BQU8sRUFBRSxzQkFKWDtBQUtFQyxjQUFBQSxNQUFNLEVBQUU7QUFBQ0MsZ0JBQUFBLGtCQUFrQixFQUFFO0FBQXJCLGVBTFY7QUFNRUMsY0FBQUEsT0FBTyxFQUFFLHFDQU5YO0FBT0VDLGNBQUFBLG9CQUFvQixFQUFFO0FBUHhCLGFBRHlDLENBQTNDO0FBV0QsV0FaQyxDQUFGO0FBYUQsU0FuQk8sQ0FBUjtBQXFCQXBDLFFBQUFBLFFBQVEsQ0FBQyxtREFBRCxFQUFzRCxZQUFZO0FBQ3hFVSxVQUFBQSxVQUFVLENBQUMsa0JBQWtCO0FBQzNCRyxZQUFBQSxNQUFNLEdBQUcsTUFBTSxnQ0FBZUosa0JBQWYsRUFBbUM7QUFDaERLLGNBQUFBLFNBQVMsRUFBRTtBQURxQyxhQUFuQyxDQUFmO0FBR0QsV0FKUyxDQUFWO0FBS0FGLFVBQUFBLEVBQUUsQ0FBQyw4Q0FBRCxFQUFpRCxZQUFZO0FBQzdEQyxZQUFBQSxNQUFNLENBQUNFLE1BQVAsQ0FBY08sSUFBZCxDQUFtQk4sSUFBbkIsQ0FBd0JRLFFBQXhCLENBQWlDLFFBQWpDLEVBQTJDLEVBQTNDO0FBQ0QsV0FGQyxDQUFGO0FBR0QsU0FUTyxDQUFSO0FBVUQsT0F6Q08sQ0FBUjtBQTBDRCxLQWhKTyxDQUFSO0FBa0pBeEIsSUFBQUEsUUFBUSxDQUFDLHNDQUFELEVBQXlDLFlBQVk7QUFDM0RZLE1BQUFBLEVBQUUsQ0FBQyxrREFBRCxFQUFxRCxrQkFBa0I7QUFDdkUsY0FBTSxnQ0FBZVIscUJBQWYsRUFBc0NXLE1BQXRDLENBQTZDK0IsRUFBN0MsQ0FBZ0RDLFlBQWhELENBQ0osSUFBSUMsTUFBSixDQUFZLEdBQUU1QyxxQkFBc0IsYUFBcEMsQ0FESSxDQUFOO0FBR0QsT0FKQyxDQUFGO0FBS0QsS0FOTyxDQUFSO0FBT0QsR0FyT08sQ0FBUjtBQXNPRCxDQTlRTyxDQUFSIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCB7IHJlYWRDb25maWdGaWxlIH0gZnJvbSAnLi4vbGliL2NvbmZpZy1maWxlJztcbmltcG9ydCB7IGZpbmFsaXplU2NoZW1hLCByZWdpc3RlclNjaGVtYSwgcmVzZXRTY2hlbWEgfSBmcm9tICcuLi9saWIvc2NoZW1hL3NjaGVtYSc7XG5pbXBvcnQgZXh0U2NoZW1hIGZyb20gJy4vZml4dHVyZXMvZHJpdmVyLnNjaGVtYS5qcyc7XG5pbXBvcnQgeyByZXNvbHZlRml4dHVyZSB9IGZyb20gJy4vaGVscGVycyc7XG5cbmRlc2NyaWJlKCdjb25maWcgZmlsZSBiZWhhdmlvcicsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgR09PRF9GSUxFUEFUSCA9IHJlc29sdmVGaXh0dXJlKCdjb25maWcnLCAnYXBwaXVtLmNvbmZpZy5nb29kLmpzb24nKTtcbiAgY29uc3QgQkFEX05PREVDT05GSUdfRklMRVBBVEggPSByZXNvbHZlRml4dHVyZShcbiAgICAnY29uZmlnJyxcbiAgICAnYXBwaXVtLmNvbmZpZy5iYWQtbm9kZWNvbmZpZy5qc29uJyxcbiAgKTtcbiAgY29uc3QgQkFEX0ZJTEVQQVRIID0gcmVzb2x2ZUZpeHR1cmUoJ2NvbmZpZycsICdhcHBpdW0uY29uZmlnLmJhZC5qc29uJyk7XG4gIGNvbnN0IElOVkFMSURfSlNPTl9GSUxFUEFUSCA9IHJlc29sdmVGaXh0dXJlKFxuICAgICdjb25maWcnLFxuICAgICdhcHBpdW0uY29uZmlnLmludmFsaWQuanNvbicsXG4gICk7XG4gIGNvbnN0IFNFQ1VSSVRZX0FSUkFZX0ZJTEVQQVRIID0gcmVzb2x2ZUZpeHR1cmUoXG4gICAgJ2NvbmZpZycsXG4gICAgJ2FwcGl1bS5jb25maWcuc2VjdXJpdHktYXJyYXkuanNvbicsXG4gICk7XG4gIGNvbnN0IFNFQ1VSSVRZX0RFTElNSVRFRF9GSUxFUEFUSCA9IHJlc29sdmVGaXh0dXJlKFxuICAgICdjb25maWcnLFxuICAgICdhcHBpdW0uY29uZmlnLnNlY3VyaXR5LWRlbGltaXRlZC5qc29uJyxcbiAgKTtcbiAgY29uc3QgU0VDVVJJVFlfUEFUSF9GSUxFUEFUSCA9IHJlc29sdmVGaXh0dXJlKFxuICAgICdjb25maWcnLFxuICAgICdhcHBpdW0uY29uZmlnLnNlY3VyaXR5LXBhdGguanNvbicsXG4gICk7XG4gIGNvbnN0IFVOS05PV05fUFJPUFNfRklMRVBBVEggPSByZXNvbHZlRml4dHVyZShcbiAgICAnY29uZmlnJyxcbiAgICAnYXBwaXVtLmNvbmZpZy5leHQtdW5rbm93bi1wcm9wcy5qc29uJyxcbiAgKTtcbiAgY29uc3QgRVhUX1BST1BTX0ZJTEVQQVRIID0gcmVzb2x2ZUZpeHR1cmUoXG4gICAgJ2NvbmZpZycsXG4gICAgJ2FwcGl1bS5jb25maWcuZXh0LWdvb2QuanNvbicsXG4gICk7XG5cbiAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgZmluYWxpemVTY2hlbWEoKTtcbiAgfSk7XG5cbiAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICByZXNldFNjaGVtYSgpO1xuICB9KTtcblxuICBkZXNjcmliZSgnd2hlbiBwcm92aWRlZCBhIHBhdGggdG8gYSBjb25maWcgZmlsZScsIGZ1bmN0aW9uICgpIHtcbiAgICBkZXNjcmliZSgnd2hlbiB0aGUgY29uZmlnIGZpbGUgaXMgdmFsaWQgcGVyIHRoZSBzY2hlbWEnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnc2hvdWxkIHJldHVybiBhIHZhbGlkIGNvbmZpZyBvYmplY3QnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlYWRDb25maWdGaWxlKEdPT0RfRklMRVBBVEgsIHtcbiAgICAgICAgICBub3JtYWxpemU6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICAgICAgcmVzdWx0LnNob3VsZC5kZWVwLmVxdWFsKHtcbiAgICAgICAgICBjb25maWc6IHJlcXVpcmUoR09PRF9GSUxFUEFUSCksXG4gICAgICAgICAgZmlsZXBhdGg6IEdPT0RfRklMRVBBVEgsXG4gICAgICAgICAgZXJyb3JzOiBbXSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgZGVzY3JpYmUoJ3NlcnZlci5ub2RlY29uZmlnIGJlaGF2aW9yJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBkZXNjcmliZSgnd2hlbiBhIHN0cmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBlcnJvcnMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZWFkQ29uZmlnRmlsZShCQURfTk9ERUNPTkZJR19GSUxFUEFUSCwge1xuICAgICAgICAgICAgICBub3JtYWxpemU6IGZhbHNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXN1bHQuc2hvdWxkLmhhdmUubmVzdGVkLnByb3BlcnR5KFxuICAgICAgICAgICAgICAnZXJyb3JzWzBdLmluc3RhbmNlUGF0aCcsXG4gICAgICAgICAgICAgICcvc2VydmVyL25vZGVjb25maWcnLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmUoJ3doZW4gYW4gb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgdmFsaWQgY29uZmlnIG9iamVjdCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlYWRDb25maWdGaWxlKEdPT0RfRklMRVBBVEgsIHtcbiAgICAgICAgICAgICAgbm9ybWFsaXplOiBmYWxzZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmVzdWx0LnNob3VsZC5oYXZlLnByb3BlcnR5KCdlcnJvcnMnKS50aGF0LmlzLmVtcHR5O1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBkZXNjcmliZSgnc2VydmVyLmFsbG93LWluc2VjdXJlIGJlaGF2aW9yJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBkZXNjcmliZSgnd2hlbiBhIHN0cmluZyBwYXRoJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGVycm9ycycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlYWRDb25maWdGaWxlKFNFQ1VSSVRZX1BBVEhfRklMRVBBVEgsIHtcbiAgICAgICAgICAgICAgbm9ybWFsaXplOiBmYWxzZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmVzdWx0LnNob3VsZC5oYXZlLm5lc3RlZC5wcm9wZXJ0eShcbiAgICAgICAgICAgICAgJ2Vycm9yc1swXS5pbnN0YW5jZVBhdGgnLFxuICAgICAgICAgICAgICAnL3NlcnZlci9hbGxvdy1pbnNlY3VyZScsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZSgnd2hlbiBhIGNvbW1hLWRlbGltaXRlZCBzdHJpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gZXJyb3JzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVhZENvbmZpZ0ZpbGUoU0VDVVJJVFlfREVMSU1JVEVEX0ZJTEVQQVRILCB7XG4gICAgICAgICAgICAgIG5vcm1hbGl6ZTogZmFsc2UsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJlc3VsdC5zaG91bGQuaGF2ZS5uZXN0ZWQucHJvcGVydHkoXG4gICAgICAgICAgICAgICdlcnJvcnNbMF0uaW5zdGFuY2VQYXRoJyxcbiAgICAgICAgICAgICAgJy9zZXJ2ZXIvYWxsb3ctaW5zZWN1cmUnLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmUoJ3doZW4gYW4gYXJyYXknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gYSB2YWxpZCBjb25maWcgb2JqZWN0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVhZENvbmZpZ0ZpbGUoU0VDVVJJVFlfQVJSQVlfRklMRVBBVEgsIHtcbiAgICAgICAgICAgICAgbm9ybWFsaXplOiBmYWxzZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmVzdWx0LnNob3VsZC5kZWVwLmVxdWFsKHtcbiAgICAgICAgICAgICAgY29uZmlnOiByZXF1aXJlKFNFQ1VSSVRZX0FSUkFZX0ZJTEVQQVRIKSxcbiAgICAgICAgICAgICAgZmlsZXBhdGg6IFNFQ1VSSVRZX0FSUkFZX0ZJTEVQQVRILFxuICAgICAgICAgICAgICBlcnJvcnM6IFtdLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnd2hlbiB0aGUgY29uZmlnIGZpbGUgaXMgaW52YWxpZCBwZXIgdGhlIHNjaGVtYScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGRlc2NyaWJlKCd3aXRob3V0IGV4dGVuc2lvbnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIG9iamVjdCBjb250YWluaW5nIGVycm9ycycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZWFkQ29uZmlnRmlsZShCQURfRklMRVBBVEgsIHtcbiAgICAgICAgICAgIG5vcm1hbGl6ZTogZmFsc2UsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmVzdWx0LnNob3VsZC5oYXZlLmRlZXAucHJvcGVydHkoJ2NvbmZpZycsIHJlcXVpcmUoQkFEX0ZJTEVQQVRIKSk7XG4gICAgICAgICAgcmVzdWx0LnNob3VsZC5oYXZlLnByb3BlcnR5KCdmaWxlcGF0aCcsIEJBRF9GSUxFUEFUSCk7XG4gICAgICAgICAgcmVzdWx0LnNob3VsZC5oYXZlLmRlZXAucHJvcGVydHkoJ2Vycm9ycycpLnRoYXQuY29udGFpbnMubWVtYmVycyhbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGluc3RhbmNlUGF0aDogJycsXG4gICAgICAgICAgICAgIHNjaGVtYVBhdGg6ICcjL2FkZGl0aW9uYWxQcm9wZXJ0aWVzJyxcbiAgICAgICAgICAgICAga2V5d29yZDogJ2FkZGl0aW9uYWxQcm9wZXJ0aWVzJyxcbiAgICAgICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnR5OiAnYXBwaXVtLWhvbWUnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBtZXNzYWdlOiAnbXVzdCBOT1QgaGF2ZSBhZGRpdGlvbmFsIHByb3BlcnRpZXMnLFxuICAgICAgICAgICAgICBpc0lkZW50aWZpZXJMb2NhdGlvbjogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGluc3RhbmNlUGF0aDogJy9zZXJ2ZXIvYWxsb3ctY29ycycsXG4gICAgICAgICAgICAgIHNjaGVtYVBhdGg6ICcjL3Byb3BlcnRpZXMvc2VydmVyL3Byb3BlcnRpZXMvYWxsb3ctY29ycy90eXBlJyxcbiAgICAgICAgICAgICAga2V5d29yZDogJ3R5cGUnLFxuICAgICAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdtdXN0IGJlIGJvb2xlYW4nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaW5zdGFuY2VQYXRoOiAnL3NlcnZlci9hbGxvdy1pbnNlY3VyZScsXG4gICAgICAgICAgICAgIHNjaGVtYVBhdGg6ICcjL3Byb3BlcnRpZXMvc2VydmVyL3Byb3BlcnRpZXMvYWxsb3ctaW5zZWN1cmUvdHlwZScsXG4gICAgICAgICAgICAgIGtleXdvcmQ6ICd0eXBlJyxcbiAgICAgICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ2FycmF5J1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBtZXNzYWdlOiAnbXVzdCBiZSBhcnJheScsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpbnN0YW5jZVBhdGg6ICcvc2VydmVyL2NhbGxiYWNrLXBvcnQnLFxuICAgICAgICAgICAgICBzY2hlbWFQYXRoOlxuICAgICAgICAgICAgICAgICcjL3Byb3BlcnRpZXMvc2VydmVyL3Byb3BlcnRpZXMvY2FsbGJhY2stcG9ydC9tYXhpbXVtJyxcbiAgICAgICAgICAgICAga2V5d29yZDogJ21heGltdW0nLFxuICAgICAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgICAgICBjb21wYXJpc29uOiAnPD0nLFxuICAgICAgICAgICAgICAgIGxpbWl0OiA2NTUzNSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgbWVzc2FnZTogJ211c3QgYmUgPD0gNjU1MzUnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaW5zdGFuY2VQYXRoOiAnL3NlcnZlci9sb2ctbGV2ZWwnLFxuICAgICAgICAgICAgICBzY2hlbWFQYXRoOiAnIy9wcm9wZXJ0aWVzL3NlcnZlci9wcm9wZXJ0aWVzL2xvZy1sZXZlbC9lbnVtJyxcbiAgICAgICAgICAgICAga2V5d29yZDogJ2VudW0nLFxuICAgICAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXG4gICAgICAgICAgICAgICAgICAnaW5mbycsXG4gICAgICAgICAgICAgICAgICAnaW5mbzpkZWJ1ZycsXG4gICAgICAgICAgICAgICAgICAnaW5mbzppbmZvJyxcbiAgICAgICAgICAgICAgICAgICdpbmZvOndhcm4nLFxuICAgICAgICAgICAgICAgICAgJ2luZm86ZXJyb3InLFxuICAgICAgICAgICAgICAgICAgJ3dhcm4nLFxuICAgICAgICAgICAgICAgICAgJ3dhcm46ZGVidWcnLFxuICAgICAgICAgICAgICAgICAgJ3dhcm46aW5mbycsXG4gICAgICAgICAgICAgICAgICAnd2Fybjp3YXJuJyxcbiAgICAgICAgICAgICAgICAgICd3YXJuOmVycm9yJyxcbiAgICAgICAgICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAnZXJyb3I6ZGVidWcnLFxuICAgICAgICAgICAgICAgICAgJ2Vycm9yOmluZm8nLFxuICAgICAgICAgICAgICAgICAgJ2Vycm9yOndhcm4nLFxuICAgICAgICAgICAgICAgICAgJ2Vycm9yOmVycm9yJyxcbiAgICAgICAgICAgICAgICAgICdkZWJ1ZycsXG4gICAgICAgICAgICAgICAgICAnZGVidWc6ZGVidWcnLFxuICAgICAgICAgICAgICAgICAgJ2RlYnVnOmluZm8nLFxuICAgICAgICAgICAgICAgICAgJ2RlYnVnOndhcm4nLFxuICAgICAgICAgICAgICAgICAgJ2RlYnVnOmVycm9yJyxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBtZXNzYWdlOiAnbXVzdCBiZSBlcXVhbCB0byBvbmUgb2YgdGhlIGFsbG93ZWQgdmFsdWVzJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGluc3RhbmNlUGF0aDogJy9zZXJ2ZXIvbG9nLW5vLWNvbG9ycycsXG4gICAgICAgICAgICAgIHNjaGVtYVBhdGg6ICcjL3Byb3BlcnRpZXMvc2VydmVyL3Byb3BlcnRpZXMvbG9nLW5vLWNvbG9ycy90eXBlJyxcbiAgICAgICAgICAgICAga2V5d29yZDogJ3R5cGUnLFxuICAgICAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdtdXN0IGJlIGJvb2xlYW4nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaW5zdGFuY2VQYXRoOiAnL3NlcnZlci9wb3J0JyxcbiAgICAgICAgICAgICAgc2NoZW1hUGF0aDogJyMvcHJvcGVydGllcy9zZXJ2ZXIvcHJvcGVydGllcy9wb3J0L3R5cGUnLFxuICAgICAgICAgICAgICBrZXl3b3JkOiAndHlwZScsXG4gICAgICAgICAgICAgIHBhcmFtczoge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdpbnRlZ2VyJyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgbWVzc2FnZTogJ211c3QgYmUgaW50ZWdlcicsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0pLmFuZC5sZW5ndGhPZig3KTtcblxuICAgICAgICAgIHJlc3VsdC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgncmVhc29uJykudGhhdC5pcy5hLnN0cmluZztcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgZGVzY3JpYmUoJ3dpdGggZXh0ZW5zaW9ucycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLyoqIEB0eXBlIHtpbXBvcnQoJy4uL2xpYi9jb25maWctZmlsZScpLlJlYWRDb25maWdGaWxlUmVzdWx0fSAqL1xuICAgICAgICBsZXQgcmVzdWx0O1xuXG4gICAgICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJlc2V0U2NoZW1hKCk7XG4gICAgICAgICAgcmVnaXN0ZXJTY2hlbWEoJ2RyaXZlcicsICdmYWtlJywgZXh0U2NoZW1hKTtcbiAgICAgICAgICBmaW5hbGl6ZVNjaGVtYSgpO1xuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZSgnd2hlbiBwcm92aWRlZCBhIGNvbmZpZyBmaWxlIHdpdGggdW5rbm93biBwcm9wZXJ0aWVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGJlZm9yZUVhY2goYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmVzdWx0ID0gYXdhaXQgcmVhZENvbmZpZ0ZpbGUoVU5LTk9XTl9QUk9QU19GSUxFUEFUSCwge1xuICAgICAgICAgICAgICBub3JtYWxpemU6IGZhbHNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gb2JqZWN0IGNvbnRhaW5pbmcgZXJyb3JzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmVzdWx0LnNob3VsZC5oYXZlLmRlZXAucHJvcGVydHkoJ2Vycm9ycycsIFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGluc3RhbmNlUGF0aDogJy9zZXJ2ZXIvZHJpdmVyL2Zha2UnLFxuICAgICAgICAgICAgICAgIHNjaGVtYVBhdGg6XG4gICAgICAgICAgICAgICAgICAnZHJpdmVyLWZha2UuanNvbi9hZGRpdGlvbmFsUHJvcGVydGllcycsXG4gICAgICAgICAgICAgICAga2V5d29yZDogJ2FkZGl0aW9uYWxQcm9wZXJ0aWVzJyxcbiAgICAgICAgICAgICAgICBwYXJhbXM6IHthZGRpdGlvbmFsUHJvcGVydHk6ICdidWJiJ30sXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ211c3QgTk9UIGhhdmUgYWRkaXRpb25hbCBwcm9wZXJ0aWVzJyxcbiAgICAgICAgICAgICAgICBpc0lkZW50aWZpZXJMb2NhdGlvbjogdHJ1ZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZSgnd2hlbiBwcm92aWRlZCBhIGNvbmZpZyBmaWxlIHdpdGggdmFsaWQgcHJvcGVydGllcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBiZWZvcmVFYWNoKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IHJlYWRDb25maWdGaWxlKEVYVF9QUk9QU19GSUxFUEFUSCwge1xuICAgICAgICAgICAgICBub3JtYWxpemU6IGZhbHNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gb2JqZWN0IGNvbnRhaW5pbmcgbm8gZXJyb3JzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmVzdWx0LnNob3VsZC5oYXZlLmRlZXAucHJvcGVydHkoJ2Vycm9ycycsIFtdKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCd3aGVuIHRoZSBjb25maWcgZmlsZSBpcyBpbnZhbGlkIEpTT04nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnc2hvdWxkIHJlamVjdCB3aXRoIGEgdXNlci1mcmllbmRseSBlcnJvciBtZXNzYWdlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCByZWFkQ29uZmlnRmlsZShJTlZBTElEX0pTT05fRklMRVBBVEgpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoXG4gICAgICAgICAgbmV3IFJlZ0V4cChgJHtJTlZBTElEX0pTT05fRklMRVBBVEh9IGlzIGludmFsaWRgKSxcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl0sImZpbGUiOiJ0ZXN0L2NvbmZpZy1maWxlLWUyZS1zcGVjcy5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9
|