@dxos/cli 2.4.15-alpha.0 → 2.5.1-alpha.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 (50) hide show
  1. package/README.md +60 -69
  2. package/bin/dx.js +1 -1
  3. package/dist/known-extensions.yml +129 -0
  4. package/dist/src/extensions.d.ts +6 -0
  5. package/dist/src/extensions.d.ts.map +1 -0
  6. package/dist/src/extensions.js +45 -0
  7. package/dist/src/extensions.js.map +1 -0
  8. package/dist/src/main.d.ts +2 -0
  9. package/dist/src/main.d.ts.map +1 -0
  10. package/dist/src/main.js +78 -0
  11. package/dist/src/main.js.map +1 -0
  12. package/dist/src/modules/cert.d.ts +4 -0
  13. package/dist/src/modules/cert.d.ts.map +1 -0
  14. package/dist/src/modules/cert.js +33 -0
  15. package/dist/src/modules/cert.js.map +1 -0
  16. package/dist/src/modules/extension.d.ts +4 -0
  17. package/dist/src/modules/extension.d.ts.map +1 -0
  18. package/dist/src/modules/extension.js +145 -0
  19. package/dist/src/modules/extension.js.map +1 -0
  20. package/dist/src/modules/installation.d.ts +5 -0
  21. package/dist/src/modules/installation.d.ts.map +1 -0
  22. package/dist/src/modules/installation.js +91 -0
  23. package/dist/src/modules/installation.js.map +1 -0
  24. package/dist/src/modules/pluggable.d.ts +14 -0
  25. package/dist/src/modules/pluggable.d.ts.map +1 -0
  26. package/dist/src/modules/pluggable.js +48 -0
  27. package/dist/src/modules/pluggable.js.map +1 -0
  28. package/dist/src/modules/profile.d.ts +2 -0
  29. package/dist/src/modules/profile.d.ts.map +1 -0
  30. package/dist/src/modules/profile.js +75 -0
  31. package/dist/src/modules/profile.js.map +1 -0
  32. package/dist/src/modules/services.d.ts +5 -0
  33. package/dist/src/modules/services.d.ts.map +1 -0
  34. package/dist/src/modules/services.js +260 -0
  35. package/dist/src/modules/services.js.map +1 -0
  36. package/dist/src/pluggable.d.ts +65 -0
  37. package/dist/src/pluggable.d.ts.map +1 -0
  38. package/dist/src/pluggable.js +226 -0
  39. package/dist/src/pluggable.js.map +1 -0
  40. package/dist/tsconfig.tsbuildinfo +1 -0
  41. package/package.json +22 -38
  42. package/dist/es/extensions.js +0 -100
  43. package/dist/es/main.js +0 -98
  44. package/dist/es/modules/cert.js +0 -43
  45. package/dist/es/modules/extension.js +0 -191
  46. package/dist/es/modules/installation.js +0 -144
  47. package/dist/es/modules/pluggable.js +0 -68
  48. package/dist/es/modules/profile.js +0 -100
  49. package/dist/es/modules/services.js +0 -408
  50. package/dist/es/pluggable.js +0 -312
