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
package/lib/cli/launch.js CHANGED
@@ -1,133 +1,52 @@
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
  });
6
-
7
- var _regenerator = require('babel-runtime/regenerator');
8
-
9
- var _regenerator2 = _interopRequireDefault(_regenerator);
10
-
11
- var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator');
12
-
13
- var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
14
-
15
- var _inquirer = require('inquirer');
16
-
17
- var _inquirer2 = _interopRequireDefault(_inquirer);
18
-
19
- var _util = require('./util');
20
-
21
- var _driverLogging = require('../driver-logging');
22
-
23
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
24
-
25
- var SELECTED_WEIGHT = 100; // make sure selected services appear at the top
26
-
27
- exports.default = function () {
28
- var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(services, opts) {
29
- var navy, navyFile, serviceNames, launchedServiceNames, selectedServiceNames, choices, _ref2, selectedServices;
30
-
31
- return _regenerator2.default.wrap(function _callee$(_context) {
32
- while (1) {
33
- switch (_context.prev = _context.next) {
34
- case 0:
35
- _context.next = 2;
36
- return (0, _util.getOrInitialiseNavy)(opts.navy);
37
-
38
- case 2:
39
- navy = _context.sent;
40
- _context.next = 5;
41
- return navy.getNavyFile();
42
-
43
- case 5:
44
- _context.t0 = _context.sent;
45
-
46
- if (_context.t0) {
47
- _context.next = 8;
48
- break;
49
- }
50
-
51
- _context.t0 = {};
52
-
53
- case 8:
54
- navyFile = _context.t0;
55
- _context.next = 11;
56
- return navy.ensurePluginsLoaded();
57
-
58
- case 11:
59
- _context.next = 13;
60
- return navy.getAvailableServiceNames();
61
-
62
- case 13:
63
- serviceNames = _context.sent;
64
- _context.next = 16;
65
- return navy.getLaunchedServiceNames();
66
-
67
- case 16:
68
- launchedServiceNames = _context.sent;
69
- selectedServiceNames = launchedServiceNames.length > 0 ? launchedServiceNames : navyFile.launchDefaults || [];
70
-
71
- if (!(!services || services.length === 0)) {
72
- _context.next = 25;
73
- break;
74
- }
75
-
76
- choices = serviceNames.sort(function (name) {
77
- return selectedServiceNames.indexOf(name) === -1 ? SELECTED_WEIGHT : -1;
78
- }).map(function (name) {
79
- return {
80
- name: name,
81
- checked: selectedServiceNames.indexOf(name) !== -1
82
- };
83
- });
84
- _context.next = 22;
85
- return _inquirer2.default.prompt([{
86
- type: 'checkbox',
87
- message: 'Select services that you\'d like to bring up',
88
- name: 'services',
89
- choices: choices
90
- }]);
91
-
92
- case 22:
93
- _ref2 = _context.sent;
94
- selectedServices = _ref2.services;
95
-
96
-
97
- services = selectedServices;
98
-
99
- case 25:
100
- if (!(services.length === 0)) {
101
- _context.next = 27;
102
- break;
103
- }
104
-
105
- return _context.abrupt('return');
106
-
107
- case 27:
108
- _context.next = 29;
109
- return navy.emitAsync('cli.before.launch');
110
-
111
- case 29:
112
-
113
- (0, _driverLogging.startDriverLogging)('Launching services...');
114
- _context.next = 32;
115
- return navy.launch(services);
116
-
117
- case 32:
118
- (0, _driverLogging.stopDriverLogging)();
119
-
120
- case 33:
121
- case 'end':
122
- return _context.stop();
123
- }
124
- }
125
- }, _callee, this);
126
- }));
127
-
128
- return function (_x, _x2) {
129
- return _ref.apply(this, arguments);
130
- };
131
- }();
8
+ exports.default = _default;
9
+
10
+ var _inquirer = _interopRequireDefault(require("inquirer"));
11
+
12
+ var _util = require("./util");
13
+
14
+ var _driverLogging = require("../driver-logging");
15
+
16
+ const SELECTED_WEIGHT = 100; // make sure selected services appear at the top
17
+
18
+ async function _default(services, opts) {
19
+ const navy = await (0, _util.getOrInitialiseNavy)(opts.navy);
20
+ const navyFile = (await navy.getNavyFile()) || {};
21
+ await navy.ensurePluginsLoaded();
22
+ const serviceNames = await navy.getAvailableServiceNames();
23
+ const launchedServiceNames = await navy.getLaunchedServiceNames();
24
+ const selectedServiceNames = launchedServiceNames.length > 0 ? launchedServiceNames : navyFile.launchDefaults || [];
25
+
26
+ if (!services || services.length === 0) {
27
+ const choices = serviceNames.sort(name => selectedServiceNames.indexOf(name) === -1 ? SELECTED_WEIGHT : -1).map(name => ({
28
+ name,
29
+ checked: selectedServiceNames.indexOf(name) !== -1
30
+ }));
31
+ const {
32
+ services: selectedServices
33
+ } = await _inquirer.default.prompt([{
34
+ type: 'checkbox',
35
+ message: 'Select services that you\'d like to bring up',
36
+ name: 'services',
37
+ choices
38
+ }]);
39
+ services = selectedServices;
40
+ }
41
+
42
+ if (services.length === 0) {
43
+ return;
44
+ }
45
+
46
+ await navy.emitAsync('cli.before.launch');
47
+ (0, _driverLogging.startDriverLogging)('Launching services...');
48
+ await navy.launch(services);
49
+ (0, _driverLogging.stopDriverLogging)();
50
+ }
132
51
 
