navy 4.1.2-rc.2 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/lib/cli/config/index.js +57 -241
  2. package/lib/cli/config/wrapper.js +12 -36
  3. package/lib/cli/develop.js +63 -167
  4. package/lib/cli/doctor/clean-compose-files.js +19 -73
  5. package/lib/cli/doctor/index.js +34 -154
  6. package/lib/cli/doctor/invalid-compose-config.js +20 -110
  7. package/lib/cli/doctor/invalid-state.js +22 -115
  8. package/lib/cli/doctor/util.js +26 -93
  9. package/lib/cli/external-ip.js +9 -39
  10. package/lib/cli/health.js +18 -67
  11. package/lib/cli/https.js +92 -0
  12. package/lib/cli/import.js +22 -59
  13. package/lib/cli/index.js +11 -17
  14. package/lib/cli/lan-ip.js +18 -60
  15. package/lib/cli/launch.js +46 -127
  16. package/lib/cli/live.js +37 -111
  17. package/lib/cli/local-ip.js +16 -53
  18. package/lib/cli/logs.js +7 -35
  19. package/lib/cli/open.js +11 -45
  20. package/lib/cli/program.js +145 -167
  21. package/lib/cli/ps.js +36 -105
  22. package/lib/cli/refresh-config.js +18 -62
  23. package/lib/cli/run.js +8 -39
  24. package/lib/cli/status.js +41 -201
  25. package/lib/cli/updates.js +68 -160
  26. package/lib/cli/util/get-or-initialise-navy.js +14 -57
  27. package/lib/cli/util/import.js +33 -83
  28. package/lib/cli/util/index.js +10 -12
  29. package/lib/cli/util/reconfigure.js +12 -102
  30. package/lib/cli/wait-for-healthy.js +53 -100
  31. package/lib/config-provider.js +25 -127
  32. package/lib/config-providers/filesystem/index.js +58 -235
  33. package/lib/config-providers/npm/__tests__/util.js +3 -6
  34. package/lib/config-providers/npm/index.js +60 -231
  35. package/lib/config-providers/npm/util.js +6 -9
  36. package/lib/config.js +39 -76
  37. package/lib/driver-logging.js +23 -28
  38. package/lib/driver.js +5 -7
  39. package/lib/drivers/docker-compose/client.js +64 -172
  40. package/lib/drivers/docker-compose/index.js +153 -464
  41. package/lib/errors.js +27 -61
  42. package/lib/http-proxy.js +72 -158
  43. package/lib/index.js +26 -29
  44. package/lib/middleware/add-service-proxy-config.js +76 -0
  45. package/lib/middleware/develop.js +9 -23
  46. package/lib/middleware/helpers.js +20 -25
  47. package/lib/middleware/port-override.js +15 -37
  48. package/lib/middleware/set-env-vars.js +14 -18
  49. package/lib/middleware/set-image.js +12 -18
  50. package/lib/middleware/set-logging-driver.js +14 -18
  51. package/lib/middleware/tag-override.js +11 -19
  52. package/lib/navy/default-middleware.js +13 -27
  53. package/lib/navy/index.js +438 -1761
  54. package/lib/navy/middleware.js +15 -100
  55. package/lib/navy/plugin-interface.js +28 -108
  56. package/lib/navy/state.js +58 -147
  57. package/lib/navy/util.js +2 -1
  58. package/lib/service.js +5 -3
  59. package/lib/util/__tests__/external-ip.js +20 -96
  60. package/lib/util/__tests__/registry-client.js +11 -24
  61. package/lib/util/__tests__/service-host.js +19 -116
  62. package/lib/util/docker-client.js +10 -13
  63. package/lib/util/exec-async.js +9 -27
  64. package/lib/util/external-ip.js +48 -126
  65. package/lib/util/fs.js +7 -6
  66. package/lib/util/get-lan-ip.js +15 -52
  67. package/lib/util/has-update.js +23 -73
  68. package/lib/util/https.js +213 -0
  69. package/lib/util/navyrc.js +12 -50
  70. package/lib/util/registry-client.js +41 -112
  71. package/lib/util/service-host.js +40 -129
  72. package/lib/util/table.js +11 -21
  73. package/package.json +14 -14
  74. package/LICENSE +0 -21
  75. package/lib/middleware/add-virtual-hosts.js +0 -147
@@ -1,87 +1,33 @@
1
- 'use strict';
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
2
4
 
3
5
  Object.defineProperty(exports, "__esModule", {
4
6
  value: true
5
7
  });
8
+ exports.default = _default;
6
9
 
