navy 6.0.0 → 7.0.0-alpha.2

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 (149) hide show
  1. package/lib/__tests__/config-provider.js +75 -0
  2. package/lib/__tests__/config.js +130 -0
  3. package/lib/__tests__/driver-logging.js +148 -0
  4. package/lib/__tests__/driver.js +19 -0
  5. package/lib/__tests__/errors.js +49 -0
  6. package/lib/__tests__/http-proxy.js +214 -0
  7. package/lib/__tests__/index.js +25 -0
  8. package/lib/__tests__/service.js +16 -0
  9. package/lib/cli/__tests__/develop.js +239 -0
  10. package/lib/cli/__tests__/external-ip.js +68 -0
  11. package/lib/cli/__tests__/health.js +257 -0
  12. package/lib/cli/__tests__/https.js +210 -0
  13. package/lib/cli/__tests__/import.js +110 -0
  14. package/lib/cli/__tests__/index.js +118 -0
  15. package/lib/cli/__tests__/lan-ip.js +90 -0
  16. package/lib/cli/__tests__/launch.js +179 -0
  17. package/lib/cli/__tests__/live.js +155 -0
  18. package/lib/cli/__tests__/local-ip.js +72 -0
  19. package/lib/cli/__tests__/logs.js +52 -0
  20. package/lib/cli/__tests__/open.js +65 -0
  21. package/lib/cli/__tests__/program.js +472 -0
  22. package/lib/cli/__tests__/ps.js +345 -0
  23. package/lib/cli/__tests__/refresh-config.js +95 -0
  24. package/lib/cli/__tests__/run.js +54 -0
  25. package/lib/cli/__tests__/status.js +204 -0
  26. package/lib/cli/__tests__/updates.js +243 -0
  27. package/lib/cli/__tests__/wait-for-healthy.js +134 -0
  28. package/lib/cli/config/__tests__/index.js +275 -0
  29. package/lib/cli/config/__tests__/wrapper.js +53 -0
  30. package/lib/cli/config/index.js +19 -37
  31. package/lib/cli/config/wrapper.js +0 -6
  32. package/lib/cli/develop.js +7 -21
  33. package/lib/cli/doctor/__tests__/clean-compose-files.js +78 -0
  34. package/lib/cli/doctor/__tests__/index.js +67 -0
  35. package/lib/cli/doctor/__tests__/invalid-compose-config.js +103 -0
  36. package/lib/cli/doctor/__tests__/invalid-state.js +83 -0
  37. package/lib/cli/doctor/__tests__/util.js +91 -0
  38. package/lib/cli/doctor/clean-compose-files.js +5 -13
  39. package/lib/cli/doctor/index.js +0 -12
  40. package/lib/cli/doctor/invalid-compose-config.js +0 -4
  41. package/lib/cli/doctor/invalid-state.js +0 -6
  42. package/lib/cli/doctor/util.js +0 -10
  43. package/lib/cli/external-ip.js +0 -4
  44. package/lib/cli/health.js +0 -12
  45. package/lib/cli/https.js +9 -25
  46. package/lib/cli/import.js +0 -12
  47. package/lib/cli/index.js +0 -9
  48. package/lib/cli/lan-ip.js +2 -8
  49. package/lib/cli/launch.js +0 -9
  50. package/lib/cli/live.js +6 -16
  51. package/lib/cli/local-ip.js +2 -7
  52. package/lib/cli/logs.js +0 -3
  53. package/lib/cli/open.js +2 -7
  54. package/lib/cli/program.js +73 -101
  55. package/lib/cli/ps.js +1 -21
  56. package/lib/cli/refresh-config.js +0 -7
  57. package/lib/cli/run.js +0 -3
  58. package/lib/cli/status.js +0 -11
  59. package/lib/cli/updates.js +0 -22
  60. package/lib/cli/util/__tests__/get-or-initialise-navy.js +66 -0
  61. package/lib/cli/util/__tests__/import.js +123 -0
  62. package/lib/cli/util/__tests__/index.js +17 -0
  63. package/lib/cli/util/__tests__/merge-action-options.js +47 -0
  64. package/lib/cli/util/__tests__/reconfigure.js +78 -0
  65. package/lib/cli/util/get-or-initialise-navy.js +0 -7
  66. package/lib/cli/util/import.js +0 -9
  67. package/lib/cli/util/index.js +0 -2
  68. package/lib/cli/util/merge-action-options.js +20 -0
  69. package/lib/cli/util/reconfigure.js +0 -4
  70. package/lib/cli/wait-for-healthy.js +0 -21
  71. package/lib/client/registry/__tests__/get-credentials.js +62 -0
  72. package/lib/client/registry/__tests__/get-endpoint.js +124 -0
  73. package/lib/client/registry/__tests__/get-fat-manifest.js +67 -0
  74. package/lib/client/registry/__tests__/get-token.js +66 -0
  75. package/lib/client/registry/__tests__/helpers.js +26 -0
  76. package/lib/client/registry/get-credentials.js +3 -9
  77. package/lib/client/registry/get-endpoint.js +29 -63
  78. package/lib/client/registry/get-fat-manifest.js +2 -9
  79. package/lib/client/registry/get-token.js +2 -13
  80. package/lib/client/registry/helpers.js +0 -4
  81. package/lib/config-provider.js +0 -12
  82. package/lib/config-providers/filesystem/__tests__/index.js +176 -0
  83. package/lib/config-providers/filesystem/index.js +5 -23
  84. package/lib/config-providers/npm/__tests__/index.js +226 -0
  85. package/lib/config-providers/npm/__tests__/util.js +1 -2
  86. package/lib/config-providers/npm/index.js +12 -35
  87. package/lib/config-providers/npm/util.js +0 -3
  88. package/lib/config.js +4 -19
  89. package/lib/domain/__tests__/container-image.js +81 -0
  90. package/lib/domain/__tests__/oci-api-specification.js +23 -0
  91. package/lib/domain/container-image.js +8 -21
  92. package/lib/domain/oci-api-specification.js +3 -5
  93. package/lib/driver-logging.js +0 -19
  94. package/lib/driver.js +0 -4
  95. package/lib/drivers/docker-compose/__tests__/client.js +249 -0
  96. package/lib/drivers/docker-compose/__tests__/index.js +430 -0
  97. package/lib/drivers/docker-compose/client.js +0 -16
  98. package/lib/drivers/docker-compose/index.js +7 -49
  99. package/lib/errors.js +0 -10
  100. package/lib/http-proxy.js +28 -23
  101. package/lib/index.js +1 -9
  102. package/lib/middleware/__tests__/add-service-proxy-config.js +258 -0
  103. package/lib/middleware/__tests__/develop.js +120 -0
  104. package/lib/middleware/__tests__/helpers.js +154 -0
  105. package/lib/middleware/__tests__/port-override.js +125 -0
  106. package/lib/middleware/__tests__/set-env-vars.js +94 -0
  107. package/lib/middleware/__tests__/set-image.js +76 -0
  108. package/lib/middleware/__tests__/set-logging-driver.js +94 -0
  109. package/lib/middleware/__tests__/tag-override.js +92 -0
  110. package/lib/middleware/add-service-proxy-config.js +8 -16
  111. package/lib/middleware/develop.js +2 -5
  112. package/lib/middleware/helpers.js +6 -12
  113. package/lib/middleware/port-override.js +5 -8
  114. package/lib/middleware/set-env-vars.js +6 -6
  115. package/lib/middleware/set-image.js +4 -5
  116. package/lib/middleware/set-logging-driver.js +6 -6
  117. package/lib/middleware/tag-override.js +4 -6
  118. package/lib/navy/__tests__/default-middleware.js +40 -0
  119. package/lib/navy/__tests__/index.js +1612 -0
  120. package/lib/navy/__tests__/middleware.js +71 -0
  121. package/lib/navy/__tests__/plugin-interface.js +121 -0
  122. package/lib/navy/__tests__/state.js +103 -0
  123. package/lib/navy/__tests__/util.js +24 -0
  124. package/lib/navy/default-middleware.js +0 -10
  125. package/lib/navy/index.js +83 -138
  126. package/lib/navy/middleware.js +0 -6
  127. package/lib/navy/plugin-interface.js +2 -10
  128. package/lib/navy/state.js +12 -24
  129. package/lib/navy/util.js +0 -1
  130. package/lib/service.js +2 -3
  131. package/lib/util/__tests__/exec-async.js +83 -0
  132. package/lib/util/__tests__/external-ip.js +97 -2
  133. package/lib/util/__tests__/get-lan-ip.js +46 -0
  134. package/lib/util/__tests__/has-update.js +136 -0
  135. package/lib/util/__tests__/https.js +301 -0
  136. package/lib/util/__tests__/navyrc.js +45 -0
  137. package/lib/util/__tests__/service-host.js +63 -5
  138. package/lib/util/__tests__/table.js +44 -0
  139. package/lib/util/docker-client.js +2 -10
  140. package/lib/util/exec-async.js +0 -4
  141. package/lib/util/external-ip.js +8 -12
  142. package/lib/util/fs.js +1 -6
  143. package/lib/util/get-lan-ip.js +0 -5
  144. package/lib/util/has-update.js +2 -14
  145. package/lib/util/https.js +11 -55
  146. package/lib/util/navyrc.js +0 -5
  147. package/lib/util/service-host.js +0 -17
  148. package/lib/util/table.js +0 -6
  149. package/package.json +14 -13
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _chai = require("chai");
5
+ var _sinon = _interopRequireDefault(require("sinon"));
6
+ var _middleware = require("../middleware");
7
+ /* eslint-env mocha */
8
+
9
+ function makeNavy({
10
+ driver,
11
+ registered = []
12
+ } = {}) {
13
+ return {
14
+ name: 'env',
15
+ normalisedName: 'env',
16
+ getDriver: _sinon.default.stub().resolves(driver),
17
+ ensurePluginsLoaded: _sinon.default.stub().resolves(),
18
+ getNavyFile: _sinon.default.stub().resolves(null),
19
+ externalIP: _sinon.default.stub().resolves('127.0.0.1'),
20
+ _registeredMiddleware: registered
21
+ };
22
+ }
23
+ function makeDriver() {
24
+ return {
25
+ getConfig: _sinon.default.stub().resolves({
26
+ services: {}
27
+ }),
28
+ writeConfig: _sinon.default.stub().resolves()
29
+ };
30
+ }
31
+ describe('navy/middleware', function () {
32
+ describe('middlewareRunner', function () {
33
+ it('should be a no-op when the navy has no driver', async function () {
34
+ const navy = makeNavy({
35
+ driver: null
36
+ });
37
+ await (0, _middleware.middlewareRunner)(navy, {
38
+ services: {}
39
+ });
40
+ (0, _chai.expect)(navy.ensurePluginsLoaded.called).to.equal(false);
41
+ });
42
+ it('should ensure plugins are loaded before running middleware', async function () {
43
+ const driver = makeDriver();
44
+ const navy = makeNavy({
45
+ driver
46
+ });
47
+ await (0, _middleware.middlewareRunner)(navy, {
48
+ services: {}
49
+ });
50
+ (0, _chai.expect)(navy.ensurePluginsLoaded.calledOnce).to.equal(true);
51
+ });
52
+ it('should pipe the driver config through default + registered middleware and write the result', async function () {
53
+ const driver = makeDriver();
54
+ const tagged = _sinon.default.stub().callsFake(async config => ({
55
+ ...config,
56
+ _tagged: true
57
+ }));
58
+ const navy = makeNavy({
59
+ driver,
60
+ registered: [tagged]
61
+ });
62
+ await (0, _middleware.middlewareRunner)(navy, {
63
+ services: {}
64
+ });
65
+ (0, _chai.expect)(tagged.calledOnce).to.equal(true);
66
+ (0, _chai.expect)(driver.writeConfig.calledOnce).to.equal(true);
67
+ const written = driver.writeConfig.firstCall.args[0];
68
+ (0, _chai.expect)(written).to.have.property('_tagged', true);
69
+ });
70
+ });
71
+ });
@@ -0,0 +1,121 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _chai = require("chai");
5
+ var _proxyquire = _interopRequireDefault(require("proxyquire"));
6
+ /* eslint-env mocha */
7
+
8
+ describe('navy/plugin-interface', function () {
9
+ describe('loadPlugins', function () {
10
+ function loadModule(stubs) {
11
+ return _proxyquire.default.noCallThru()('../plugin-interface', stubs);
12
+ }
13
+ it('should throw an invariant violation if the navy has no config provider', async function () {
14
+ const {
15
+ loadPlugins
16
+ } = loadModule({});
17
+ const navy = {
18
+ name: 'env',
19
+ getConfigProvider: async () => null
20
+ };
21
+ let caught;
22
+ try {
23
+ await loadPlugins(navy, {
24
+ plugins: []
25
+ });
26
+ } catch (err) {
27
+ caught = err;
28
+ }
29
+ (0, _chai.expect)(caught).to.be.an('error');
30
+ (0, _chai.expect)(caught.message).to.match(/NO_CONFIG_PROVIDER/);
31
+ });
32
+ it('should return an empty array when navyFile has no plugins entry', async function () {
33
+ const {
34
+ loadPlugins
35
+ } = loadModule({});
36
+ const navy = {
37
+ getConfigProvider: async () => ({
38
+ getNavyPath: async () => '/some/path'
39
+ })
40
+ };
41
+ (0, _chai.expect)(await loadPlugins(navy, {})).to.eql([]);
42
+ });
43
+ it('should resolve plugins by name relative to the navy path and instantiate them with the navy', async function () {
44
+ const fakePluginPath = '/abs/path/to/plugin';
45
+ const fakePluginInstance = {
46
+ meta: 'instance'
47
+ };
48
+ const PluginCtor = navy => ({
49
+ ...fakePluginInstance,
50
+ navy
51
+ });
52
+ const {
53
+ loadPlugins
54
+ } = loadModule({
55
+ resolve: (pluginName, opts, cb) => cb(null, fakePluginPath),
56
+ [fakePluginPath]: PluginCtor
57
+ });
58
+ const navy = {
59
+ getConfigProvider: async () => ({
60
+ getNavyPath: async () => '/navy/path'
61
+ })
62
+ };
63
+ const plugins = await loadPlugins(navy, {
64
+ plugins: ['my-plugin']
65
+ });
66
+ (0, _chai.expect)(plugins).to.have.lengthOf(1);
67
+ (0, _chai.expect)(plugins[0]).to.have.property('meta', 'instance');
68
+ (0, _chai.expect)(plugins[0]).to.have.property('navy', navy);
69
+ });
70
+ it('should throw PLUGIN_RESOLVE_ERR with the joined plugin names when resolution fails', async function () {
71
+ const {
72
+ loadPlugins
73
+ } = loadModule({
74
+ resolve: (pluginName, opts, cb) => cb(new Error('not found'))
75
+ });
76
+ const navy = {
77
+ getConfigProvider: async () => ({
78
+ getNavyPath: async () => '/navy/path'
79
+ })
80
+ };
81
+ let caught;
82
+ try {
83
+ await loadPlugins(navy, {
84
+ plugins: ['plugin-a', 'plugin-b']
85
+ });
86
+ } catch (err) {
87
+ caught = err;
88
+ }
89
+ (0, _chai.expect)(caught).to.be.an('error');
90
+ (0, _chai.expect)(caught.message).to.match(/PLUGIN_RESOLVE_ERR/);
91
+ (0, _chai.expect)(caught.message).to.contain('plugin-a, plugin-b');
92
+ });
93
+ it('should throw PLUGIN_DOESNT_EXPORT_FUNCTION when a plugin module is not a function', async function () {
94
+ const fakePluginPath = '/abs/path/to/bad-plugin';
95
+ const {
96
+ loadPlugins
97
+ } = loadModule({
98
+ resolve: (pluginName, opts, cb) => cb(null, fakePluginPath),
99
+ [fakePluginPath]: {
100
+ notAFunction: true
101
+ }
102
+ });
103
+ const navy = {
104
+ getConfigProvider: async () => ({
105
+ getNavyPath: async () => '/navy/path'
106
+ })
107
+ };
108
+ let caught;
109
+ try {
110
+ await loadPlugins(navy, {
111
+ plugins: ['bad-plugin']
112
+ });
113
+ } catch (err) {
114
+ caught = err;
115
+ }
116
+ (0, _chai.expect)(caught).to.be.an('error');
117
+ (0, _chai.expect)(caught.message).to.match(/PLUGIN_DOESNT_EXPORT_FUNCTION/);
118
+ (0, _chai.expect)(caught.message).to.contain('bad-plugin');
119
+ });
120
+ });
121
+ });
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _chai = require("chai");
5
+ var _sinon = _interopRequireDefault(require("sinon"));
6
+ var _path = _interopRequireDefault(require("path"));
7
+ var _fs = require("fs");
8
+ var _fs2 = _interopRequireDefault(require("../../util/fs"));
9
+ var _state = require("../state");
10
+ /* eslint-env mocha */
11
+
12
+ describe('navy/state', function () {
13
+ let sandbox;
14
+ let originalHome;
15
+ beforeEach(function () {
16
+ sandbox = _sinon.default.createSandbox();
17
+ originalHome = process.env.HOME;
18
+ process.env.HOME = '/home/test';
19
+ });
20
+ afterEach(function () {
21
+ sandbox.restore();
22
+ if (originalHome === undefined) {
23
+ delete process.env.HOME;
24
+ } else {
25
+ process.env.HOME = originalHome;
26
+ }
27
+ });
28
+ describe('pathToNavyRoot', function () {
29
+ it('should return $HOME/.navy', function () {
30
+ (0, _chai.expect)((0, _state.pathToNavyRoot)()).to.equal(_path.default.join('/home/test', '.navy'));
31
+ });
32
+ it('should throw when HOME is not set', function () {
33
+ delete process.env.HOME;
34
+ (0, _chai.expect)(() => (0, _state.pathToNavyRoot)()).to.throw(/NO_HOME_DIRECTORY/);
35
+ });
36
+ });
37
+ describe('pathToNavys', function () {
38
+ it('should return $HOME/.navy/navies', function () {
39
+ (0, _chai.expect)((0, _state.pathToNavys)()).to.equal(_path.default.join('/home/test', '.navy', 'navies'));
40
+ });
41
+ });
42
+ describe('pathToNavy', function () {
43
+ it('should return $HOME/.navy/navies/<env>', function () {
44
+ (0, _chai.expect)((0, _state.pathToNavy)('myenv')).to.equal(_path.default.join('/home/test', '.navy', 'navies', 'myenv'));
45
+ });
46
+ });
47
+ describe('pathToState', function () {
48
+ it('should return $HOME/.navy/navies/<env>/state.json', function () {
49
+ (0, _chai.expect)((0, _state.pathToState)('myenv')).to.equal(_path.default.join('/home/test', '.navy', 'navies', 'myenv', 'state.json'));
50
+ });
51
+ });
52
+ describe('getState', function () {
53
+ it('should read and parse the state.json file', async function () {
54
+ const state = {
55
+ driver: 'docker-compose',
56
+ services: {
57
+ api: {}
58
+ }
59
+ };
60
+ const buf = Buffer.from(JSON.stringify(state));
61
+ sandbox.stub(_fs2.default, 'readFileAsync').resolves(buf);
62
+ (0, _chai.expect)(await (0, _state.getState)('myenv')).to.eql(state);
63
+ });
64
+ it('should return null when the state file cannot be read', async function () {
65
+ sandbox.stub(_fs2.default, 'readFileAsync').rejects(new Error('ENOENT'));
66
+ (0, _chai.expect)(await (0, _state.getState)('myenv')).to.equal(null);
67
+ });
68
+ it('should return null when the state file content is not valid JSON', async function () {
69
+ sandbox.stub(_fs2.default, 'readFileAsync').resolves(Buffer.from('not json'));
70
+ (0, _chai.expect)(await (0, _state.getState)('myenv')).to.equal(null);
71
+ });
72
+ });
73
+ describe('saveState', function () {
74
+ it('should mkdir -p the navy directory and write the state JSON file', async function () {
75
+ const mkdirStub = sandbox.stub(_fs.promises, 'mkdir').resolves();
76
+ const writeStub = sandbox.stub(_fs2.default, 'writeFileAsync').resolves();
77
+ const state = {
78
+ driver: 'docker-compose'
79
+ };
80
+ await (0, _state.saveState)('myenv', state);
81
+ (0, _chai.expect)(mkdirStub.calledOnce).to.equal(true);
82
+ (0, _chai.expect)(mkdirStub.firstCall.args[0]).to.equal(_path.default.join('/home/test', '.navy', 'navies', 'myenv'));
83
+ (0, _chai.expect)(mkdirStub.firstCall.args[1]).to.eql({
84
+ recursive: true
85
+ });
86
+ (0, _chai.expect)(writeStub.calledOnce).to.equal(true);
87
+ (0, _chai.expect)(writeStub.firstCall.args[0]).to.equal(_path.default.join('/home/test', '.navy', 'navies', 'myenv', 'state.json'));
88
+ (0, _chai.expect)(JSON.parse(writeStub.firstCall.args[1])).to.eql(state);
89
+ });
90
+ });
91
+ describe('deleteState', function () {
92
+ it('should rm -rf the navy directory recursively', async function () {
93
+ const rmStub = sandbox.stub(_fs.promises, 'rm').resolves();
94
+ await (0, _state.deleteState)('myenv');
95
+ (0, _chai.expect)(rmStub.calledOnce).to.equal(true);
96
+ (0, _chai.expect)(rmStub.firstCall.args[0]).to.equal(_path.default.join('/home/test', '.navy', 'navies', 'myenv'));
97
+ (0, _chai.expect)(rmStub.firstCall.args[1]).to.eql({
98
+ recursive: true,
99
+ force: true
100
+ });
101
+ });
102
+ });
103
+ });
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+
3
+ var _chai = require("chai");
4
+ var _util = require("../util");
5
+ /* eslint-env mocha */
6
+
7
+ describe('navy/util', function () {
8
+ describe('normaliseNavyName', function () {
9
+ it('should strip non-word characters from a navy name', function () {
10
+ (0, _chai.expect)((0, _util.normaliseNavyName)('my-navy')).to.equal('mynavy');
11
+ (0, _chai.expect)((0, _util.normaliseNavyName)('my navy')).to.equal('mynavy');
12
+ (0, _chai.expect)((0, _util.normaliseNavyName)('a.b.c')).to.equal('abc');
13
+ });
14
+ it('should preserve underscores and digits (which are word characters)', function () {
15
+ (0, _chai.expect)((0, _util.normaliseNavyName)('env_1_test_2')).to.equal('env_1_test_2');
16
+ });
17
+ it('should leave a name with no special characters unchanged', function () {
18
+ (0, _chai.expect)((0, _util.normaliseNavyName)('plain')).to.equal('plain');
19
+ });
20
+ it('should return an empty string for a name made entirely of special characters', function () {
21
+ (0, _chai.expect)((0, _util.normaliseNavyName)('!@#$%^&*()')).to.equal('');
22
+ });
23
+ });
24
+ });
@@ -1,27 +1,17 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.default = void 0;
9
-
10
8
  var _develop = _interopRequireDefault(require("../middleware/develop"));
11
-
12
9
  var _tagOverride = _interopRequireDefault(require("../middleware/tag-override"));
13
-
14
10
  var _portOverride = _interopRequireDefault(require("../middleware/port-override"));
15
-
16
11
  var _addServiceProxyConfig = _interopRequireDefault(require("../middleware/add-service-proxy-config"));
17
-
18
12
  var _setEnvVars = _interopRequireDefault(require("../middleware/set-env-vars"));
19
-
20
13
  var _setLoggingDriver = _interopRequireDefault(require("../middleware/set-logging-driver"));
21
-
22
14
  var _setImage = _interopRequireDefault(require("../middleware/set-image"));
23
-
24
15
  var _default = navy => [_develop.default, _tagOverride.default, _portOverride.default, _setEnvVars.default, _setLoggingDriver.default, _setImage.default, (0, _addServiceProxyConfig.default)(navy)];
25
-
26
16
  exports.default = _default;
27
17
  module.exports = exports.default;