From a67b6130f8cc4e60312eed6f5592c8778603e5f5 Mon Sep 17 00:00:00 2001 From: Julien Fontanet Date: Thu, 24 Nov 2016 12:33:24 +0100 Subject: [PATCH] feat(list objects): ability to select displayed properties Fixes #18 --- packages/xo-cli/index.js | 40 +++++++++++++++++++++++++++++++++++----- 1 file changed, 35 insertions(+), 5 deletions(-) diff --git a/packages/xo-cli/index.js b/packages/xo-cli/index.js index b6bf9afe4..8a37b376f 100755 --- a/packages/xo-cli/index.js +++ b/packages/xo-cli/index.js @@ -17,6 +17,7 @@ var forEach = require('lodash/forEach') var getKeys = require('lodash/keys') var got = require('got') var humanFormat = require('human-format') +var identity = require('lodash/identity') var isObject = require('lodash/isObject') var micromatch = require('micromatch') var multiline = require('multiline') @@ -57,6 +58,24 @@ function _startsWith (string, search) { return string.lastIndexOf(search, 0) === 0 } +var FLAG_RE = /^--([^=]+)(?:=([^]*))?$/ +function extractFlags (args) { + var flags = {} + + var i = 0 + var n = args.length + var matches + while (i < n && (matches = args[i].match(FLAG_RE))) { + var value = matches[2] + + flags[matches[1]] = value === undefined ? true : value + ++i + } + args.splice(0, i) + + return flags +} + var PARAM_RE = /^([^=]+)=([^]*)$/ function parseParameters (args) { var params = {} @@ -133,9 +152,15 @@ var help = wrap((function (pkg) { The patterns can be used to filter on command names. - $name --list-objects [=]... + $name --list-objects [--]… [=]... Returns a list of XO objects. + -- + Restricts displayed properties to those listed. + + = + Restricted displayed objects to those matching the patterns. + $name [=]... Executes a command on the current XO instance. @@ -265,9 +290,14 @@ function listCommands (args) { exports.listCommands = listCommands function listObjects (args) { - var sieve = args.length - ? parseParameters(args) - : null + var properties = getKeys(extractFlags(args)) + var filterProperties = properties.length + ? function (object) { + return pick(object, properties) + } + : identity + + var sieve = args.length && parseParameters(args) return connect().then(function getXoObjects (xo) { return xo.call('xo.getAllObjects') @@ -277,7 +307,7 @@ function listObjects (args) { const stdout = process.stdout stdout.write('[\n') for (var i = 0, n = objects.length; i < n;) { - stdout.write(JSON.stringify(objects[i], null, 2)) + stdout.write(JSON.stringify(filterProperties(objects[i]), null, 2)) stdout.write(++i < n ? ',\n' : '\n') } stdout.write(']')