133
52
  module.exports = exports.default;
package/lib/cli/live.js CHANGED
@@ -1,129 +1,55 @@
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 _defineProperty2 = require('babel-runtime/helpers/defineProperty');
12
-
13
- var _defineProperty3 = _interopRequireDefault(_defineProperty2);
14
-
15
- var _extends3 = require('babel-runtime/helpers/extends');
16
-
17
- var _extends4 = _interopRequireDefault(_extends3);
18
-
19
- var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator');
20
-
21
- var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
22
-
23
- var _chalk = require('chalk');
24
-
25
- var _chalk2 = _interopRequireDefault(_chalk);
26
-
27
- var _ = require('../');
28
-
29
- var _errors = require('../errors');
30
-
31
- var _navyrc = require('../util/navyrc');
32
-
33
- var _navyrc2 = _interopRequireDefault(_navyrc);
10
+ var _chalk = _interopRequireDefault(require("chalk"));
34
11
 
35
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12
+ var _ = require("../");
36
13
 
37
- exports.default = function () {
38
- var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(service, opts) {
39
- var navy, cwd, navyRc, state;
40
- return _regenerator2.default.wrap(function _callee$(_context) {
41
- while (1) {
42
- switch (_context.prev = _context.next) {
43
- case 0:
44
- navy = (0, _.getNavy)(opts.navy);
45
- cwd = process.cwd();
46
- _context.next = 4;
47
- return (0, _navyrc2.default)(cwd);
14
+ var _errors = require("../errors");
48
15
 
49
- case 4:
50
- navyRc = _context.sent;
16
+ var _navyrc = _interopRequireDefault(require("../util/navyrc"));
51
17
 
52
- if (!(navyRc && !navyRc.services)) {
53
- _context.next = 7;
54
- break;
55
- }
18
+ async function _default(service, opts) {
19
+ const navy = (0, _.getNavy)(opts.navy);
20
+ const cwd = process.cwd();
21
+ const navyRc = await (0, _navyrc.default)(cwd);
56
22
 
57
- throw new _errors.NavyError('No valid .navyrc file was found in "' + cwd + '"');
23
+ if (navyRc && !navyRc.services) {
24
+ throw new _errors.NavyError(`No valid .navyrc file was found in "${cwd}"`);
25
+ }
58
26
 
59
- case 7:
60
- if (!(navyRc && navyRc.services.length > 1 && !service)) {
61
- _context.next = 9;
62
- break;
63
- }
27
+ if (navyRc && navyRc.services.length > 1 && !service) {
28
+ throw new _errors.NavyError('Multiple service mappings are defined in .navyrc, you need to explicitly specify what service to develop');
29
+ }
64
30
 
65
- throw new _errors.NavyError('Multiple service mappings are defined in .navyrc, you need to explicitly specify what service to develop');
31
+ if (navyRc && !service) {
32
+ service = navyRc.services[0];
33
+ }
66
34
 
67
- case 9:
35
+ const state = (await navy.getState()) || {};
68
36
 
69
- if (navyRc && !service) {
70
- service = navyRc.services[0];
71
- }
37
+ if (!state || !state.services || !state.services[service] || !state.services[service]._develop) {
38
+ return console.log(_chalk.default.dim(`Nothing to do, ${service} is not in development`));
39
+ }
72
40
 
73
- _context.next = 12;
74
- return navy.getState();
75
-
76
- case 12:
77
- _context.t0 = _context.sent;
78
-
79
- if (_context.t0) {
80
- _context.next = 15;
81
- break;
82
- }
83
-
84
- _context.t0 = {};
85
-
86
- case 15:
87
- state = _context.t0;
88
-
89
- if (!(!state || !state.services || !state.services[service] || !state.services[service]._develop)) {
90
- _context.next = 18;
91
- break;
92
- }
93
-
94
- return _context.abrupt('return', console.log(_chalk2.default.dim('Nothing to do, ' + service + ' is not in development')));
95
-
96
- case 18:
97
- _context.next = 20;
98
- return navy.saveState((0, _extends4.default)({}, state, {
99
- services: (0, _extends4.default)({}, state.services, (0, _defineProperty3.default)({}, service, (0, _extends4.default)({}, (state.services || {})[service], {
100
- _develop: undefined
101
- })))
102
- }));
103
-
104
- case 20:
105
- _context.next = 22;
106
- return navy.kill([service]);
107
-
108
- case 22:
109
- _context.next = 24;
110
- return navy.relaunch({ noDeps: true });
111
-
112
- case 24:
113
-
114
- console.log(service + ' is no longer in development');
115
-
116
- case 25:
117
- case 'end':
118
- return _context.stop();
119
- }
41
+ await navy.saveState({ ...state,
42
+ services: { ...state.services,
43
+ [service]: { ...(state.services || {})[service],
44
+ _develop: undefined
120
45
  }
121
- }, _callee, this);
122
- }));
123
-
124
- return function (_x, _x2) {
125
- return _ref.apply(this, arguments);
126
- };
127
- }();
46
+ }
47
+ });
48
+ await navy.kill([service]);
49
+ await navy.relaunch({
50
+ noDeps: true
51
+ });
52
+ console.log(`${service} is no longer in development`);
53
+ }
128
54
 
