Skip to content

Commit

Permalink
feat(service): add --format json|human option
Browse files Browse the repository at this point in the history
Fixes #589
  • Loading branch information
pdesoyres-cc authored and hsablonniere committed Jul 1, 2024
1 parent 8dd42c9 commit 0f23885
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 6 deletions.
1 change: 1 addition & 0 deletions bin/clever.js
Original file line number Diff line number Diff line change
Expand Up @@ -1015,6 +1015,7 @@ function run () {
const serviceCommands = cliparse.command('service', {
description: 'Manage service dependencies',
options: [opts.alias, opts.appIdOrName, opts.onlyApps, opts.onlyAddons, opts.showAll],
privateOptions: [opts.humanJsonOutputFormat],
commands: [serviceLinkAppCommand, serviceUnlinkAppCommand, serviceLinkAddonCommand, serviceUnlinkAddonCommand],
}, service('list'));

Expand Down
38 changes: 33 additions & 5 deletions src/commands/service.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,23 +5,51 @@ const Application = require('../models/application.js');
const Logger = require('../logger.js');

async function list (params) {
const { alias, app: appIdOrName, 'show-all': showAll, 'only-apps': onlyApps, 'only-addons': onlyAddons } = params.options;
const { alias, app: appIdOrName, 'show-all': showAll, 'only-apps': onlyApps, 'only-addons': onlyAddons, format } = params.options;
if (onlyApps && onlyAddons) {
throw new Error('--only-apps and --only-addons are mutually exclusive');
}

const { ownerId, appId } = await Application.resolveId(appIdOrName, alias);

const formattedServices = {};

if (!onlyAddons) {
const apps = await Application.listDependencies(ownerId, appId, showAll);
Logger.println('Applications:');
apps.forEach(({ isLinked, name }) => Logger.println(`${isLinked ? '*' : ' '} ${name}`));
formattedServices.applications = apps.map((app) => ({
id: app.id,
name: app.name,
isLinked: app.isLinked,
}));
}

if (!onlyApps) {
const addons = await Addon.list(ownerId, appId, showAll);
Logger.println('Addons:');
addons.forEach(({ isLinked, name, realId }) => Logger.println(`${isLinked ? '*' : ' '} ${name} (${realId})`));
formattedServices.addons = addons.map((addon) => ({
id: addon.id,
realId: addon.realId,
name: addon.name,
isLinked: addon.isLinked,
}));
}

switch (format) {
case 'json': {
Logger.printJson(formattedServices);
break;
}
case 'human':
default: {
if (formattedServices.applications) {
Logger.println('Applications:');
formattedServices.applications.forEach(({ isLinked, name }) => Logger.println(`${isLinked ? '*' : ' '} ${name}`));
}

if (formattedServices.addons) {
Logger.println('Addons:');
formattedServices.addons.forEach(({ isLinked, name, realId }) => Logger.println(`${isLinked ? '*' : ' '} ${name} (${realId})`));
}
}
}
}

Expand Down
2 changes: 1 addition & 1 deletion src/models/application.js
Original file line number Diff line number Diff line change
Expand Up @@ -273,7 +273,7 @@ async function listDependencies (ownerId, appId, showAll) {
const applicationDeps = await application.getAllDependencies({ id: ownerId, appId }).then(sendToApi);

if (!showAll) {
return applicationDeps;
return applicationDeps.map((app) => ({ ...app, isLinked: true }));
}

const allApps = await application.getAll({ id: ownerId }).then(sendToApi);
Expand Down

0 comments on commit 0f23885

Please sign in to comment.