7
- var _regenerator = require('babel-runtime/regenerator');
8
-
9
- var _regenerator2 = _interopRequireDefault(_regenerator);
10
-
11
- var _promise = require('babel-runtime/core-js/promise');
12
-
13
- var _promise2 = _interopRequireDefault(_promise);
14
-
15
- var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator');
16
-
17
- var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
18
-
19
- var _bluebird = require('bluebird');
20
-
21
- var _bluebird2 = _interopRequireDefault(_bluebird);
22
-
23
- var _path = require('path');
24
-
25
- var _path2 = _interopRequireDefault(_path);
26
-
27
- var _ = require('../../');
28
-
29
- var _util = require('./util');
30
-
31
- var _state = require('../../navy/state');
32
-
33
- var _util2 = require('../../navy/util');
34
-
35
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
36
-
37
- exports.default = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2() {
38
- var _this = this;
10
+ var _bluebird = _interopRequireDefault(require("bluebird"));
39
11
 
40
- var rimraf, navyNames;
41
- return _regenerator2.default.wrap(function _callee2$(_context2) {
42
- while (1) {
43
- switch (_context2.prev = _context2.next) {
44
- case 0:
45
- rimraf = _bluebird2.default.promisify(require('rimraf'));
12
+ var _path = _interopRequireDefault(require("path"));
46
13
 
14
+ var _ = require("../../");
47
15
 
48
- (0, _util.start)('Cleaning temporary Docker Compose files');
16
+ var _util = require("./util");
49
17
 
50
- _context2.next = 4;
51
- return (0, _.getLaunchedNavyNames)();
18
+ var _state = require("../../navy/state");
52
19
 
53
- case 4:
54
- navyNames = _context2.sent;
55
- _context2.next = 7;
56
- return _promise2.default.all(navyNames.map(function () {
57
- var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(navyName) {
58
- var navyPath;
59
- return _regenerator2.default.wrap(function _callee$(_context) {
60
- while (1) {
61
- switch (_context.prev = _context.next) {
62
- case 0:
63
- navyPath = (0, _state.pathToNavy)((0, _util2.normaliseNavyName)(navyName));
64
- _context.next = 3;
65
- return rimraf(_path2.default.join(navyPath, 'docker-compose.tmp.yml'));
20
+ var _util2 = require("../../navy/util");
66
21
 
67
- case 3:
68
- case 'end':
69
- return _context.stop();
70
- }
71
- }
72
- }, _callee, _this);
73
- }));
22
+ async function _default() {
23
+ const rimraf = _bluebird.default.promisify(require('rimraf'));
74
24
 
75
- return function (_x) {
76
- return _ref2.apply(this, arguments);
77
- };
78
- }()));
25
+ (0, _util.start)('Cleaning temporary Docker Compose files');
26
+ const navyNames = await (0, _.getLaunchedNavyNames)();
27
+ await Promise.all(navyNames.map(async navyName => {
28
+ const navyPath = (0, _state.pathToNavy)((0, _util2.normaliseNavyName)(navyName));
29
+ await rimraf(_path.default.join(navyPath, 'docker-compose.tmp.yml'));
30
+ }));
31
+ }
79
32
 
80
- case 7:
81
- case 'end':
82
- return _context2.stop();
83
- }
84
- }
85
- }, _callee2, this);
86
- }));
87
33
  module.exports = exports.default;
@@ -1,170 +1,50 @@
1
- 'use strict';
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
2
4
 
3
5
  Object.defineProperty(exports, "__esModule", {
4
6
  value: true
5
7
  });
8
+ exports.default = _default;
6
9
 