129
55
  module.exports = exports.default;
@@ -1,63 +1,26 @@
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 _extends2 = require('babel-runtime/helpers/extends');
12
-
13
- var _extends3 = _interopRequireDefault(_extends2);
14
-
15
- var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator');
16
-
17
- var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
18
-
19
- var _chalk = require('chalk');
20
-
21
- var _chalk2 = _interopRequireDefault(_chalk);
22
-
23
- var _config = require('../config');
24
-
25
- var _reconfigure = require('./util/reconfigure');
26
-
27
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
28
-
29
- exports.default = function () {
30
- var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(navy) {
31
- return _regenerator2.default.wrap(function _callee$(_context) {
32
- while (1) {
33
- switch (_context.prev = _context.next) {
34
- case 0:
35
- _context.next = 2;
36
- return (0, _config.setConfig)((0, _extends3.default)({}, (0, _config.getConfig)(), {
37
- externalIP: '127.0.0.1'
38
- }));
39
-
40
- case 2:
41
- _context.next = 4;
42
- return (0, _reconfigure.reconfigureAllNavies)();
43
-
44
- case 4:
10
+ var _chalk = _interopRequireDefault(require("chalk"));
45
11
 
46
- console.log();
47
- console.log(_chalk2.default.green(' ✔ Now using your local IP address (127.0.0.1)'));
48
- console.log();
12
+ var _config = require("../config");
49
13
 
50
- case 7:
51
- case 'end':
52
- return _context.stop();
53
- }
54
- }
55
- }, _callee, this);
56
- }));
14
+ var _reconfigure = require("./util/reconfigure");
57
15
 