@@ -0,0 +1,260 @@
1
+ "use strict";
2
+ //
3
+ // Copyright 2020 DXOS.org
4
+ //
5
+ var __importDefault = (this && this.__importDefault) || function (mod) {
6
+ return (mod && mod.__esModule) ? mod : { "default": mod };
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.ServicesModule = void 0;
10
+ const assert_1 = __importDefault(require("assert"));
11
+ const os_1 = __importDefault(require("os"));
12
+ const path_1 = __importDefault(require("path"));
13
+ const cli_core_1 = require("@dxos/cli-core");
14
+ const pluggable_1 = require("../pluggable");
15
+ const DEFAULT_LOG_LINES = 100;
16
+ const DEFAULT_CONFIG_PATH = '/root/.dx/profile/local.yml';
17
+ const DEFAULT_STORAGE_PATH = path_1.default.join('/root', cli_core_1.STORAGE_ROOT);
18
+ const SERVICE_DAEMON = 'daemon';
19
+ const SERVICE_CONTAINER = 'container';
20
+ const getServiceInfo = (moduleName, serviceName) => {
21
+ (0, assert_1.default)(moduleName, 'Invalid extension.');
22
+ const pluggable = new pluggable_1.Pluggable({ moduleName });
23
+ if (!pluggable.installed) {
24
+ throw new Error(`Extension '${moduleName}' is not installed.`);
25
+ }
26
+ const compose = pluggable.getDockerCompose();
27
+ (0, assert_1.default)(compose, `Extension '${moduleName}' does not provide containers.`);
28
+ // TODO(egorgripasov): Docker compose?
29
+ const service = compose.services[serviceName];
30
+ (0, assert_1.default)(service, `Service ${serviceName} not found in compose file.`);
31
+ return service;
32
+ };
33
+ const getAuth = (config, imageInfo) => ({
34
+ username: config.get('services.machine.githubUsername'),
35
+ password: config.get('services.machine.githubAccessToken'),
36
+ serveraddress: `https://${imageInfo.image.split('/')[0]}`
37
+ });
38
+ const getServiceType = async (serviceName) => {
39
+ const { services = [] } = await (0, cli_core_1.listServices)();
40
+ return (services.map(({ name }) => name).includes(serviceName)) ? SERVICE_DAEMON : SERVICE_CONTAINER;
41
+ };
42
+ /**
43
+ * Services CLI module.
44
+ * @returns {object}
45
+ */
46
+ const ServicesModule = ({ config, profilePath }) => ({
47
+ command: ['service'],
48
+ describe: 'DXOS service management.',
49
+ handler: (0, cli_core_1.asyncHandler)(async (argv) => {
50
+ const { json } = argv;
51
+ const { services } = await (0, cli_core_1.listServices)();
52
+ const containers = await cli_core_1.DockerContainer.list();
53
+ const containerService = await Promise.all(containers.map(async (container) => ({
54
+ name: container.name,
55
+ exec: container.image,
56
+ status: container.state === cli_core_1.RUNNING_STATE ? 'online' : container.state,
57
+ ports: container.ports
58
+ .filter(port => port.PublicPort)
59
+ .map(port => port.PublicPort)
60
+ .filter((value, index, arr) => arr.indexOf(value) === index)
61
+ .join(','),
62
+ ...(await container.stats()),
63
+ type: SERVICE_CONTAINER
64
+ })));
65
+ const result = services
66
+ .map(service => ({ ...service, type: SERVICE_DAEMON }))
67
+ .concat(containerService)
68
+ .sort((a, b) => {
69
+ return a.name.localeCompare(b.name);
70
+ });
71
+ (0, cli_core_1.print)(result, { json });
72
+ }),
73
+ builder: yargs => yargs
74
+ .command({
75
+ command: ['install'],
76
+ describe: 'Install service from container.',
77
+ builder: yargs => yargs
78
+ .option('from', { describe: 'Extension name', required: true })
79
+ .option('service', { describe: 'Service to install', required: true })
80
+ .option('force', { type: 'boolean', default: false, description: 'Force install' })
81
+ .option('auth', { type: 'boolean', default: false, description: 'Authentication required' })
82
+ .option('dev', { type: 'boolean', default: false, description: 'Dev build' }),
83
+ handler: (0, cli_core_1.asyncHandler)(async (argv) => {
84
+ const { from: moduleName, service: serviceName, auth: authRequired, force, dev } = argv;
85
+ const service = getServiceInfo(moduleName, serviceName);
86
+ const auth = authRequired ? getAuth(config, service) : undefined;
87
+ const dockerImage = new cli_core_1.DockerImage({ service, auth, dev });
88
+ await dockerImage.pull(force);
89
+ })
90
+ })
91
+ .command({
92
+ command: ['upgrade'],
93
+ describe: 'Upgrade service container.',
94
+ builder: yargs => yargs
95
+ .option('from', { describe: 'Extension name', required: true })
96
+ .option('service', { describe: 'Service to upgrade', required: true })
97
+ .option('auth', { type: 'boolean', default: false, description: 'Authentication required' })
98
+ .option('dev', { type: 'boolean', default: false, description: 'Dev build' }),
99
+ handler: (0, cli_core_1.asyncHandler)(async (argv) => {
100
+ const { from: moduleName, service: serviceName, auth: authRequired, dev } = argv;
101
+ const service = getServiceInfo(moduleName, serviceName);
102
+ const auth = authRequired ? getAuth(config, service) : undefined;
103
+ const { image: imageName } = service;
104
+ const container = await cli_core_1.DockerContainer.find({ imageName });
105
+ if (container && container.started) {
106
+ throw new Error(`Unable to upgrade '${service.container_name}' while it's running.`);
107
+ }
108
+ // TODO(egorgripasov): Already up-to-date message.
109
+ const dockerImage = new cli_core_1.DockerImage({ service, auth, dev });
110
+ await dockerImage.pull(true);
111
+ await cli_core_1.DockerImage.cleanNotLatest(imageName);
112
+ })
113
+ })
114
+ .command({
115
+ command: ['start'],
116
+ describe: 'Start service container.',
117
+ builder: yargs => yargs
118
+ .option('from', { describe: 'Extension name', required: true })
119
+ .option('service', { describe: 'Service to install', required: true })
120
+ .option('name', { type: 'string', description: 'Container name' })
121
+ .option('profile-path', { type: 'string', description: 'Profile to pass to container.', default: profilePath })
122
+ .option('forward-env', { type: 'string', description: 'ENV to forward. Could be "full", "system", "config"' })
123
+ .option('host-net', { type: 'boolean', description: 'Use host network', default: false })
124
+ .option('storage-path', { type: 'string', description: 'Path to ECHO and HALO storage.', default: path_1.default.join(os_1.default.homedir(), cli_core_1.STORAGE_ROOT) })
125
+ .option('binds', { type: 'array', description: 'Additional volume binds.' })
126
+ .option('dev', { type: 'boolean', default: false, description: 'Dev build' })
127
+ .option('replace-args', { type: 'boolean', description: 'Replace default arguments with provided.', default: false }),
128
+ handler: (0, cli_core_1.asyncHandler)(async (argv) => {
129
+ const { from: moduleName, service: serviceName, forward, forwardEnv, hostNet, profilePath: profile, storagePath, binds: additionalBinds = [], dev, replaceArgs } = argv;
130
+ const service = getServiceInfo(moduleName, serviceName);
131
+ const dockerImage = new cli_core_1.DockerImage({ service, dev });
132
+ const forwardArgs = forward ? JSON.parse(forward).args : [];
133
+ const command = replaceArgs ? forwardArgs : service.command.split(' ').concat(forwardArgs);
134
+ const { name = service.container_name } = argv;
135
+ (0, assert_1.default)(name, 'Service name is required.');
136
+ // TODO(egorgripasov): Share volumes between services.
137
+ const volumes = (service.volumes || [])
138
+ .map(volume => volume.split(':')).filter(vol => vol.length === 2);
139
+ let env;
140
+ switch (forwardEnv) {
141
+ case 'full':
142
+ env = Object.entries(process.env).map(([key, value]) => `${key}=${value}`);
143
+ break;
144
+ case 'system':
145
+ env = Object.entries(process.env).filter(([key]) => cli_core_1.ENVS.includes(key)).map(([key, value]) => `${key}=${value}`);
146
+ break;
147
+ case 'config':
148
+ env = Object.entries((0, cli_core_1.mapConfigToEnv)(config)).map(([key, value]) => `${key}=${value}`);
149
+ break;
150
+ }
151
+ const binds = [
152
+ `${profile}:${DEFAULT_CONFIG_PATH}`,
153
+ `${storagePath}:${DEFAULT_STORAGE_PATH}:rw`,
154
+ ...additionalBinds
155
+ ];
156
+ const container = await dockerImage.getOrCreateContainer(name, command, env, binds, hostNet, volumes);
157
+ await container.start();
158
+ })
159
+ })
160
+ // Get logs.
161
+ .command({
162
+ command: ['logs [name]'],
163
+ describe: 'Fetch logs.',
164
+ builder: yargs => yargs
165
+ .option('name')
166
+ .option('lines', { type: 'number', default: DEFAULT_LOG_LINES })
167
+ .option('follow', { alias: 'f', type: 'boolean' })
168
+ .option('log-file')
169
+ .option('running-only', { default: false }),
170
+ handler: (0, cli_core_1.asyncHandler)(async (argv) => {
171
+ const { name, lines, runningOnly, logFile, follow } = argv;
172
+ (0, assert_1.default)(name, 'Invalid Service Name.');
173
+ const serviceType = await getServiceType(name);
174
+ if (serviceType === SERVICE_DAEMON) {
175
+ await (0, cli_core_1.getLogs)(name, { lines, runningOnly, logFile, follow });
176
+ }
177
+ else {
178
+ const container = await cli_core_1.DockerContainer.find({ name });
179
+ if (!container) {
180
+ throw new Error(`Unable to find "${name}" service.`);
181
+ }
182
+ await container.logs(lines, follow);
183
+ }
184
+ })
185
+ })
186
+ // Restart.
187
+ .command({
188
+ command: ['restart [name]'],
189
+ describe: 'Restart serice.',
190
+ builder: yargs => yargs
191
+ .option('name'),
192
+ handler: (0, cli_core_1.asyncHandler)(async (argv) => {
193
+ const { name } = argv;
194
+ (0, assert_1.default)(name, 'Invalid Service Name.');
195
+ const serviceType = await getServiceType(name);
196
+ if (serviceType === SERVICE_DAEMON) {
197
+ await (0, cli_core_1.restartService)(name);
198
+ }
199
+ else {
200
+ const container = await cli_core_1.DockerContainer.find({ name });
201
+ if (!container) {
202
+ throw new Error(`Unable to find "${name}" service.`);
203
+ }
204
+ await container.restart();
205
+ }
206
+ })
207
+ })
208
+ // Stop.
209
+ .command({
210
+ command: ['stop [name]'],
211
+ describe: 'Stop service.',
212
+ builder: yargs => yargs
213
+ .option('name'),
214
+ handler: (0, cli_core_1.asyncHandler)(async (argv) => {
215
+ const { name } = argv;
216
+ (0, assert_1.default)(name, 'Invalid Service Name.');
217
+ const serviceType = await getServiceType(name);
218
+ if (serviceType === SERVICE_DAEMON) {
219
+ await (0, cli_core_1.stopService)(name);
220
+ }
221
+ else {
222
+ const container = await cli_core_1.DockerContainer.find({ name });
223
+ if (!container) {
224
+ throw new Error(`Unable to find "${name}" service.`);
225
+ }
226
+ await container.stop();
227
+ }
228
+ })
229
+ })
230
+ .command({
231
+ command: ['reset'],
232
+ describe: 'Reset storage for specific service.',
233
+ builder: yargs => yargs
234
+ .option('name', { describe: 'Service name' })
235
+ .option('volume', { describe: 'Volume name' }),
236
+ handler: (0, cli_core_1.asyncHandler)(async (argv) => {
237
+ const { name, volume, json } = argv;
238
+ const container = await cli_core_1.DockerContainer.find({ name });
239
+ if (!container) {
240
+ throw new Error(`Unable to find "${name}" service.`);
241
+ }
242
+ let volumesToDelete = await Promise.all(Object.keys(container.volumes)
243
+ .filter(vol => !volume || vol === volume)
244
+ .map(async (vol) => cli_core_1.DockerVolume.get(vol, name)));
245
+ // Kill service container before removing volume.
246
+ volumesToDelete = volumesToDelete.filter(volume => !!volume);
247
+ if (volumesToDelete.length) {
248
+ await container.destroy();
249
+ await Promise.all(volumesToDelete.map(async (volume) => {
250
+ if (volume) {
251
+ await volume.remove();
252
+ }
253
+ }));
254
+ }
255
+ (0, cli_core_1.print)(volumesToDelete.map(vol => vol.name), { json });
256
+ })
257
+ })
258
+ });
259
+ exports.ServicesModule = ServicesModule;
260
+ //# sourceMappingURL=services.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"services.js","sourceRoot":"","sources":["../../../src/modules/services.js"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Pluggable CLI module.
3
+ */
4
+ export class Pluggable {
5
+ /**
6
+ * Pluggable factory.
7
+ * @param {Object} options
8
+ */
9
+ static create(options: Object): Pluggable;
10
+ /**
11
+ * @constructor
12
+ * @param {String} moduleName
13
+ * @param {String} version
14
+ */
15
+ constructor({ moduleName, version }: string);
16
+ _modulePath: any;
17
+ _moduleName: any;
18
+ _version: any;
19
+ _workspaceRoot: any;
20
+ _isInWorkspace: any;
21
+ _installed: boolean;
22
+ get moduleName(): any;
23
+ get version(): any;
24
+ get workspaceRoot(): any;
25
+ get installed(): boolean;
26
+ get isInWorkspace(): any;
27
+ get modulePath(): any;
28
+ get module(): any;
29
+ /**
30
+ * Checks if workspace is defined.
31
+ */
32
+ isWorkspace(): boolean;
33
+ /**
34
+ * Checks if extension is installed.
35
+ */
36
+ isInstalled(): boolean;
37
+ /**
38
+ * Install CLI extension.
39
+ */
40
+ installModule(npmClient: any, options?: {}): Promise<any>;
41
+ /**
42
+ * Uninstall CLI extension.
43
+ */
44
+ uninstallModule(npmClient: any, options?: {}): Promise<any>;
45
+ /**
46
+ * Init extension in a scope of main CLI.
47
+ * @param {Object} state
48
+ */
49
+ init(state: Object): Promise<any>;
50
+ /**
51
+ * Destroy extension in a scope of main CLI.
52
+ * @param {Object} state
53
+ */
54
+ destroy(state: Object): Promise<any>;
55
+ /**
56
+ * Runs command of an CLI extension.
57
+ * @param {Object} state
58
+ * @param {Object} argv
59
+ */
60
+ run(state: Object, argv: Object): Promise<any>;
61
+ getInfo(): any;
62
+ getDockerCompose(): any;
63
+ _cleanCache(): void;
64
+ }
65
+ //# sourceMappingURL=pluggable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pluggable.d.ts","sourceRoot":"","sources":["../../src/pluggable.js"],"names":[],"mappings":"AAiEA;;GAEG;AACH;IAGE;;;OAGG;IACH,uBAFW,MAAM,aAIhB;IAED;;;;OAIG;IACH,6CAMC;IArBD,iBAAY;IAgBV,iBAA6B;IAC7B,cAAuB;IACvB,oBAAiD;IACjD,oBAA+H;IAC/H,oBAAoC;IAGtC,sBAEC;IAED,mBAEC;IAED,yBAEC;IAED,yBAEC;IAED,yBAEC;IAED,sBAQC;IAED,kBAIC;IAED;;OAEG;IACH,uBAEC;IAED;;OAEG;IACH,uBAeC;IAED;;OAEG;IACH,0DAgBC;IAED;;OAEG;IACH,4DAeC;IAED;;;OAGG;IACH,YAFW,MAAM,gBAIhB;IAED;;;OAGG;IACH,eAFW,MAAM,gBAIhB;IAED;;;;OAIG;IACH,WAHW,MAAM,QACN,MAAM,gBAsBhB;IAED,eAGC;IAED,wBAGC;IAED,oBAEC;CACF"}
@@ -0,0 +1,226 @@
1
+ "use strict";
2
+ //
3
+ // Copyright 2020 DXOS.org
4
+ //
5
+ var __importDefault = (this && this.__importDefault) || function (mod) {
6
+ return (mod && mod.__esModule) ? mod : { "default": mod };
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.Pluggable = void 0;
10
+ /* eslint import/no-dynamic-require: 0 */
11
+ /* eslint @typescript-eslint/no-var-requires: 0 */
12
+ /* eslint global-require: 0 */
13
+ const child_process_1 = require("child_process");
14
+ const find_root_1 = __importDefault(require("find-root"));
15
+ const fs_1 = __importDefault(require("fs"));
16
+ const lodash_isarray_1 = __importDefault(require("lodash.isarray"));
17
+ const ora_1 = __importDefault(require("ora"));
18
+ const path_1 = __importDefault(require("path"));
19
+ const read_pkg_up_1 = __importDefault(require("read-pkg-up"));
20
+ const cli_core_1 = require("@dxos/cli-core");
21
+ const extensions_1 = require("./extensions");
22
+ const pkg = read_pkg_up_1.default.sync({ cwd: path_1.default.join(__dirname, '../') });
23
+ /**
24
+ * @param {String} command
25
+ * @param {Array} args
26
+ * @param {Object} options
27
+ */
28
+ const runCommand = async (command, args, options) => {
29
+ return new Promise((resolve, reject) => {
30
+ const { spinner: spinnerText } = options;
31
+ const spinner = (0, ora_1.default)(spinnerText);
32
+ spinner.start();
33
+ (0, child_process_1.exec)(`${(0, cli_core_1.prepareExec)(command)} ${args.join(' ')}`, (err) => {
34
+ if (err) {
35
+ spinner.fail();
36
+ reject(err);
37
+ }
38
+ else {
39
+ spinner.succeed();
40
+ spinner.clear();
41
+ resolve();
42
+ }
43
+ });
44
+ });
45
+ };
46
+ /**
47
+ * Finds root dir of a workspace.
48
+ * @param {String} from
49
+ */
50
+ const getWorkspaceRoot = from => {
51
+ try {
52
+ return (0, find_root_1.default)(from, dir => {
53
+ const pkgPath = path_1.default.join(dir, 'package.json');
54
+ if (fs_1.default.existsSync(pkgPath)) {
55
+ const { workspaces } = require(pkgPath);
56
+ return workspaces && ((0, lodash_isarray_1.default)(workspaces) || workspaces.packages);
57
+ }
58
+ });
59
+ }
60
+ catch (err) {
61
+ return '';
62
+ }
63
+ };
64
+ /**
65
+ * Pluggable CLI module.
66
+ */
67
+ class Pluggable {
68
+ /**
69
+ * @constructor
70
+ * @param {String} moduleName
71
+ * @param {String} version
72
+ */
73
+ constructor({ moduleName, version }) {
74
+ this._moduleName = moduleName;
75
+ this._version = version;
76
+ this._workspaceRoot = getWorkspaceRoot(__dirname);
77
+ this._isInWorkspace = this._workspaceRoot && fs_1.default.existsSync(path_1.default.resolve(this._workspaceRoot, 'node_modules', this._moduleName));
78
+ this._installed = this.isInstalled();
79
+ }
80
+ /**
81
+ * Pluggable factory.
82
+ * @param {Object} options
83
+ */
84
+ static create(options) {
85
+ return new Pluggable(options);
86
+ }
87
+ get moduleName() {
88
+ return this._moduleName;
89
+ }
90
+ get version() {
91
+ return this._version;
92
+ }
93
+ get workspaceRoot() {
94
+ return this._workspaceRoot;
95
+ }
96
+ get installed() {
97
+ return this._installed;
98
+ }
99
+ get isInWorkspace() {
100
+ return this._isInWorkspace;
101
+ }
102
+ get modulePath() {
103
+ if (!this._modulePath) {
104
+ const { moduleName } = this;
105
+ const pkgPath = require.resolve(`${moduleName}/package.json`);
106
+ const pkg = require(pkgPath);
107
+ this._modulePath = path_1.default.resolve(path_1.default.dirname(pkgPath), pkg.main);
108
+ }
109
+ return this._modulePath;
110
+ }
111
+ get module() {
112
+ var _a;
113
+ const module = require(this.modulePath);
114
+ const moduleCli = (_a = module.default) !== null && _a !== void 0 ? _a : module; // Difference between `module.exports` and `export default`.
115
+ return moduleCli;
116
+ }
117
+ /**
118
+ * Checks if workspace is defined.
119
+ */
120
+ isWorkspace() {
121
+ return !!this.workspaceRoot;
122
+ }
123
+ /**
124
+ * Checks if extension is installed.
125
+ */
126
+ isInstalled() {
127
+ const { moduleName } = this;
128
+ if (this._isInWorkspace) {
129
+ return true;
130
+ }
131
+ try {
132
+ const pkgPath = require.resolve(`${moduleName}/package.json`);
133
+ const pkg = require(pkgPath);
134
+ // Check if module is installed and version matches cli version.
135
+ return !!pkg;
136
+ // TODO(egorgripasov): Extension compatibility. Semver?
137
+ // && pkg.version === this.version;
138
+ }
139
+ catch (err) {
140
+ return false;
141
+ }
142
+ }
143
+ /**
144
+ * Install CLI extension.
145
+ */
146
+ async installModule(npmClient, options = {}) {
147
+ const moduleName = this._moduleName;
148
+ const version = this._version;
149
+ if (this.isWorkspace()) {
150
+ console.error(`The module ${moduleName}@${version} has to be added to devDependencies.`);
151
+ return;
152
+ }
153
+ const isYarn = npmClient ? npmClient === 'yarn' : await (0, cli_core_1.isGlobalYarn)(pkg.package.name);
154
+ const command = isYarn ? 'yarn' : 'npm';
155
+ const args = isYarn ? ['global', 'add'] : ['install', '-g'];
156
+ args.push(`${moduleName}${version ? `@${version}` : ''}`);
157
+ return runCommand(command, args, options);
158
+ }
159
+ /**
160
+ * Uninstall CLI extension.
161
+ */
162
+ async uninstallModule(npmClient, options = {}) {
163
+ const moduleName = this._moduleName;
164
+ if (this.isWorkspace()) {
165
+ console.error(`The module ${moduleName} has to be removed from devDependencies.`);
166
+ return;
167
+ }
168
+ const isYarn = npmClient ? npmClient === 'yarn' : await (0, cli_core_1.isGlobalYarn)(pkg.package.name);
169
+ const command = isYarn ? 'yarn' : 'npm';
170
+ const args = isYarn ? ['global', 'remove'] : ['uninstall', '-g'];
171
+ args.push(`${moduleName}`);
172
+ return runCommand(command, args, options);
173
+ }
174
+ /**
175
+ * Init extension in a scope of main CLI.
176
+ * @param {Object} state
177
+ */
178
+ async init(state) {
179
+ return this.module.init(state);
180
+ }
181
+ /**
182
+ * Destroy extension in a scope of main CLI.
183
+ * @param {Object} state
184
+ */
185
+ async destroy(state) {
186
+ return this.module.destroy(state);
187
+ }
188
+ /**
189
+ * Runs command of an CLI extension.
190
+ * @param {Object} state
191
+ * @param {Object} argv
192
+ */
193
+ async run(state, argv) {
194
+ const { installed, moduleName, version } = this;
195
+ if (!installed) {
196
+ const spinner = `Installing ${moduleName}${version ? `@${version}` : ''}`;
197
+ try {
198
+ await this.installModule(null, { spinner });
199
+ await (0, extensions_1.addInstalled)(moduleName, this.getInfo());
200
+ const { init, destroy } = this.module;
201
+ if (init || destroy) {
202
+ console.log(`${moduleName} was successfully installed. Please run your command again.`);
203
+ return;
204
+ }
205
+ }
206
+ catch (err) {
207
+ console.error(err);
208
+ return;
209
+ }
210
+ }
211
+ return this.module.runAsExtension(state, argv);
212
+ }
213
+ getInfo() {
214
+ this._cleanCache();
215
+ return this.module.info;
216
+ }
217
+ getDockerCompose() {
218
+ this._cleanCache();
219
+ return this.module.dockerCompose;
220
+ }
221
+ _cleanCache() {
222
+ delete require.cache[require.resolve(this.modulePath)];
223
+ }
224
+ }
225
+ exports.Pluggable = Pluggable;
226
+ //# sourceMappingURL=pluggable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pluggable.js","sourceRoot":"","sources":["../../src/pluggable.js"],"names":[],"mappings":"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"}