7
- var _regenerator = require('babel-runtime/regenerator');
8
-
9
- var _regenerator2 = _interopRequireDefault(_regenerator);
10
-
11
- var _getIterator2 = require('babel-runtime/core-js/get-iterator');
12
-
13
- var _getIterator3 = _interopRequireDefault(_getIterator2);
14
-
15
- var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator');
16
-
17
- var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
18
-
19
- var run = function () {
20
- var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(fns) {
21
- var errors, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, fn;
22
-
23
- return _regenerator2.default.wrap(function _callee$(_context) {
24
- while (1) {
25
- switch (_context.prev = _context.next) {
26
- case 0:
27
- errors = [];
28
- _iteratorNormalCompletion = true;
29
- _didIteratorError = false;
30
- _iteratorError = undefined;
31
- _context.prev = 4;
32
- _iterator = (0, _getIterator3.default)(fns);
33
-
34
- case 6:
35
- if (_iteratorNormalCompletion = (_step = _iterator.next()).done) {
36
- _context.next = 19;
37
- break;
38
- }
39
-
40
- fn = _step.value;
41
- _context.prev = 8;
42
- _context.next = 11;
43
- return fn();
44
-
45
- case 11:
46
- _context.next = 16;
47
- break;
48
-
49
- case 13:
50
- _context.prev = 13;
51
- _context.t0 = _context['catch'](8);
52
-
53
- errors.push(_context.t0);
54
-
55
- case 16:
56
- _iteratorNormalCompletion = true;
57
- _context.next = 6;
58
- break;
59
-
60
- case 19:
61
- _context.next = 25;
62
- break;
63
-
64
- case 21:
65
- _context.prev = 21;
66
- _context.t1 = _context['catch'](4);
67
- _didIteratorError = true;
68
- _iteratorError = _context.t1;
69
-
70
- case 25:
71
- _context.prev = 25;
72
- _context.prev = 26;
73
-
74
- if (!_iteratorNormalCompletion && _iterator.return) {
75
- _iterator.return();
76
- }
10
+ var _chalk = _interopRequireDefault(require("chalk"));
77
11
 
78
- case 28:
79
- _context.prev = 28;
12
+ var _cleanComposeFiles = _interopRequireDefault(require("./clean-compose-files"));
80
13
 
81
- if (!_didIteratorError) {
82
- _context.next = 31;
83
- break;
84
- }
14
+ var _invalidState = _interopRequireDefault(require("./invalid-state"));
85
15
 
86
- throw _iteratorError;
16
+ var _invalidComposeConfig = _interopRequireDefault(require("./invalid-compose-config"));
87
17
 
88
- case 31:
89
- return _context.finish(28);
18
+ async function run(fns) {
19
+ const errors = [];
90
20
 
91
- case 32:
92
- return _context.finish(25);
93
-
94
- case 33:
95
- return _context.abrupt('return', errors);
96
-
97
- case 34:
98
- case 'end':
99
- return _context.stop();
100
- }
101
- }
102
- }, _callee, this, [[4, 21, 25, 33], [8, 13], [26,, 28, 32]]);
103
- }));
104
-
105
- return function run(_x) {
106
- return _ref.apply(this, arguments);
107
- };
108
- }();
109
-
110
- var _chalk = require('chalk');
111
-
112
- var _chalk2 = _interopRequireDefault(_chalk);
113
-
114
- var _cleanComposeFiles = require('./clean-compose-files');
115
-
116
- var _cleanComposeFiles2 = _interopRequireDefault(_cleanComposeFiles);
117
-
118
- var _invalidState = require('./invalid-state');
119
-
120
- var _invalidState2 = _interopRequireDefault(_invalidState);
121
-
122
- var _invalidComposeConfig = require('./invalid-compose-config');
123
-
124
- var _invalidComposeConfig2 = _interopRequireDefault(_invalidComposeConfig);
125
-
126
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
127
-
128
- exports.default = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2() {
129
- var errors;
130
- return _regenerator2.default.wrap(function _callee2$(_context2) {
131
- while (1) {
132
- switch (_context2.prev = _context2.next) {
133
- case 0:
134
- _context2.next = 2;
135
- return run([_cleanComposeFiles2.default, _invalidState2.default, _invalidComposeConfig2.default]);
136
-
137
- case 2:
138
- errors = _context2.sent;
139
-
140
- if (!(errors.length > 0)) {
141
- _context2.next = 8;
142
- break;
143
- }
144
-
145
- console.log(_chalk2.default.yellow('There were some issues'));
146
- console.log();
21
+ for (const fn of fns) {
22
+ try {
23
+ await fn();
24
+ } catch (ex) {
25
+ errors.push(ex);
26
+ }
27
+ }
147
28
 
148
- errors.forEach(function (error) {
149
- return console.log(error.stack);
150
- });
29
+ return errors;
30
+ }
151
31
 
152
- return _context2.abrupt('return');
32
+ async function _default() {
33
+ const errors = await run([_cleanComposeFiles.default, _invalidState.default, _invalidComposeConfig.default]);
153
34
 
154
- case 8:
35
+ if (errors.length > 0) {
36
+ console.log(_chalk.default.yellow('There were some issues'));
37
+ console.log();
38
+ errors.forEach(error => console.log(error.stack));
39
+ return;
40
+ }
155
41
 
156
- console.log();
157
- console.log(_chalk2.default.green(' ✔ Finished tests'));
158
- console.log();
159
- console.log(' Please try running Navy again if it wasn\'t working before.');
160
- console.log(' If you still have problems, please open an issue at https://github.com/momentumft/navy/issues/new');
161
- console.log();
42
+ console.log();
43
+ console.log(_chalk.default.green(' ✔ Finished tests'));
44
+ console.log();
45
+ console.log(' Please try running Navy again if it wasn\'t working before.');
46
+ console.log(' If you still have problems, please open an issue at https://github.com/momentumft/navy/issues/new');
47
+ console.log();
48
+ }
162
49
 
163
- case 14:
164
- case 'end':
165
- return _context2.stop();
166
- }
167
- }
168
- }, _callee2, this);
169
- }));
170
50
  module.exports = exports.default;
