@gameroom/cli
Version:
A command line tool for Gameroom
71 lines (55 loc) • 2.15 kB
JavaScript
const pluralize = require('pluralize'),
{ models: { Selection } } = require('../emporium'),
{ getStorable, grGreen, parse, prettyPrint } = require('../helpers'),
printTable = require('../consoleIO'),
refs = require('../refs'),
{ spinner } = require('../refs')
module.exports = async ({ Model, resource, query, filter, sort, limit, offset, include, exclude }) => {
const { config } = refs
if (!pluralize.isPlural(resource)) resource = pluralize(resource)
spinner.text = `getting ${grGreen(resource)}`
spinner.start()
if (query) {
query = parse(query)
} else {
query = {}
}
if (filter) query.filter = parse(filter)
if (sort) query.sort = parse(sort)
if (limit) query.limit = parseInt(limit)
if (offset) query.offset = parseInt(offset)
if (!limit) query.limit = 100
let object = new Model()
let selections = await Selection.get()
for (let selection of selections) if (Object.keys(object).includes(`${selection.resource}_id`)) {
if (!query.filter) query.filter = {}
query.filter[`${selection.resource}_id`] = selection.object.id
}
if (query.filter) {
let and = []
for (let key of Object.keys(query.filter)) {
if (key === 'tags') {
for (let tag_name of query.filter.tags) and.push({ comparison: 'contains', key, value: tag_name })
} else {
and.push({comparison: 'equal_to', key, value: query.filter[key]})
}
}
query.filter = { and }
}
if (filter) spinner.info(`filter: ${filter}`)
if (sort) spinner.info(`sort: ${sort}`)
if (limit) spinner.info(`limit: ${limit}`)
if (offset) spinner.info(`offset: ${offset}`)
let objects = await Model.get(query)
if (objects.length === 1) resource = pluralize.singular(resource)
spinner.succeed(`got ${objects.length} ${grGreen(resource)}`).stop()
if (objects.length === 0) return
// if (table) {
// printTable(object, objects)
// } else {
if (include) objects.map(o => Object.keys(o).map(k => !include.includes(k) ? delete o[k] : null))
if (exclude) objects.map(o => exclude.map(e => delete o[e]))
// config.results = objects
prettyPrint(objects)
// }
}