@appium/base-driver 8.1.2 → 8.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/build/lib/basedriver/capabilities.js +3 -1
  2. package/build/lib/basedriver/commands/index.js +2 -4
  3. package/build/lib/basedriver/driver.js +8 -10
  4. package/build/lib/basedriver/helpers.js +140 -82
  5. package/build/lib/express/express-logging.js +2 -2
  6. package/build/lib/index.js +126 -0
  7. package/build/lib/jsonwp-proxy/protocol-converter.js +2 -5
  8. package/build/lib/jsonwp-proxy/proxy.js +2 -5
  9. package/build/lib/protocol/errors.js +4 -2
  10. package/build/lib/protocol/helpers.js +3 -20
  11. package/build/lib/protocol/index.js +13 -1
  12. package/build/lib/protocol/protocol.js +26 -25
  13. package/build/lib/protocol/routes.js +1 -10
  14. package/build/test/basedriver/capability-specs.js +10 -10
  15. package/build/test/basedriver/commands/event-specs.js +10 -10
  16. package/build/test/basedriver/driver-e2e-specs.js +3 -3
  17. package/build/test/basedriver/driver-e2e-tests.js +6 -223
  18. package/build/test/basedriver/driver-specs.js +3 -3
  19. package/build/test/basedriver/driver-tests.js +6 -6
  20. package/build/test/basedriver/helpers-specs.js +5 -1
  21. package/build/test/basedriver/timeout-specs.js +7 -7
  22. package/build/test/basedriver/websockets-e2e-specs.js +5 -5
  23. package/build/test/express/server-e2e-specs.js +156 -0
  24. package/build/test/express/server-specs.js +151 -0
  25. package/build/test/express/static-specs.js +23 -0
  26. package/build/test/helpers.js +57 -0
  27. package/build/test/jsonwp-proxy/mock-request.js +93 -0
  28. package/build/test/jsonwp-proxy/protocol-converter-specs.js +173 -0
  29. package/build/test/jsonwp-proxy/proxy-e2e-specs.js +61 -0
  30. package/build/test/jsonwp-proxy/proxy-specs.js +294 -0
  31. package/build/test/jsonwp-proxy/url-specs.js +167 -0
  32. package/build/test/jsonwp-status/status-specs.js +36 -0
  33. package/build/test/protocol/errors-specs.js +388 -0
  34. package/build/test/protocol/fake-driver.js +168 -0
  35. package/build/test/protocol/helpers.js +27 -0
  36. package/build/test/protocol/protocol-e2e-specs.js +1182 -0
  37. package/build/test/protocol/routes-specs.js +82 -0
  38. package/build/test/protocol/validator-specs.js +151 -0
  39. package/index.d.ts +5 -3
  40. package/index.js +1 -62
  41. package/lib/basedriver/capabilities.js +3 -0
  42. package/lib/basedriver/commands/index.js +0 -2
  43. package/lib/basedriver/driver.js +6 -26
  44. package/lib/basedriver/helpers.js +202 -85
  45. package/lib/express/express-logging.js +1 -1
  46. package/lib/index.js +64 -0
  47. package/lib/jsonwp-proxy/protocol-converter.js +1 -5
  48. package/lib/jsonwp-proxy/proxy.js +1 -3
  49. package/lib/protocol/errors.js +1 -1
  50. package/lib/protocol/helpers.js +5 -25
  51. package/lib/protocol/index.js +3 -1
  52. package/lib/protocol/protocol.js +26 -31
  53. package/lib/protocol/routes.js +0 -3
  54. package/package.json +8 -16
  55. package/test/basedriver/capability-specs.js +1 -1
  56. package/test/basedriver/commands/event-specs.js +1 -1
  57. package/test/basedriver/driver-e2e-specs.js +1 -1
  58. package/test/basedriver/driver-e2e-tests.js +1 -179
  59. package/test/basedriver/driver-specs.js +1 -1
  60. package/test/basedriver/driver-tests.js +3 -3
  61. package/test/basedriver/helpers-specs.js +4 -0
  62. package/test/basedriver/timeout-specs.js +1 -1
  63. package/test/basedriver/websockets-e2e-specs.js +1 -1
  64. package/build/index.js +0 -120
  65. package/build/lib/basedriver/commands/execute-child.js +0 -137
  66. package/build/lib/basedriver/commands/execute.js +0 -119
  67. package/build/test/basedriver/fixtures/custom-element-finder-bad.js +0 -12
  68. package/build/test/basedriver/fixtures/custom-element-finder.js +0 -36
  69. package/lib/basedriver/commands/execute-child.js +0 -132
  70. package/lib/basedriver/commands/execute.js +0 -126