@@ -1,116 +1,26 @@
1
- 'use strict';
1
+ "use strict";
2
2
 
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ exports.default = _default;
7
+
8
+ var _ = require("../../");
9
+
10
+ var _util = require("./util");
11
+
12
+ async function _default() {
13
+ (0, _util.start)('Checking for Navies with invalid/no compose config');
14
+ const navies = await (0, _.getLaunchedNavies)();
15
+ await Promise.all(navies.map(async navy => {
16
+ await (0, _util.catchInvariant)('NO_DOCKER_COMPOSE_FILE', async () => {
17
+ await (await navy.safeGetDriver()).getConfig();
18
+ }, async () => {
19
+ await (0, _util.fix)('Found Navy %s which has no docker compose config, removing', navy.name, async () => {
20
+ await navy.delete();
21
+ });
22
+ });
23
+ }));
24
+ }
6
25
 
7
- var _regenerator = require('babel-runtime/regenerator');
8
-
9
- var _regenerator2 = _interopRequireDefault(_regenerator);
10
-
11
- var _promise = require('babel-runtime/core-js/promise');
12
-
13
- var _promise2 = _interopRequireDefault(_promise);
14
-
15
- var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator');
16
-
17
- var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
18
-
19
- var _ = require('../../');
20
-
21
- var _util = require('./util');
22
-
23
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
24
-
25
- exports.default = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee5() {
26
- var _this = this;
27
-
28
- var navies;
29
- return _regenerator2.default.wrap(function _callee5$(_context5) {
30
- while (1) {
31
- switch (_context5.prev = _context5.next) {
32
- case 0:
33
- (0, _util.start)('Checking for Navies with invalid/no compose config');
34
-
35
- _context5.next = 3;
36
- return (0, _.getLaunchedNavies)();
37
-
38
- case 3:
39
- navies = _context5.sent;
40
- _context5.next = 6;
41
- return _promise2.default.all(navies.map(function () {
42
- var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee4(navy) {
43
- return _regenerator2.default.wrap(function _callee4$(_context4) {
44
- while (1) {
45
- switch (_context4.prev = _context4.next) {
46
- case 0:
47
- _context4.next = 2;
48
- return (0, _util.catchInvariant)('NO_DOCKER_COMPOSE_FILE', (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee() {
49
- return _regenerator2.default.wrap(function _callee$(_context) {
50
- while (1) {
51
- switch (_context.prev = _context.next) {
52
- case 0:
53
- _context.next = 2;
54
- return navy.safeGetDriver();
55
-
56
- case 2:
57
- _context.next = 4;
58
- return _context.sent.getConfig();
59
-
60
- case 4:
61
- case 'end':
62
- return _context.stop();
63
- }
64
- }
65
- }, _callee, _this);
66
- })), (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee3() {
67
- return _regenerator2.default.wrap(function _callee3$(_context3) {
68
- while (1) {
69
- switch (_context3.prev = _context3.next) {
70
- case 0:
71
- _context3.next = 2;
72
- return (0, _util.fix)('Found Navy %s which has no docker compose config, removing', navy.name, (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2() {
73
- return _regenerator2.default.wrap(function _callee2$(_context2) {
74
- while (1) {
75
- switch (_context2.prev = _context2.next) {
76
- case 0:
77
- _context2.next = 2;
78
- return navy.delete();
79
-
80
- case 2:
81
- case 'end':
82
- return _context2.stop();
83
- }
84
- }
85
- }, _callee2, _this);
86
- })));
87
-
88
- case 2:
89
- case 'end':
90
- return _context3.stop();
91
- }
92
- }
93
- }, _callee3, _this);
94
- })));
95
-
96
- case 2:
97
- case 'end':
98
- return _context4.stop();
99
- }
100
- }
101
- }, _callee4, _this);
102
- }));
103
-
104
- return function (_x) {
105
- return _ref2.apply(this, arguments);
106
- };
107
- }()));
108
-
109
- case 6:
110
- case 'end':
111
- return _context5.stop();
112
- }
113
- }
114
- }, _callee5, this);
115
- }));
116
26
  module.exports = exports.default;
