UNPKG

@sanity/cli

Version:

Sanity CLI tool for managing Sanity installations, managing plugins, schemas and datasets

63 lines (50 loc) 1.75 kB
import {size, sortBy} from 'lodash' import {type CliCommandDefinition} from '../../types' const headings = ['id', 'members', 'name', 'url', 'created'] const helpText = ` Options --sort <field> Sort output by specified column --order <asc/desc> Sort output ascending/descending Examples # List projects sanity projects list # List projects sorted by member count, ascending sanity projects list --sort=members --order=asc ` const defaultFlags = { sort: 'created', order: 'desc', } const listProjectsCommand: CliCommandDefinition = { name: 'list', group: 'projects', signature: '', helpText, description: 'Lists projects connected to your user', action: async (args, context) => { const {apiClient, output, chalk} = context const flags = {...defaultFlags, ...args.extOptions} const client = apiClient({ requireUser: true, requireProject: false, }) const projects = await client.projects.list() const ordered = sortBy( projects.map(({displayName, id, members = [], createdAt}) => { const manage = `https://www.sanity.io/manage/project/${id}` return [id, members.length, displayName, manage, createdAt].map(String) }), [headings.indexOf(flags.sort)], ) const rows = flags.order === 'asc' ? ordered : ordered.reverse() const maxWidths = rows.reduce( (max, row) => row.map((current, index) => Math.max(size(current), max[index])), headings.map((str) => size(str)), ) const printRow = (row: string[]) => row.map((col, i) => `${col}`.padEnd(maxWidths[i])).join(' ') output.print(chalk.cyan(printRow(headings))) rows.forEach((row) => output.print(printRow(row))) }, } export default listProjectsCommand