58
- return function (_x) {
59
- return _ref.apply(this, arguments);
60
- };
61
- }();
16
+ async function _default(navy) {
17
+ await (0, _config.setConfig)({ ...(0, _config.getConfig)(),
18
+ externalIP: '127.0.0.1'
19
+ });
20
+ await (0, _reconfigure.reconfigureAllNavies)();
21
+ console.log();
22
+ console.log(_chalk.default.green(' ✔ Now using your local IP address (127.0.0.1)'));
23
+ console.log();
24
+ }
62
25
 
63
26
  module.exports = exports.default;
package/lib/cli/logs.js CHANGED
@@ -1,43 +1,15 @@
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
-
11
- var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator');
12
-
13
- var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
14
-
15
- var _ = require('../');
16
-
17
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
18
-
19
- exports.default = function () {
20
- var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(services, opts) {
21
- var env;
22
- return _regenerator2.default.wrap(function _callee$(_context) {
23
- while (1) {
24
- switch (_context.prev = _context.next) {
25
- case 0:
26
- env = (0, _.getNavy)(opts.navy);
27
- _context.next = 3;
28
- return env.spawnLogStream(services);
29
-
30
- case 3:
31
- case 'end':
32
- return _context.stop();
33
- }
34
- }
35
- }, _callee, this);
36
- }));
37
-
38
- return function (_x, _x2) {
39
- return _ref.apply(this, arguments);
40
- };
41
- }();
10
+ async function _default(services, opts) {
11
+ const env = (0, _.getNavy)(opts.navy);
12
+ await env.spawnLogStream(services);
13
+ }
42
14
 
43
15
  module.exports = exports.default;
package/lib/cli/open.js CHANGED
@@ -1,54 +1,20 @@
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 _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator');
12
-
13
- var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
14
-
15
- var _opn = require('opn');
16
-
17
- var _opn2 = _interopRequireDefault(_opn);
18
-
19
- var _ = require('../');
20
-
21
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
22
-
23
- exports.default = function () {
24
- var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(service, opts) {
25
- var navy;
26
- return _regenerator2.default.wrap(function _callee$(_context) {
27
- while (1) {
28
- switch (_context.prev = _context.next) {
29
- case 0:
30
- navy = (0, _.getNavy)(opts.navy);
31
- _context.t0 = _opn2.default;
32
- _context.next = 4;
33
- return navy.url(service);
34
-
35
- case 4:
36
- _context.t1 = _context.sent;
37
- (0, _context.t0)(_context.t1);
38
-
39
- console.log('\uD83C\uDF10 Opening ' + service + '...');
10
+ var _opn = _interopRequireDefault(require("opn"));
40
11
 
41
- case 7:
42
- case 'end':
43
- return _context.stop();
44
- }
45
- }
46
- }, _callee, this);
47
- }));
12
+ var _ = require("../");
48
13
 
49
- return function (_x, _x2) {
50
- return _ref.apply(this, arguments);
51
- };
52
- }();
14
+ async function _default(service, opts) {
15
+ const navy = (0, _.getNavy)(opts.navy);
16
+ (0, _opn.default)(await navy.url(service));
17
+ console.log(`🌐 Opening ${service}...`);
18
+ }
53
19
 
54
20
  module.exports = exports.default;