@@ -0,0 +1,156 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ require("source-map-support/register");
6
+
7
+ var _lib = require("../../lib");
8
+
9
+ var _axios = _interopRequireDefault(require("axios"));
10
+
11
+ var _sinon = _interopRequireDefault(require("sinon"));
12
+
13
+ var _bluebird = _interopRequireDefault(require("bluebird"));
14
+
15
+ var _lodash = _interopRequireDefault(require("lodash"));
16
+
17
+ var _helpers = require("../helpers");
18
+
19
+ describe('server', function () {
20
+ let hwServer;
21
+ let errorStub;
22
+ let port;
23
+ before(async function () {
24
+ port = await (0, _helpers.getTestPort)(true);
25
+ errorStub = _sinon.default.stub(console, 'error');
26
+
27
+ function configureRoutes(app) {
28
+ app.get('/', (req, res) => {
29
+ res.header['content-type'] = 'text/html';
30
+ res.status(200).send('Hello World!');
31
+ });
32
+ app.get('/python', (req, res) => {
33
+ res.status(200).send(req.headers['content-type']);
34
+ });
35
+ app.get('/error', () => {
36
+ throw new Error('hahaha');
37
+ });
38
+ app.get('/pause', async (req, res) => {
39
+ res.header['content-type'] = 'text/html';
40
+ await _bluebird.default.delay(1000);
41
+ res.status(200).send('We have waited!');
42
+ });
43
+ }
44
+
45
+ hwServer = await (0, _lib.server)({
46
+ routeConfiguringFunction: configureRoutes,
47
+ port
48
+ });
49
+ });
50
+ after(async function () {
51
+ await hwServer.close();
52
+ errorStub.restore();
53
+ });
54
+ it('should start up with our middleware', async function () {
55
+ const {
56
+ data
57
+ } = await _axios.default.get(`http://${_helpers.TEST_HOST}:${port}/`);
58
+ data.should.eql('Hello World!');
59
+ });
60
+ it('should fix broken context type', async function () {
61
+ const {
62
+ data
63
+ } = await (0, _axios.default)({
64
+ url: `http://${_helpers.TEST_HOST}:${port}/python`,
65
+ headers: {
66
+ 'user-agent': 'Python',
67
+ 'content-type': 'application/x-www-form-urlencoded'
68
+ }
69
+ });
70
+ data.should.eql('application/json; charset=utf-8');
71
+ });
72
+ it('should catch errors in the catchall', async function () {
73
+ await _axios.default.get(`http://${_helpers.TEST_HOST}:${port}/error`).should.be.rejected;
74
+ });
75
+ it('should error if we try to start again on a port that is used', async function () {
76
+ await (0, _lib.server)({
77
+ routeConfiguringFunction() {},
78
+
79
+ port
80
+ }).should.be.rejectedWith(/EADDRINUSE/);
81
+ });
82
+ it('should not wait for the server close connections before finishing closing', async function () {
83
+ let bodyPromise = _axios.default.get(`http://${_helpers.TEST_HOST}:${port}/pause`).catch(() => {});
84
+
85
+ await _bluebird.default.delay(100);
86
+ let before = Date.now();
87
+ await hwServer.close();
88
+ (Date.now() - before).should.not.be.above(800);
89
+ await bodyPromise;
90
+ });
91
+ it('should error if we try to start on a bad hostname', async function () {
92
+ this.timeout(60000);
93
+ await (0, _lib.server)({
94
+ routeConfiguringFunction: _lodash.default.noop,
95
+ port,
96
+ hostname: 'lolcathost'
97
+ }).should.be.rejectedWith(/ENOTFOUND|EADDRNOTAVAIL|EAI_AGAIN/);
98
+ await (0, _lib.server)({
99
+ routeConfiguringFunction: _lodash.default.noop,
100
+ port,
101
+ hostname: '1.1.1.1'
102
+ }).should.be.rejectedWith(/EADDRNOTAVAIL/);
103
+ });
104
+ });
105
+ describe('server plugins', function () {
106
+ let hwServer;
107
+ let port;
108
+ before(async function () {
109
+ port = await (0, _helpers.getTestPort)(true);
110
+ });
111
+ afterEach(async function () {
112
+ try {
113
+ await hwServer.close();
114
+ } catch (ign) {}
115
+ });
116
+
117
+ function updaterWithGetRoute(route, reply) {
118
+ return async (app, httpServer) => {
119
+ app.get(`/${route}`, (req, res) => {
120
+ res.header['content-type'] = 'text/html';
121
+ res.status(200).send(reply);
122
+ });
123
+ httpServer[`_updated_${route}`] = true;
124
+ };
125
+ }
126
+
127
+ it('should allow one or more plugins to update the server', async function () {
128
+ hwServer = await (0, _lib.server)({
129
+ routeConfiguringFunction: _lodash.default.noop,
130
+ port,
131
+ serverUpdaters: [updaterWithGetRoute('plugin1', 'res from plugin1 route'), updaterWithGetRoute('plugin2', 'res from plugin2 route')]
132
+ });
133
+ let {
134
+ data
135
+ } = await _axios.default.get(`http://${_helpers.TEST_HOST}:${port}/plugin1`);
136
+ data.should.eql('res from plugin1 route');
137
+ ({
138
+ data
139
+ } = await _axios.default.get(`http://${_helpers.TEST_HOST}:${port}/plugin2`));
140
+ data.should.eql('res from plugin2 route');
141
+ hwServer._updated_plugin1.should.be.true;
142
+ hwServer._updated_plugin2.should.be.true;
143
+ });
144
+ it('should pass on errors from the plugin updateServer method', async function () {
145
+ await (0, _lib.server)({
146
+ routeConfiguringFunction: _lodash.default.noop,
147
+ port,
148
+ serverUpdaters: [() => {
149
+ throw new Error('ugh');
150
+ }]
151
+ }).should.eventually.be.rejectedWith(/ugh/);
152
+ });
153
+ });require('source-map-support').install();
154
+
155
+
156
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvZXhwcmVzcy9zZXJ2ZXItZTJlLXNwZWNzLmpzIl0sIm5hbWVzIjpbImRlc2NyaWJlIiwiaHdTZXJ2ZXIiLCJlcnJvclN0dWIiLCJwb3J0IiwiYmVmb3JlIiwic2lub24iLCJzdHViIiwiY29uc29sZSIsImNvbmZpZ3VyZVJvdXRlcyIsImFwcCIsImdldCIsInJlcSIsInJlcyIsImhlYWRlciIsInN0YXR1cyIsInNlbmQiLCJoZWFkZXJzIiwiRXJyb3IiLCJCIiwiZGVsYXkiLCJyb3V0ZUNvbmZpZ3VyaW5nRnVuY3Rpb24iLCJhZnRlciIsImNsb3NlIiwicmVzdG9yZSIsIml0IiwiZGF0YSIsImF4aW9zIiwiVEVTVF9IT1NUIiwic2hvdWxkIiwiZXFsIiwidXJsIiwiYmUiLCJyZWplY3RlZCIsInJlamVjdGVkV2l0aCIsImJvZHlQcm9taXNlIiwiY2F0Y2giLCJEYXRlIiwibm93Iiwibm90IiwiYWJvdmUiLCJ0aW1lb3V0IiwiXyIsIm5vb3AiLCJob3N0bmFtZSIsImFmdGVyRWFjaCIsImlnbiIsInVwZGF0ZXJXaXRoR2V0Um91dGUiLCJyb3V0ZSIsInJlcGx5IiwiaHR0cFNlcnZlciIsInNlcnZlclVwZGF0ZXJzIiwiX3VwZGF0ZWRfcGx1Z2luMSIsInRydWUiLCJfdXBkYXRlZF9wbHVnaW4yIiwiZXZlbnR1YWxseSJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0FBLFFBQVEsQ0FBQyxRQUFELEVBQVcsWUFBWTtBQUM3QixNQUFJQyxRQUFKO0FBQ0EsTUFBSUMsU0FBSjtBQUNBLE1BQUlDLElBQUo7QUFDQUMsRUFBQUEsTUFBTSxDQUFDLGtCQUFrQjtBQUN2QkQsSUFBQUEsSUFBSSxHQUFHLE1BQU0sMEJBQVksSUFBWixDQUFiO0FBQ0FELElBQUFBLFNBQVMsR0FBR0csZUFBTUMsSUFBTixDQUFXQyxPQUFYLEVBQW9CLE9BQXBCLENBQVo7O0FBQ0EsYUFBU0MsZUFBVCxDQUEwQkMsR0FB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QUFDRyxNQUFMLENBQVlDLEdBQVosQ0FBZ0Isd0JBQWhCO0FBQ0EsS0FBQztBQUFDSixNQUFBQTtBQUFELFFBQVMsTUFBTUMsZUFBTWhCLEdBQU4sQ0FBVyxVQUFTaUIsa0JBQVUsSUFBR3hCLElBQUssVUFBdEMsQ0FBaEI7QUFDQXNCLElBQUFBLElBQUksQ0FBQ0csTUFBTCxDQUFZQyxHQUFaLENBQWdCLHdCQUFoQjtBQUNBNUIsSUFBQUEsUUFBUSxDQUFDa0QsZ0JBQVQsQ0FBMEJ2QixNQUExQixDQUFpQ0csRUFBakMsQ0FBb0NxQixJQUFwQztBQUNBbkQsSUFBQUEsUUFBUSxDQUFDb0QsZ0JBQVQsQ0FBMEJ6QixNQUExQixDQUFpQ0csRUFBakMsQ0FBb0NxQixJQUFwQztBQUNELEdBZkMsQ0FBRjtBQWdCQTVCLEVBQUFBLEVBQUUsQ0FBQywyREFBRCxFQUE4RCxrQkFBa0I7QUFDaEYsVUFBTSxpQkFBTztBQUNYSixNQUFBQSx3QkFBd0IsRUFBRXFCLGdCQUFFQyxJQURqQjtBQUVYdkMsTUFBQUEsSUFGVztBQUdYK0MsTUFBQUEsY0FBYyxFQUFFLENBQUMsTUFBTTtBQUFFLGNBQU0sSUFBSWpDLEtBQUosQ0FBVSxLQUFWLENBQU47QUFBd0IsT0FBakM7QUFITCxLQUFQLEVBSUhXLE1BSkcsQ0FJSTBCLFVBSkosQ0FJZXZCLEVBSmYsQ0FJa0JFLFlBSmxCLENBSStCLEtBSi9CLENBQU47QUFLRCxHQU5DLENBQUY7QUFPRCxDQS9DTyxDQUFSIiwic291cmNlc0NvbnRlbnQiOlsiLy8gdHJhbnNwaWxlOm1vY2hhXG5cbmltcG9ydCB7IHNlcnZlciB9IGZyb20gJy4uLy4uL2xpYic7XG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHNpbm9uIGZyb20gJ3Npbm9uJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge1RFU1RfSE9TVCwgZ2V0VGVzdFBvcnR9IGZyb20gJy4uL2hlbHBlcnMnO1xuXG5cbmRlc2NyaWJlKCdzZXJ2ZXInLCBmdW5jdGlvbiAoKSB7XG4gIGxldCBod1NlcnZlcjtcbiAgbGV0IGVycm9yU3R1YjtcbiAgbGV0IHBvcnQ7XG4gIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgcG9ydCA9IGF3YWl0IGdldFRlc3RQb3J0KHRydWUpO1xuICAgIGVycm9yU3R1YiA9IHNpbm9uLnN0dWIoY29uc29sZSwgJ2Vycm9yJyk7XG4gICAgZnVuY3Rpb24gY29uZmlndXJlUm91dGVzIChhcHApIHtcbiAgICAgIGFwcC5nZXQoJy8nLCAocmVxLCByZXMpID0+IHtcbiAgICAgICAgcmVzLmhlYWRlclsnY29udGVudC10eXBlJ10gPSAndGV4dC9odG1sJztcbiAgICAgICAgcmVzLnN0YXR1cygyMDApLnNlbmQoJ0hlbGxvIFdvcmxkIScpO1xuICAgICAgfSk7XG4gICAgICBhcHAuZ2V0KCcvcHl0aG9uJywgKHJlcSwgcmVzKSA9PiB7XG4gICAgICAgIHJlcy5zdGF0dXMoMjAwKS5zZW5kKHJlcS5oZWFkZXJzWydjb250ZW50LXR5cGUnXSk7XG4gICAgICB9KTtcbiAgICAgIGFwcC5nZXQoJy9lcnJvcicsICgpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdoYWhhaGEnKTtcbiAgICAgIH0pO1xuICAgICAgYXBwLmdldCgnL3BhdXNlJywgYXN5bmMgKHJlcSwgcmVzKSA9PiB7XG4gICAgICAgIHJlcy5oZWFkZXJbJ2NvbnRlbnQtdHlwZSddID0gJ3RleHQvaHRtbCc7XG4gICAgICAgIGF3YWl0IEIuZGVsYXkoMTAwMCk7XG4gICAgICAgIHJlcy5zdGF0dXMoMjAwKS5zZW5kKCdXZSBoYXZlIHdhaXRlZCEnKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBod1NlcnZlciA9IGF3YWl0IHNlcnZlcih7XG4gICAgICByb3V0ZUNvbmZpZ3VyaW5nRnVuY3Rpb246IGNvbmZpZ3VyZVJvdXRlcyxcbiAgICAgIHBvcnQsXG4gICAgfSk7XG4gIH0pO1xuICBhZnRlcihhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgYXdhaXQgaHdTZXJ2ZXIuY2xvc2UoKTtcbiAgICBlcnJvclN0dWIucmVzdG9yZSgpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHN0YXJ0IHVwIHdpdGggb3VyIG1pZGRsZXdhcmUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qge2RhdGF9ID0gYXdhaXQgYXhpb3MuZ2V0KGBodHRwOi8vJHtURVNUX0hPU1R9OiR7cG9ydH0vYCk7XG4gICAgZGF0YS5zaG91bGQuZXFsKCdIZWxsbyBXb3JsZCEnKTtcbiAgfSk7XG4gIGl0KCdzaG91bGQgZml4IGJyb2tlbiBjb250ZXh0IHR5cGUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qge2RhdGF9ID0gYXdhaXQgYXhpb3Moe1xuICAgICAgdXJsOiBgaHR0cDovLyR7VEVTVF9IT1NUfToke3BvcnR9L3B5dGhvbmAsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICd1c2VyLWFnZW50JzogJ1B5dGhvbicsXG4gICAgICAgICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ1xuICAgICAgfVxuICAgIH0pO1xuICAgIGRhdGEuc2hvdWxkLmVxbCgnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOCcpO1xuICB9KTtcbiAgaXQoJ3Nob3VsZCBjYXRjaCBlcnJvcnMgaW4gdGhlIGNhdGNoYWxsJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGF3YWl0IGF4aW9zLmdldChgaHR0cDovLyR7VEVTVF9IT1NUfToke3BvcnR9L2Vycm9yYCkuc2hvdWxkLmJlLnJlamVjdGVkO1xuICB9KTtcbiAgaXQoJ3Nob3VsZCBlcnJvciBpZiB3ZSB0cnkgdG8gc3RhcnQgYWdhaW4gb24gYSBwb3J0IHRoYXQgaXMgdXNlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBhd2FpdCBzZXJ2ZXIoe1xuICAgICAgcm91dGVDb25maWd1cmluZ0Z1bmN0aW9uICgpIHt9LFxuICAgICAgcG9ydCxcbiAgICB9KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9FQUREUklOVVNFLyk7XG4gIH0pO1xuICBpdCgnc2hvdWxkIG5vdCB3YWl0IGZvciB0aGUgc2VydmVyIGNsb3NlIGNvbm5lY3Rpb25zIGJlZm9yZSBmaW5pc2hpbmcgY2xvc2luZycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgYm9keVByb21pc2UgPSBheGlvcy5nZXQoYGh0dHA6Ly8ke1RFU1RfSE9TVH06JHtwb3J0fS9wYXVzZWApLmNhdGNoKCgpID0+IHt9KTtcblxuICAgIC8vIHJlbGlucXVpc2ggY29udHJvbCBzbyB0aGF0IHdlIGRvbid0IGNsb3NlIGJlZm9yZSB0aGUgcmVxdWVzdCBpcyByZWNlaXZlZFxuICAgIGF3YWl0IEIuZGVsYXkoMTAwKTtcblxuICAgIGxldCBiZWZvcmUgPSBEYXRlLm5vdygpO1xuICAgIGF3YWl0IGh3U2VydmVyLmNsb3NlKCk7XG4gICAgLy8gZXhwZWN0IHNsaWdodGx5IGxlc3MgdGhhbiB0aGUgcmVxdWVzdCB3YWl0ZWQsIHNpbmNlIHdlIHBhdXNlZCBhYm92ZVxuICAgIChEYXRlLm5vdygpIC0gYmVmb3JlKS5zaG91bGQubm90LmJlLmFib3ZlKDgwMCk7XG5cbiAgICBhd2FpdCBib2R5UHJvbWlzZTtcbiAgfSk7XG4gIGl0KCdzaG91bGQgZXJyb3IgaWYgd2UgdHJ5IHRvIHN0YXJ0IG9uIGEgYmFkIGhvc3RuYW1lJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIHRoaXMudGltZW91dCg2MDAwMCk7XG4gICAgYXdhaXQgc2VydmVyKHtcbiAgICAgIHJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbjogXy5ub29wLFxuICAgICAgcG9ydCxcbiAgICAgIGhvc3RuYW1lOiAnbG9sY2F0aG9zdCcsXG4gICAgfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvRU5PVEZPVU5EfEVBRERSTk9UQVZBSUx8RUFJX0FHQUlOLyk7XG4gICAgYXdhaXQgc2VydmVyKHtcbiAgICAgIHJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbjogXy5ub29wLFxuICAgICAgcG9ydCxcbiAgICAgIGhvc3RuYW1lOiAnMS4xLjEuMScsXG4gICAgfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvRUFERFJOT1RBVkFJTC8pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnc2VydmVyIHBsdWdpbnMnLCBmdW5jdGlvbiAoKSB7XG4gIGxldCBod1NlcnZlcjtcbiAgbGV0IHBvcnQ7XG5cbiAgYmVmb3JlKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBwb3J0ID0gYXdhaXQgZ2V0VGVzdFBvcnQodHJ1ZSk7XG4gIH0pO1xuXG4gIGFmdGVyRWFjaChhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGh3U2VydmVyLmNsb3NlKCk7XG4gICAgfSBjYXRjaCAoaWduKSB7fVxuICB9KTtcblxuICBmdW5jdGlvbiB1cGRhdGVyV2l0aEdldFJvdXRlIChyb3V0ZSwgcmVwbHkpIHtcbiAgICByZXR1cm4gYXN5bmMgKGFwcCwgaHR0cFNlcnZlcikgPT4geyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHJlcXVpcmUtYXdhaXRcbiAgICAgIGFwcC5nZXQoYC8ke3JvdXRlfWAsIChyZXEsIHJlcykgPT4ge1xuICAgICAgICByZXMuaGVhZGVyWydjb250ZW50LXR5cGUnXSA9ICd0ZXh0L2h0bWwnO1xuICAgICAgICByZXMuc3RhdHVzKDIwMCkuc2VuZChyZXBseSk7XG4gICAgICB9KTtcbiAgICAgIGh0dHBTZXJ2ZXJbYF91cGRhdGVkXyR7cm91dGV9YF0gPSB0cnVlO1xuICAgIH07XG4gIH1cblxuICBpdCgnc2hvdWxkIGFsbG93IG9uZSBvciBtb3JlIHBsdWdpbnMgdG8gdXBkYXRlIHRoZSBzZXJ2ZXInLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgaHdTZXJ2ZXIgPSBhd2FpdCBzZXJ2ZXIoe1xuICAgICAgcm91dGVDb25maWd1cmluZ0Z1bmN0aW9uOiBfLm5vb3AsXG4gICAgICBwb3J0LFxuICAgICAgc2VydmVyVXBkYXRlcnM6IFtcbiAgICAgICAgdXBkYXRlcldpdGhHZXRSb3V0ZSgncGx1Z2luMScsICdyZXMgZnJvbSBwbHVnaW4xIHJvdXRlJyksXG4gICAgICAgIHVwZGF0ZXJXaXRoR2V0Um91dGUoJ3BsdWdpbjInLCAncmVzIGZyb20gcGx1Z2luMiByb3V0ZScpLFxuICAgICAgXVxuICAgIH0pO1xuICAgIGxldCB7ZGF0YX0gPSBhd2FpdCBheGlvcy5nZXQoYGh0dHA6Ly8ke1RFU1RfSE9TVH06JHtwb3J0fS9wbHVnaW4xYCk7XG4gICAgZGF0YS5zaG91bGQuZXFsKCdyZXMgZnJvbSBwbHVnaW4xIHJvdXRlJyk7XG4gICAgKHtkYXRhfSA9IGF3YWl0IGF4aW9zLmdldChgaHR0cDovLyR7VEVTVF9IT1NUfToke3BvcnR9L3BsdWdpbjJgKSk7XG4gICAgZGF0YS5zaG91bGQuZXFsKCdyZXMgZnJvbSBwbHVnaW4yIHJvdXRlJyk7XG4gICAgaHdTZXJ2ZXIuX3VwZGF0ZWRfcGx1Z2luMS5zaG91bGQuYmUudHJ1ZTtcbiAgICBod1NlcnZlci5fdXBkYXRlZF9wbHVnaW4yLnNob3VsZC5iZS50cnVlO1xuICB9KTtcbiAgaXQoJ3Nob3VsZCBwYXNzIG9uIGVycm9ycyBmcm9tIHRoZSBwbHVnaW4gdXBkYXRlU2VydmVyIG1ldGhvZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBhd2FpdCBzZXJ2ZXIoe1xuICAgICAgcm91dGVDb25maWd1cmluZ0Z1bmN0aW9uOiBfLm5vb3AsXG4gICAgICBwb3J0LFxuICAgICAgc2VydmVyVXBkYXRlcnM6IFsoKSA9PiB7IHRocm93IG5ldyBFcnJvcigndWdoJyk7fV1cbiAgICB9KS5zaG91bGQuZXZlbnR1YWxseS5iZS5yZWplY3RlZFdpdGgoL3VnaC8pO1xuICB9KTtcbn0pO1xuIl0sImZpbGUiOiJ0ZXN0L2V4cHJlc3Mvc2VydmVyLWUyZS1zcGVjcy5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
@@ -0,0 +1,151 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ require("source-map-support/register");
6
+
7
+ var _lib = require("../../lib");
8
+
9
+ var _server2 = require("../../lib/express/server");
10
+
11
+ var _sinon = _interopRequireDefault(require("sinon"));
12
+
13
+ var _helpers = require("../helpers");
14
+
15
+ function fakeApp() {
16
+ const app = {
17
+ use: _sinon.default.spy(),
18
+ all: _sinon.default.spy(),
19
+ get: _sinon.default.spy(),
20
+ post: _sinon.default.spy(),
21
+ delete: _sinon.default.spy(),
22
+ totalCount: () => app.use.callCount + app.all.callCount + app.get.callCount + app.post.callCount + app.delete.callCount
23
+ };
24
+ return app;
25
+ }
26
+
27
+ const newMethodMap = {
28
+ '/session/:sessionId/fake': {
29
+ GET: {
30
+ command: 'fakeGet'
31
+ },
32
+ POST: {
33
+ command: 'fakePost',
34
+ payloadParams: {
35
+ required: ['fakeParam']
36
+ }
37
+ }
38
+ }
39
+ };
40
+
41
+ const updateServer = (app, httpServer) => {
42
+ app.updated = true;
43
+ httpServer.updated = true;
44
+ };
45
+
46
+ function fakeDriver() {
47
+ return {
48
+ sessionExists: () => {},
49
+ executeCommand: () => {}
50
+ };
51
+ }
52
+
53
+ describe('server configuration', function () {
54
+ let port;
55
+ before(async function () {
56
+ port = await (0, _helpers.getTestPort)(true);
57
+ });
58
+ it('should actually use the middleware', function () {
59
+ const app = fakeApp();
60
+
61
+ const configureRoutes = () => {};
62
+
63
+ (0, _server2.configureServer)({
64
+ app,
65
+ addRoutes: configureRoutes
66
+ });
67
+ app.use.callCount.should.equal(14);
68
+ app.all.callCount.should.equal(4);
69
+ });
70
+ it('should apply new methods in plugins to the standard method map', function () {
71
+ const app1 = fakeApp();
72
+ const app2 = fakeApp();
73
+ const driver = fakeDriver();
74
+ const addRoutes = (0, _lib.routeConfiguringFunction)(driver);
75
+ (0, _server2.configureServer)({
76
+ app: app1,
77
+ addRoutes
78
+ });
79
+ (0, _server2.configureServer)({
80
+ app: app2,
81
+ addRoutes,
82
+ extraMethodMap: newMethodMap
83
+ });
84
+ app2.totalCount().should.eql(app1.totalCount() + 2);
85
+ });
86
+ it('should silently reject new methods in plugins if not plain objects', function () {
87
+ const app1 = fakeApp();
88
+ const app2 = fakeApp();
89
+ const driver = fakeDriver();
90
+ const addRoutes = (0, _lib.routeConfiguringFunction)(driver);
91
+ (0, _server2.configureServer)({
92
+ app: app1,
93
+ addRoutes
94
+ });
95
+ (0, _server2.configureServer)({
96
+ app: app2,
97
+ addRoutes,
98
+ extraMethodMap: []
99
+ });
100
+ app2.totalCount().should.eql(app1.totalCount());
101
+ });
102
+ it('should allow plugins to update the server', async function () {
103
+ const driver = fakeDriver();
104
+
105
+ const _server = await (0, _lib.server)({
106
+ routeConfiguringFunction: (0, _lib.routeConfiguringFunction)(driver),
107
+ port,
108
+ extraMethodMap: newMethodMap,
109
+ serverUpdaters: [updateServer]
110
+ });
111
+
112
+ try {
113
+ _server.updated.should.be.true;
114
+ } finally {
115
+ await _server.close();
116
+ }
117
+ });
118
+ it('should reject if error thrown in configureRoutes parameter', async function () {
119
+ const configureRoutes = () => {
120
+ throw new Error('I am Mr. MeeSeeks look at me!');
121
+ };
122
+
123
+ await (0, _lib.server)({
124
+ routeConfiguringFunction: configureRoutes,
125
+ port
126
+ }).should.be.rejectedWith('MeeSeeks');
127
+ });
128
+ describe('#normalizeBasePath', function () {
129
+ it('should throw an error for paths of the wrong type', function () {
130
+ should.throw(() => {
131
+ (0, _server2.normalizeBasePath)(null);
132
+ });
133
+ should.throw(() => {
134
+ (0, _server2.normalizeBasePath)(1);
135
+ });
136
+ });
137
+ it('should remove trailing slashes', function () {
138
+ (0, _server2.normalizeBasePath)('/wd/hub/').should.eql('/wd/hub');
139
+ (0, _server2.normalizeBasePath)('/foo/').should.eql('/foo');
140
+ (0, _server2.normalizeBasePath)('/').should.eql('');
141
+ });
142
+ it('should ensure a leading slash is present', function () {
143
+ (0, _server2.normalizeBasePath)('foo').should.eql('/foo');
144
+ (0, _server2.normalizeBasePath)('wd/hub').should.eql('/wd/hub');
145
+ (0, _server2.normalizeBasePath)('wd/hub/').should.eql('/wd/hub');
146
+ });
147
+ });
148
+ });require('source-map-support').install();
149
+
150
+
151
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvZXhwcmVzcy9zZXJ2ZXItc3BlY3MuanMiXSwibmFtZXMiOlsiZmFrZUFwcCIsImFwcCIsInVzZSIsInNpbm9uIiwic3B5IiwiYWxsIiwiZ2V0IiwicG9zdCIsImRlbGV0ZSIsInRvdGFsQ291bnQiLCJjYWxsQ291bnQiLCJuZXdNZXRob2RNYXAiLCJHRVQiLCJjb21tYW5kIiwiUE9TVCIsInBheWxvYWRQYXJhbXMiLCJyZXF1aXJlZCIsInVwZGF0ZVNlcnZlciIsImh0dHBTZXJ2ZXIiLCJ1cGRhdGVkIiwiZmFrZURyaXZlciIsInNlc3Npb25FeGlzdHMiLCJleGVjdXRlQ29tbWFuZCIsImRlc2NyaWJlIiwicG9ydCIsImJlZm9yZSIsIml0IiwiY29uZmlndXJlUm91dGVzIiwiYWRkUm91dGVzIiwic2hvdWxkIiwiZXF1YWwiLCJhcHAxIiwiYXBwMiIsImRyaXZlciIsImV4dHJhTWV0aG9kTWFwIiwiZXFsIiwiX3NlcnZlciIsInJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbiIsInNlcnZlclVwZGF0ZXJzIiwiYmUiLCJ0cnVlIiwiY2xvc2UiLCJFcnJvciIsInJlamVjdGVkV2l0aCIsInRocm93Il0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFFQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxTQUFTQSxPQUFULEdBQW9CO0FBQ2xCLFFBQU1DLEdBQUcsR0FBRztBQUNWQyxJQUFBQSxHQUFHLEVBQUVDLGVBQU1DLEdBQU4sRUFESztBQUVWQyxJQUFBQSxHQUFHLEVBQUVGLGVBQU1DLEdBQU4sRUFGSztBQUdWRSxJQUFBQSxHQUFHLEVBQUVILGVBQU1DLEdBQU4sRUFISztBQUlWRyxJQUFBQSxJQUFJLEVBQUVKLGVBQU1DLEdBQU4sRUFKSTtBQUtWSSxJQUFBQSxNQUFNLEVBQUVMLGVBQU1DLEdBQU4sRUFMRTtBQU1WSyxJQUFBQSxVQUFVLEVBQUUsTUFDVlIsR0FBRyxDQUFDQyxHQUFKLENBQVFRLFNBQVIsR0FBb0JULEdBQUcsQ0FBQ0ksR0FBSixDQUFRSyxT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QUFZO0FBQ3pDRyxJQUFBQSxFQUFFLENBQUMsbURBQUQsRUFBc0QsWUFBWTtBQUNsRUcsTUFBQUEsTUFBTSxDQUFDZSxLQUFQLENBQWEsTUFBTTtBQUNqQix3Q0FBa0IsSUFBbEI7QUFDRCxPQUZEO0FBR0FmLE1BQUFBLE1BQU0sQ0FBQ2UsS0FBUCxDQUFhLE1BQU07QUFDakIsd0NBQWtCLENBQWxCO0FBQ0QsT0FGRDtBQUdELEtBUEMsQ0FBRjtBQVFBbEIsSUFBQUEsRUFBRSxDQUFDLGdDQUFELEVBQW1DLFlBQVk7QUFDL0Msc0NBQWtCLFVBQWxCLEVBQThCRyxNQUE5QixDQUFxQ00sR0FBckMsQ0FBeUMsU0FBekM7QUFDQSxzQ0FBa0IsT0FBbEIsRUFBMkJOLE1BQTNCLENBQWtDTSxHQUFsQyxDQUFzQyxNQUF0QztBQUNBLHNDQUFrQixHQUFsQixFQUF1Qk4sTUFBdkIsQ0FBOEJNLEdBQTlCLENBQWtDLEVBQWxDO0FBQ0QsS0FKQyxDQUFGO0FBS0FULElBQUFBLEVBQUUsQ0FBQywwQ0FBRCxFQUE2QyxZQUFZO0FBQ3pELHNDQUFrQixLQUFsQixFQUF5QkcsTUFBekIsQ0FBZ0NNLEdBQWhDLENBQW9DLE1BQXBDO0FBQ0Esc0NBQWtCLFFBQWxCLEVBQTRCTixNQUE1QixDQUFtQ00sR0FBbkMsQ0FBdUMsU0FBdkM7QUFDQSxzQ0FBa0IsU0FBbEIsRUFBNkJOLE1BQTdCLENBQW9DTSxHQUFwQyxDQUF3QyxTQUF4QztBQUNELEtBSkMsQ0FBRjtBQUtELEdBbkJPLENBQVI7QUFvQkQsQ0FoRk8sQ0FBUiIsInNvdXJjZXNDb250ZW50IjpbIi8vIHRyYW5zcGlsZTptb2NoYVxuXG5pbXBvcnQgeyBzZXJ2ZXIsIHJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbiB9IGZyb20gJy4uLy4uL2xpYic7XG5pbXBvcnQgeyBjb25maWd1cmVTZXJ2ZXIsIG5vcm1hbGl6ZUJhc2VQYXRoIH0gZnJvbSAnLi4vLi4vbGliL2V4cHJlc3Mvc2VydmVyJztcbmltcG9ydCBzaW5vbiBmcm9tICdzaW5vbic7XG5pbXBvcnQge2dldFRlc3RQb3J0fSBmcm9tICcuLi9oZWxwZXJzJztcblxuZnVuY3Rpb24gZmFrZUFwcCAoKSB7XG4gIGNvbnN0IGFwcCA9IHtcbiAgICB1c2U6IHNpbm9uLnNweSgpLFxuICAgIGFsbDogc2lub24uc3B5KCksXG4gICAgZ2V0OiBzaW5vbi5zcHkoKSxcbiAgICBwb3N0OiBzaW5vbi5zcHkoKSxcbiAgICBkZWxldGU6IHNpbm9uLnNweSgpLFxuICAgIHRvdGFsQ291bnQ6ICgpID0+IChcbiAgICAgIGFwcC51c2UuY2FsbENvdW50ICsgYXBwLmFsbC5jYWxsQ291bnQgKyBhcHAuZ2V0LmNhbGxDb3VudCArIGFwcC5wb3N0LmNhbGxDb3VudCArXG4gICAgICBhcHAuZGVsZXRlLmNhbGxDb3VudFxuICAgIClcbiAgfTtcbiAgcmV0dXJuIGFwcDtcbn1cblxuY29uc3QgbmV3TWV0aG9kTWFwID0ge1xuICAnL3Nlc3Npb24vOnNlc3Npb25JZC9mYWtlJzoge1xuICAgIEdFVDoge2NvbW1hbmQ6ICdmYWtlR2V0J30sXG4gICAgUE9TVDoge2NvbW1hbmQ6ICdmYWtlUG9zdCcsIHBheWxvYWRQYXJhbXM6IHtyZXF1aXJlZDogWydmYWtlUGFyYW0nXX19XG4gIH0sXG59O1xuXG5jb25zdCB1cGRhdGVTZXJ2ZXIgPSAoYXBwLCBodHRwU2VydmVyKSA9PiB7XG4gIGFwcC51cGRhdGVkID0gdHJ1ZTtcbiAgaHR0cFNlcnZlci51cGRhdGVkID0gdHJ1ZTtcbn07XG5cbmZ1bmN0aW9uIGZha2VEcml2ZXIgKCkge1xuICByZXR1cm4ge3Nlc3Npb25FeGlzdHM6ICgpID0+IHt9LCBleGVjdXRlQ29tbWFuZDogKCkgPT4ge319O1xufVxuXG5kZXNjcmliZSgnc2VydmVyIGNvbmZpZ3VyYXRpb24nLCBmdW5jdGlvbiAoKSB7XG4gIGxldCBwb3J0O1xuXG4gIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgcG9ydCA9IGF3YWl0IGdldFRlc3RQb3J0KHRydWUpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGFjdHVhbGx5IHVzZSB0aGUgbWlkZGxld2FyZScsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBhcHAgPSBmYWtlQXBwKCk7XG4gICAgY29uc3QgY29uZmlndXJlUm91dGVzID0gKCkgPT4ge307XG4gICAgY29uZmlndXJlU2VydmVyKHthcHAsIGFkZFJvdXRlczogY29uZmlndXJlUm91dGVzfSk7XG4gICAgYXBwLnVzZS5jYWxsQ291bnQuc2hvdWxkLmVxdWFsKDE0KTtcbiAgICBhcHAuYWxsLmNhbGxDb3VudC5zaG91bGQuZXF1YWwoNCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgYXBwbHkgbmV3IG1ldGhvZHMgaW4gcGx1Z2lucyB0byB0aGUgc3RhbmRhcmQgbWV0aG9kIG1hcCcsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBhcHAxID0gZmFrZUFwcCgpO1xuICAgIGNvbnN0IGFwcDIgPSBmYWtlQXBwKCk7XG4gICAgY29uc3QgZHJpdmVyID0gZmFrZURyaXZlcigpO1xuICAgIGNvbnN0IGFkZFJvdXRlcyA9IHJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbihkcml2ZXIpO1xuICAgIGNvbmZpZ3VyZVNlcnZlcih7YXBwOiBhcHAxLCBhZGRSb3V0ZXN9KTtcbiAgICBjb25maWd1cmVTZXJ2ZXIoe2FwcDogYXBwMiwgYWRkUm91dGVzLCBleHRyYU1ldGhvZE1hcDogbmV3TWV0aG9kTWFwfSk7XG4gICAgYXBwMi50b3RhbENvdW50KCkuc2hvdWxkLmVxbChhcHAxLnRvdGFsQ291bnQoKSArIDIpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHNpbGVudGx5IHJlamVjdCBuZXcgbWV0aG9kcyBpbiBwbHVnaW5zIGlmIG5vdCBwbGFpbiBvYmplY3RzJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGFwcDEgPSBmYWtlQXBwKCk7XG4gICAgY29uc3QgYXBwMiA9IGZha2VBcHAoKTtcbiAgICBjb25zdCBkcml2ZXIgPSBmYWtlRHJpdmVyKCk7XG4gICAgY29uc3QgYWRkUm91dGVzID0gcm91dGVDb25maWd1cmluZ0Z1bmN0aW9uKGRyaXZlcik7XG4gICAgY29uZmlndXJlU2VydmVyKHthcHA6IGFwcDEsIGFkZFJvdXRlc30pO1xuICAgIGNvbmZpZ3VyZVNlcnZlcih7YXBwOiBhcHAyLCBhZGRSb3V0ZXMsIGV4dHJhTWV0aG9kTWFwOiBbXX0pO1xuICAgIGFwcDIudG90YWxDb3VudCgpLnNob3VsZC5lcWwoYXBwMS50b3RhbENvdW50KCkpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGFsbG93IHBsdWdpbnMgdG8gdXBkYXRlIHRoZSBzZXJ2ZXInLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgZHJpdmVyID0gZmFrZURyaXZlcigpO1xuICAgIGNvbnN0IF9zZXJ2ZXIgPSBhd2FpdCBzZXJ2ZXIoe1xuICAgICAgcm91dGVDb25maWd1cmluZ0Z1bmN0aW9uOiByb3V0ZUNvbmZpZ3VyaW5nRnVuY3Rpb24oZHJpdmVyKSxcbiAgICAgIHBvcnQsXG4gICAgICBleHRyYU1ldGhvZE1hcDogbmV3TWV0aG9kTWFwLFxuICAgICAgc2VydmVyVXBkYXRlcnM6IFt1cGRhdGVTZXJ2ZXJdXG4gICAgfSk7XG4gICAgdHJ5IHtcbiAgICAgIF9zZXJ2ZXIudXBkYXRlZC5zaG91bGQuYmUudHJ1ZTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgX3NlcnZlci5jbG9zZSgpO1xuICAgIH1cbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZWplY3QgaWYgZXJyb3IgdGhyb3duIGluIGNvbmZpZ3VyZVJvdXRlcyBwYXJhbWV0ZXInLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgY29uZmlndXJlUm91dGVzID0gKCkgPT4ge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJIGFtIE1yLiBNZWVTZWVrcyBsb29rIGF0IG1lIScpO1xuICAgIH07XG4gICAgYXdhaXQgc2VydmVyKHtcbiAgICAgIHJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbjogY29uZmlndXJlUm91dGVzLFxuICAgICAgcG9ydCxcbiAgICB9KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdNZWVTZWVrcycpO1xuICB9KTtcblxuICBkZXNjcmliZSgnI25vcm1hbGl6ZUJhc2VQYXRoJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgdGhyb3cgYW4gZXJyb3IgZm9yIHBhdGhzIG9mIHRoZSB3cm9uZyB0eXBlJywgZnVuY3Rpb24gKCkge1xuICAgICAgc2hvdWxkLnRocm93KCgpID0+IHtcbiAgICAgICAgbm9ybWFsaXplQmFzZVBhdGgobnVsbCk7XG4gICAgICB9KTtcbiAgICAgIHNob3VsZC50aHJvdygoKSA9PiB7XG4gICAgICAgIG5vcm1hbGl6ZUJhc2VQYXRoKDEpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCByZW1vdmUgdHJhaWxpbmcgc2xhc2hlcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vcm1hbGl6ZUJhc2VQYXRoKCcvd2QvaHViLycpLnNob3VsZC5lcWwoJy93ZC9odWInKTtcbiAgICAgIG5vcm1hbGl6ZUJhc2VQYXRoKCcvZm9vLycpLnNob3VsZC5lcWwoJy9mb28nKTtcbiAgICAgIG5vcm1hbGl6ZUJhc2VQYXRoKCcvJykuc2hvdWxkLmVxbCgnJyk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCBlbnN1cmUgYSBsZWFkaW5nIHNsYXNoIGlzIHByZXNlbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBub3JtYWxpemVCYXNlUGF0aCgnZm9vJykuc2hvdWxkLmVxbCgnL2ZvbycpO1xuICAgICAgbm9ybWFsaXplQmFzZVBhdGgoJ3dkL2h1YicpLnNob3VsZC5lcWwoJy93ZC9odWInKTtcbiAgICAgIG5vcm1hbGl6ZUJhc2VQYXRoKCd3ZC9odWIvJykuc2hvdWxkLmVxbCgnL3dkL2h1YicpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl0sImZpbGUiOiJ0ZXN0L2V4cHJlc3Mvc2VydmVyLXNwZWNzLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ require("source-map-support/register");
6
+
7
+ var _static = require("../../lib/express/static");
8
+
9
+ var _sinon = _interopRequireDefault(require("sinon"));
10
+
11
+ describe('welcome', function () {
12
+ it('should fill the template', async function () {
13
+ let res = {
14
+ send: _sinon.default.spy()
15
+ };
16
+ await (0, _static.welcome)({}, res);
17
+ res.send.calledOnce.should.be.true;
18
+ res.send.args[0][0].should.include('Let\'s browse!');
19
+ });
20
+ });require('source-map-support').install();
21
+
22
+
23
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvZXhwcmVzcy9zdGF0aWMtc3BlY3MuanMiXSwibmFtZXMiOlsiZGVzY3JpYmUiLCJpdCIsInJlcyIsInNlbmQiLCJzaW5vbiIsInNweSIsImNhbGxlZE9uY2UiLCJzaG91bGQiLCJiZSIsInRydWUiLCJhcmdzIiwiaW5jbHVkZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBRUE7O0FBQ0E7O0FBSUFBLFFBQVEsQ0FBQyxTQUFELEVBQVksWUFBWTtBQUM5QkMsRUFBQUEsRUFBRSxDQUFDLDBCQUFELEVBQTZCLGtCQUFrQjtBQUMvQyxRQUFJQyxHQUFHLEdBQUc7QUFDUkMsTUFBQUEsSUFBSSxFQUFFQyxlQUFNQyxHQUFOO0FBREUsS0FBVjtBQUdBLFVBQU0scUJBQVEsRUFBUixFQUFZSCxHQUFaLENBQU47QUFFQUEsSUFBQUEsR0FBRyxDQUFDQyxJQUFKLENBQVNHLFVBQVQsQ0FBb0JDLE1BQXBCLENBQTJCQyxFQUEzQixDQUE4QkMsSUFBOUI7QUFDQVAsSUFBQUEsR0FBRyxDQUFDQyxJQUFKLENBQVNPLElBQVQsQ0FBYyxDQUFkLEVBQWlCLENBQWpCLEVBQW9CSCxNQUFwQixDQUEyQkksT0FBM0IsQ0FBbUMsZ0JBQW5DO0FBQ0QsR0FSQyxDQUFGO0FBU0QsQ0FWTyxDQUFSIiwic291cmNlc0NvbnRlbnQiOlsiLy8gdHJhbnNwaWxlOm1vY2hhXG5cbmltcG9ydCB7IHdlbGNvbWUgfSBmcm9tICcuLi8uLi9saWIvZXhwcmVzcy9zdGF0aWMnO1xuaW1wb3J0IHNpbm9uIGZyb20gJ3Npbm9uJztcblxuXG5cbmRlc2NyaWJlKCd3ZWxjb21lJywgZnVuY3Rpb24gKCkge1xuICBpdCgnc2hvdWxkIGZpbGwgdGhlIHRlbXBsYXRlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGxldCByZXMgPSB7XG4gICAgICBzZW5kOiBzaW5vbi5zcHkoKVxuICAgIH07XG4gICAgYXdhaXQgd2VsY29tZSh7fSwgcmVzKTtcblxuICAgIHJlcy5zZW5kLmNhbGxlZE9uY2Uuc2hvdWxkLmJlLnRydWU7XG4gICAgcmVzLnNlbmQuYXJnc1swXVswXS5zaG91bGQuaW5jbHVkZSgnTGV0XFwncyBicm93c2UhJyk7XG4gIH0pO1xufSk7XG4iXSwiZmlsZSI6InRlc3QvZXhwcmVzcy9zdGF0aWMtc3BlY3MuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.createAppiumURL = exports.TEST_HOST = exports.METHODS = void 0;
9
+ exports.getTestPort = getTestPort;
10
+
11
+ require("source-map-support/register");
12
+
13
+ var _getPort = _interopRequireDefault(require("get-port"));
14
+
15
+ var _lodash = require("lodash");
16
+
17
+ const TEST_HOST = '127.0.0.1';
18
+ exports.TEST_HOST = TEST_HOST;
19
+ const METHODS = {
20
+ POST: 'POST',
21
+ DELETE: 'DELETE'
22
+ };
23
+ exports.METHODS = METHODS;
24
+ let testPort;
25
+
26
+ async function getTestPort(force = false) {
27
+ if (force || !testPort) {
28
+ let port = await (0, _getPort.default)();
29
+
30
+ if (!testPort) {
31
+ testPort = port;
32
+ }
33
+
34
+ return port;
35
+ }
36
+
37
+ return testPort;
38
+ }
39
+
40
+ const createAppiumURL = (0, _lodash.curry)((address, port, session, pathname) => {
41
+ if (!/^https?:\/\//.test(address)) {
42
+ address = `http://${address}`;
43
+ }
44
+
45
+ let path = session ? `session/${session}` : '';
46
+
47
+ if (pathname) {
48
+ path = `${path}/${pathname}`;
49
+ }
50
+
51
+ let url = new URL(path, `${address}:${port}`);
52
+ return url.href;
53
+ }, 4);
54
+ exports.createAppiumURL = createAppiumURL;require('source-map-support').install();
55
+
56
+
57
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvaGVscGVycy5qcyJdLCJuYW1lcyI6WyJURVNUX0hPU1QiLCJNRVRIT0RTIiwiUE9TVCIsIkRFTEVURSIsInRlc3RQb3J0IiwiZ2V0VGVzdFBvcnQiLCJmb3JjZSIsInBvcnQiLCJjcmVhdGVBcHBpdW1VUkwiLCJhZGRyZXNzIiwic2Vzc2lvbiIsInBhdGhuYW1lIiwidGVzdCIsInBhdGgiLCJ1cmwiLCJVUkwiLCJocmVmIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFFQSxNQUFNQSxTQUFTLEdBQUcsV0FBbEI7O0FBS0EsTUFBTUMsT0FBTyxHQUFHO0FBQ2RDLEVBQUFBLElBQUksRUFBRSxNQURRO0FBRWRDLEVBQUFBLE1BQU0sRUFBRTtBQUZNLENBQWhCOztBQUtBLElBQUlDLFFBQUo7O0FBTUEsZUFBZUMsV0FBZixDQUE0QkMsS0FBSyxHQUFHLEtBQXBDLEVBQTJDO0FBQ3pDLE1BQUlBLEtBQUssSUFBSSxDQUFDRixRQUFkLEVBQXdCO0FBQ3RCLFFBQUlHLElBQUksR0FBRyxNQUFNLHVCQUFqQjs7QUFDQSxRQUFJLENBQUNILFFBQUwsRUFBZTtBQUNiQSxNQUFBQSxRQUFRLEdBQUdHLElBQVg7QUFDRDs7QUFDRCxXQUFPQSxJQUFQO0FBQ0Q7O0FBQ0QsU0FBT0gsUUFBUDtBQUNEOztBQUVELE1BQU1JLGVBQWUsR0FBRyxtQkEyQnRCLENBQUNDLE9BQUQsRUFBVUYsSUFBVixFQUFnQkcsT0FBaEIsRUFBeUJDLFFBQXpCLEtBQXNDO0FBQ3BDLE1BQUksQ0FBQyxlQUFlQyxJQUFmLENBQW9CSCxPQUFwQixDQUFMLEVBQW1DO0FBQ2pDQSxJQUFBQSxPQUFPLEdBQUksVUFBU0EsT0FBUSxFQUE1QjtBQUNEOztBQUNELE1BQUlJLElBQUksR0FBR0gsT0FBTyxHQUFJLFdBQVVBLE9BQVEsRUFBdEIsR0FBMEIsRUFBNUM7O0FBQ0EsTUFBSUMsUUFBSixFQUFjO0FBQ1pFLElBQUFBLElBQUksR0FBSSxHQUFFQSxJQUFLLElBQUdGLFFBQVMsRUFBM0I7QUFDRDs7QUFDRCxNQUFJRyxHQUFHLEdBQUcsSUFBSUMsR0FBSixDQUFRRixJQUFSLEVBQWUsR0FBRUosT0FBUSxJQUFHRixJQUFLLEVBQWpDLENBQVY7QUFDQSxTQUFPTyxHQUFHLENBQUNFLElBQVg7QUFDRCxDQXJDcUIsRUFzQ3RCLENBdENzQixDQUF4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBnZXRQb3J0IGZyb20gJ2dldC1wb3J0JztcbmltcG9ydCB7Y3Vycnl9IGZyb20gJ2xvZGFzaCc7XG5cbmNvbnN0IFRFU1RfSE9TVCA9ICcxMjcuMC4wLjEnO1xuXG4vKipcbiAqIFNvbWUgSFRUUCBtZXRob2RzLCBmb3IgeW91ciBwbGVhc3VyZVxuICovXG5jb25zdCBNRVRIT0RTID0ge1xuICBQT1NUOiAnUE9TVCcsXG4gIERFTEVURTogJ0RFTEVURSdcbn07XG5cbmxldCB0ZXN0UG9ydDtcbi8qKlxuICogUmV0dXJucyBhIGZyZWUgcG9ydDsgb25lIHBlciBwcm9jZXNzXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtmb3JjZV0gLSBJZiB0cnVlLCBkbyBub3QgcmV1c2UgdGhlIHBvcnQgKGlmIGl0IGFscmVhZHkgZXhpc3RzKVxuICogQHJldHVybnMge1Byb21pc2U8bnVtYmVyPn0gYSBmcmVlIHBvcnRcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0VGVzdFBvcnQgKGZvcmNlID0gZmFsc2UpIHtcbiAgaWYgKGZvcmNlIHx8ICF0ZXN0UG9ydCkge1xuICAgIGxldCBwb3J0ID0gYXdhaXQgZ2V0UG9ydCgpO1xuICAgIGlmICghdGVzdFBvcnQpIHtcbiAgICAgIHRlc3RQb3J0ID0gcG9ydDtcbiAgICB9XG4gICAgcmV0dXJuIHBvcnQ7XG4gIH1cbiAgcmV0dXJuIHRlc3RQb3J0O1xufVxuXG5jb25zdCBjcmVhdGVBcHBpdW1VUkwgPSBjdXJyeShcbiAgLyoqXG4gICAqIEJ1aWxkIGFuIEFwcGl1bSBVUkwgZnJvbSBjb21wb25lbnRzLlxuICAgKlxuICAgKiAqKkFsbCoqIHBhcmFtZXRlcnMgYXJlIHJlcXVpcmVkLiAgUHJvdmlkZSBhbiBlbXB0eSBzdHJpbmcgKGAnJ2ApIGlmIHlvdSBkb24ndCBuZWVkIG9uZS5cbiAgICogVG8gcmVhcnJhbmdlIGFyZ3VtZW50cyAoaWYgbmVlZGVkKSwgdXNlIHRoZSBwbGFjZWhvbGRlciAoYF9gKS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFkZHJlc3MgLSBCYXNlIGFkZHJlc3MgKHcvIG9wdGlvbmFsIHByb3RvY29sKVxuICAgKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IHBvcnQgLSBQb3J0IG51bWJlclxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2Vzc2lvbiAtIFNlc3Npb24gSURcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGhuYW1lIC0gRXh0cmEgcGF0aFxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBOZXcgVVJMXG4gICAqIEBleGFtcGxlXG4gICAqXG4gICAqIGltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG4gICAqXG4gICAqIC8vIGh0dHA6Ly8xMjcuMC4wLjE6MzEzMzcvc2Vzc2lvblxuICAgKiBjcmVhdGVBcHBpdW1VUkwoJzEyNy4wLjAuMScsIDMxMzM3LCAnJywgJ3Nlc3Npb24nKVxuICAgKlxuICAgKiAvLyBodHRwOi8vMTI3LjAuMC4xOjMxMzM3L3Nlc3Npb24vYXNkZmdqa2xcbiAgICogY29uc3QgY3JlYXRlU2Vzc2lvblVSTCA9IGNyZWF0ZUFwcGl1bVVSTCgnMTI3LjAuMC4xJywgMzEzMzcsIF8sICdzZXNzaW9uJylcbiAgICogY3JlYXRlU2Vzc2lvblVSTCgnYXNkZmdqa2wnKVxuICAgKlxuICAgKiAvLyBodHRwOi8vMTI3LjAuMC4xOjMxMzM3L3Nlc3Npb24vYXNkZmdqa2wvYXBwaXVtL2V4ZWN1dGVcbiAgICogY29uc3QgY3JlYXRlVVJMV2l0aFBhdGggPSBjcmVhdGVBcHBpdW1VUkwoJzEyNy4wLjAuMScsIDMxMzM3LCAnYXNkZmdqa2wnKTtcbiAgICogY3JlYXRlVVJMV2l0aFBhdGgoJ2FwcGl1bS9leGVjdXRlJylcbiAgICovXG4gIChhZGRyZXNzLCBwb3J0LCBzZXNzaW9uLCBwYXRobmFtZSkgPT4ge1xuICAgIGlmICghL15odHRwcz86XFwvXFwvLy50ZXN0KGFkZHJlc3MpKSB7XG4gICAgICBhZGRyZXNzID0gYGh0dHA6Ly8ke2FkZHJlc3N9YDtcbiAgICB9XG4gICAgbGV0IHBhdGggPSBzZXNzaW9uID8gYHNlc3Npb24vJHtzZXNzaW9ufWAgOiAnJztcbiAgICBpZiAocGF0aG5hbWUpIHtcbiAgICAgIHBhdGggPSBgJHtwYXRofS8ke3BhdGhuYW1lfWA7XG4gICAgfVxuICAgIGxldCB1cmwgPSBuZXcgVVJMKHBhdGgsIGAke2FkZHJlc3N9OiR7cG9ydH1gKTtcbiAgICByZXR1cm4gdXJsLmhyZWY7XG4gIH0sXG4gIDQsXG4pO1xuXG5leHBvcnQge1RFU1RfSE9TVCwgTUVUSE9EUywgZ2V0VGVzdFBvcnQsIGNyZWF0ZUFwcGl1bVVSTH07XG4iXSwiZmlsZSI6InRlc3QvaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ require("source-map-support/register");
9
+
10
+ function resFixture(url, method) {
11
+ if (/\/status$/.test(url)) {
12
+ return [200, {
13
+ status: 0,
14
+ value: {
15
+ foo: 'bar'
16
+ }
17
+ }];
18
+ }
19
+
20
+ if (/\/element\/bad\/text$/.test(url)) {
21
+ return [500, {
22
+ status: 11,
23
+ value: {
24
+ message: 'Invisible element'
25
+ }
26
+ }];
27
+ }
28
+
29
+ if (/\/element\/200\/text$/.test(url)) {
30
+ return [200, {
31
+ status: 11,
32
+ value: {
33
+ message: 'Invisible element'
34
+ }
35
+ }];
36
+ }
37
+
38
+ if (/\/element\/200\/value$/.test(url)) {
39
+ return [200, {
40
+ status: 0,
41
+ sessionId: 'innersessionid',
42
+ value: 'foobar'
43
+ }];
44
+ }
45
+
46
+ if (/\/session$/.test(url) && method === 'POST') {
47
+ return [200, {
48
+ status: 0,
49
+ sessionId: '123',
50
+ value: {
51
+ browserName: 'boo'
52
+ }
53
+ }];
54
+ }
55
+
56
+ if (/\/nochrome$/.test(url)) {
57
+ return [100, {
58
+ status: 0,
59
+ value: {
60
+ message: 'chrome not reachable'
61
+ }
62
+ }];
63
+ }
64
+
65
+ throw new Error("Can't handle url " + url);
66
+ }
67
+
68
+ async function request(opts) {
69
+ const {
70
+ url,
71
+ method,
72
+ json
73
+ } = opts;
74
+
75
+ if (/badurl$/.test(url)) {
76
+ throw new Error('noworky');
77
+ }
78
+
79
+ const [status, data] = resFixture(url, method, json);
80
+ return {
81
+ status,
82
+ headers: {
83
+ 'content-type': 'application/json; charset=utf-8'
84
+ },
85
+ data
86
+ };
87
+ }
88
+
89
+ var _default = request;
90
+ exports.default = _default;require('source-map-support').install();
91
+
92
+
93
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvanNvbndwLXByb3h5L21vY2stcmVxdWVzdC5qcyJdLCJuYW1lcyI6WyJyZXNGaXh0dXJlIiwidXJsIiwibWV0aG9kIiwidGVzdCIsInN0YXR1cyIsInZhbHVlIiwiZm9vIiwibWVzc2FnZSIsInNlc3Npb25JZCIsImJyb3dzZXJOYW1lIiwiRXJyb3IiLCJyZXF1ZXN0Iiwib3B0cyIsImpzb24iLCJkYXRhIiwiaGVhZGVycyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsU0FBU0EsVUFBVCxDQUFxQkMsR0FBckIsRUFBMEJDLE1BQTFCLEVBQWtDO0FBQ2hDLE1BQUksWUFBWUMsSUFBWixDQUFpQkYsR0FBakIsQ0FBSixFQUEyQjtBQUN6QixXQUFPLENBQUMsR0FBRCxFQUFNO0FBQUNHLE1BQUFBLE1BQU0sRUFBRSxDQUFUO0FBQVlDLE1BQUFBLEtBQUssRUFBRTtBQUFDQyxRQUFBQSxHQUFHLEVBQUU7QUFBTjtBQUFuQixLQUFOLENBQVA7QUFDRDs7QUFDRCxNQUFJLHdCQUF3QkgsSUFBeEIsQ0FBNkJGLEdBQTdCLENBQUosRUFBdUM7QUFDckMsV0FBTyxDQUFDLEdBQUQsRUFBTTtBQUFDRyxNQUFBQSxNQUFNLEVBQUUsRUFBVDtBQUFhQyxNQUFBQSxLQUFLLEVBQUU7QUFBQ0UsUUFBQUEsT0FBTyxFQUFFO0FBQVY7QUFBcEIsS0FBTixDQUFQO0FBQ0Q7O0FBQ0QsTUFBSSx3QkFBd0JKLElBQXhCLENBQTZCRixHQUE3QixDQUFKLEVBQXVDO0FBQ3JDLFdBQU8sQ0FBQyxHQUFELEVBQU07QUFBQ0csTUFBQUEsTUFBTSxFQUFFLEVBQVQ7QUFBYUMsTUFBQUEsS0FBSyxFQUFFO0FBQUNFLFFBQUFBLE9BQU8sRUFBRTtBQUFWO0FBQXBCLEtBQU4sQ0FBUDtBQUNEOztBQUNELE1BQUkseUJBQXlCSixJQUF6QixDQUE4QkYsR0FBOUIsQ0FBSixFQUF3QztBQUN0QyxXQUFPLENBQUMsR0FBRCxFQUFNO0FBQUNHLE1BQUFBLE1BQU0sRUFBRSxDQUFUO0FBQVlJLE1BQUFBLFNBQVMsRUFBRSxnQkFBdkI7QUFBeUNILE1BQUFBLEtBQUssRUFBRTtBQUFoRCxLQUFOLENBQVA7QUFDRDs7QUFDRCxNQUFJLGFBQWFGLElBQWIsQ0FBa0JGLEdBQWxCLEtBQTBCQyxNQUFNLEtBQUssTUFBekMsRUFBaUQ7QUFDL0MsV0FBTyxDQUFDLEdBQUQsRUFBTTtBQUFDRSxNQUFBQSxNQUFNLEVBQUUsQ0FBVDtBQUFZSSxNQUFBQSxTQUFTLEVBQUUsS0FBdkI7QUFBOEJILE1BQUFBLEtBQUssRUFBRTtBQUFDSSxRQUFBQSxXQUFXLEVBQUU7QUFBZDtBQUFyQyxLQUFOLENBQVA7QUFDRDs7QUFDRCxNQUFJLGNBQWNOLElBQWQsQ0FBbUJGLEdBQW5CLENBQUosRUFBNkI7QUFDM0IsV0FBTyxDQUFDLEdBQUQsRUFBTTtBQUFDRyxNQUFBQSxNQUFNLEVBQUUsQ0FBVDtBQUFZQyxNQUFBQSxLQUFLLEVBQUU7QUFBQ0UsUUFBQUEsT0FBTyxFQUFFO0FBQVY7QUFBbkIsS0FBTixDQUFQO0FBQ0Q7O0FBQ0QsUUFBTSxJQUFJRyxLQUFKLENBQVUsc0JBQXNCVCxHQUFoQyxDQUFOO0FBQ0Q7O0FBRUQsZUFBZVUsT0FBZixDQUF3QkMsSUFBeEIsRUFBOEI7QUFDNUIsUUFBTTtBQUFDWCxJQUFBQSxHQUFEO0FBQU1DLElBQUFBLE1BQU47QUFBY1csSUFBQUE7QUFBZCxNQUFzQkQsSUFBNUI7O0FBQ0EsTUFBSSxVQUFVVCxJQUFWLENBQWVGLEdBQWYsQ0FBSixFQUF5QjtBQUN2QixVQUFNLElBQUlTLEtBQUosQ0FBVSxTQUFWLENBQU47QUFDRDs7QUFFRCxRQUFNLENBQUNOLE1BQUQsRUFBU1UsSUFBVCxJQUFpQmQsVUFBVSxDQUFDQyxHQUFELEVBQU1DLE1BQU4sRUFBY1csSUFBZCxDQUFqQztBQUNBLFNBQU87QUFDTFQsSUFBQUEsTUFESztBQUVMVyxJQUFBQSxPQUFPLEVBQUU7QUFBQyxzQkFBZ0I7QUFBakIsS0FGSjtBQUdMRCxJQUFBQTtBQUhLLEdBQVA7QUFLRDs7ZUFFY0gsTyIsInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIHJlc0ZpeHR1cmUgKHVybCwgbWV0aG9kKSB7XG4gIGlmICgvXFwvc3RhdHVzJC8udGVzdCh1cmwpKSB7XG4gICAgcmV0dXJuIFsyMDAsIHtzdGF0dXM6IDAsIHZhbHVlOiB7Zm9vOiAnYmFyJ319XTtcbiAgfVxuICBpZiAoL1xcL2VsZW1lbnRcXC9iYWRcXC90ZXh0JC8udGVzdCh1cmwpKSB7XG4gICAgcmV0dXJuIFs1MDAsIHtzdGF0dXM6IDExLCB2YWx1ZToge21lc3NhZ2U6ICdJbnZpc2libGUgZWxlbWVudCd9fV07XG4gIH1cbiAgaWYgKC9cXC9lbGVtZW50XFwvMjAwXFwvdGV4dCQvLnRlc3QodXJsKSkge1xuICAgIHJldHVybiBbMjAwLCB7c3RhdHVzOiAxMSwgdmFsdWU6IHttZXNzYWdlOiAnSW52aXNpYmxlIGVsZW1lbnQnfX1dO1xuICB9XG4gIGlmICgvXFwvZWxlbWVudFxcLzIwMFxcL3ZhbHVlJC8udGVzdCh1cmwpKSB7XG4gICAgcmV0dXJuIFsyMDAsIHtzdGF0dXM6IDAsIHNlc3Npb25JZDogJ2lubmVyc2Vzc2lvbmlkJywgdmFsdWU6ICdmb29iYXInfV07XG4gIH1cbiAgaWYgKC9cXC9zZXNzaW9uJC8udGVzdCh1cmwpICYmIG1ldGhvZCA9PT0gJ1BPU1QnKSB7XG4gICAgcmV0dXJuIFsyMDAsIHtzdGF0dXM6IDAsIHNlc3Npb25JZDogJzEyMycsIHZhbHVlOiB7YnJvd3Nlck5hbWU6ICdib28nfX1dO1xuICB9XG4gIGlmICgvXFwvbm9jaHJvbWUkLy50ZXN0KHVybCkpIHtcbiAgICByZXR1cm4gWzEwMCwge3N0YXR1czogMCwgdmFsdWU6IHttZXNzYWdlOiAnY2hyb21lIG5vdCByZWFjaGFibGUnfX1dO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihcIkNhbid0IGhhbmRsZSB1cmwgXCIgKyB1cmwpO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZXF1ZXN0IChvcHRzKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcmVxdWlyZS1hd2FpdFxuICBjb25zdCB7dXJsLCBtZXRob2QsIGpzb259ID0gb3B0cztcbiAgaWYgKC9iYWR1cmwkLy50ZXN0KHVybCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ25vd29ya3knKTtcbiAgfVxuXG4gIGNvbnN0IFtzdGF0dXMsIGRhdGFdID0gcmVzRml4dHVyZSh1cmwsIG1ldGhvZCwganNvbik7XG4gIHJldHVybiB7XG4gICAgc3RhdHVzLFxuICAgIGhlYWRlcnM6IHsnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgnfSxcbiAgICBkYXRhLFxuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCByZXF1ZXN0O1xuIl0sImZpbGUiOiJ0ZXN0L2pzb253cC1wcm94eS9tb2NrLXJlcXVlc3QuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==