UNPKG

@gameroom/cli

Version:

A command line tool for Gameroom

71 lines (55 loc) 2.15 kB
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) // } }