@@ -1,126 +1,33 @@
1
- 'use strict';
1
+ "use strict";
2
2
 
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ exports.default = _default;
6
7
 
7
- var _regenerator = require('babel-runtime/regenerator');
8
+ var _ = require("../../");
8
9
 
9
- var _regenerator2 = _interopRequireDefault(_regenerator);
10
+ var _util = require("./util");
10
11
 
11
- var _promise = require('babel-runtime/core-js/promise');
12
+ async function _default() {
13
+ (0, _util.start)('Checking for dangling Navies');
14
+ const navies = await (0, _.getLaunchedNavies)();
15
+ await Promise.all(navies.map(async navy => {
16
+ const configProvider = await navy.getConfigProvider();
12
17
 
13
- var _promise2 = _interopRequireDefault(_promise);
14
-
15
- var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator');
16
-
17
- var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
18
-
19
- var _ = require('../../');
20
-
21
- var _util = require('./util');
22
-
23
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
24
-
25
- exports.default = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee4() {
26
- var _this = this;
27
-
28
- var navies;
29
- return _regenerator2.default.wrap(function _callee4$(_context4) {
30
- while (1) {
31
- switch (_context4.prev = _context4.next) {
32
- case 0:
33
- (0, _util.start)('Checking for dangling Navies');
34
-
35
- _context4.next = 3;
36
- return (0, _.getLaunchedNavies)();
37
-
38
- case 3:
39
- navies = _context4.sent;
40
- _context4.next = 6;
41
- return _promise2.default.all(navies.map(function () {
42
- var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee3(navy) {
43
- var configProvider;
44
- return _regenerator2.default.wrap(function _callee3$(_context3) {
45
- while (1) {
46
- switch (_context3.prev = _context3.next) {
47
- case 0:
48
- _context3.next = 2;
49
- return navy.getConfigProvider();
50
-
51
- case 2:
52
- configProvider = _context3.sent;
53
-
54
- if (configProvider) {
55
- _context3.next = 7;
56
- break;
57
- }
58
-
59
- _context3.next = 6;
60
- return (0, _util.fix)('Found Navy without config provider %s, removing', navy.name, (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee() {
61
- return _regenerator2.default.wrap(function _callee$(_context) {
62
- while (1) {
63
- switch (_context.prev = _context.next) {
64
- case 0:
65
- _context.next = 2;
66
- return navy.delete();
67
-
68
- case 2:
69
- case 'end':
70
- return _context.stop();
71
- }
72
- }
73
- }, _callee, _this);
74
- })));
75
-
76
- case 6:
77
- return _context3.abrupt('return');
78
-
79
- case 7:
80
- _context3.next = 9;
81
- return configProvider.isDangling();
82
-
83
- case 9:
84
- if (!_context3.sent) {
85
- _context3.next = 12;
86
- break;
87
- }
88
-
89
- _context3.next = 12;
90
- return (0, _util.fix)('Found dangling Navy %s (invalid config), removing', navy.name, (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2() {
91
- return _regenerator2.default.wrap(function _callee2$(_context2) {
92
- while (1) {
93
- switch (_context2.prev = _context2.next) {
94
- case 0:
95
- _context2.next = 2;
96
- return navy.destroy();
97
-
98
- case 2:
99
- case 'end':
100
- return _context2.stop();
101
- }
102
- }
103
- }, _callee2, _this);
104
- })));
105
-
106
- case 12:
107
- case 'end':
108
- return _context3.stop();
109
- }
110
- }
111
- }, _callee3, _this);
112
- }));
113
-
114
- return function (_x) {
115
- return _ref2.apply(this, arguments);
116
- };
117
- }()));
18
+ if (!configProvider) {
19
+ await (0, _util.fix)('Found Navy without config provider %s, removing', navy.name, async () => {
20
+ await navy.delete();
21
+ });
22
+ return;
23
+ }
118
24
 
119
- case 6:
120
- case 'end':
121
- return _context4.stop();
122
- }
25
+ if (await configProvider.isDangling()) {
26
+ await (0, _util.fix)('Found dangling Navy %s (invalid config), removing', navy.name, async () => {
27
+ await navy.destroy();
28
+ });
123
29
  }
124
- }, _callee4, this);
125
- }));
30
+ }));
31
+ }
32
+
126
33
  module.exports = exports.default;