penguins-eggs
Version:
A remaster system tool, compatible with Arch, Debian, Devuan, Ubuntu and others
126 lines (125 loc) • 4.4 kB
JavaScript
/**
* ./src/commands/wardrobe/list.ts
* penguins-eggs v.10.0.0 / ecmascript 2020
* author: Piero Proietti
* email: piero.proietti@gmail.com
* license: MIT
*/
import { Args, Command, Flags } from '@oclif/core';
// libraries
import chalk from 'chalk';
import yaml from 'js-yaml';
import fs from 'node:fs';
import path from 'node:path';
import Distro from '../../classes/distro.js';
import Utils from '../../classes/utils.js';
/**
*
*/
export default class List extends Command {
static args = {
repo: Args.string({ description: 'wardrobe to get', name: 'wardrobe', required: false })
};
// static args = [{ name: 'wardrobe', description: 'wardrobe', required: false }]
static description = 'list costumes and accessoires in wardrobe';
static examples = ['eggs wardrobe list', 'eggs wardrobe list your-wardrobe', 'eggs wardrobe list --distro arch'];
static flags = {
distro: Flags.string({ char: 'd', description: 'distro' }),
help: Flags.help({ char: 'h' }),
verbose: Flags.boolean({ char: 'v' })
};
async run() {
const { args, flags } = await this.parse(List);
let verbose = false;
if (flags.verbose) {
verbose = true;
}
const echo = Utils.setEcho(verbose);
Utils.titles(this.id + ' ' + this.argv);
/**
* wardobe
*/
let wardrobe = await Utils.wardrobe();
if (flags.distro === undefined && this.argv['0'] !== undefined) {
wardrobe = this.argv['0'];
}
/**
* seleziona distro
*/
let index = '';
const distro = new Distro();
switch (distro.distroLike) {
case 'Arch': {
index = 'arch';
break;
}
case 'Debian':
case 'Devuan': {
index = 'debian';
break;
}
case 'Ubuntu': {
index = 'ubuntu';
break;
}
// No default
}
if (flags.distro !== undefined) {
index = flags.distro;
}
index += '.yml';
console.log(chalk.green('wardrobe: ') + wardrobe);
console.log();
wardrobe = `${path.resolve(process.cwd(), wardrobe)}/`;
if (!fs.existsSync(wardrobe)) {
Utils.warning(`wardrobe: ${wardrobe} not found!`);
process.exit();
}
/**
* costumes
*/
const costumes = fs.readdirSync(`${wardrobe}costumes/`);
console.log(chalk.green('costumes: '));
for (const costume of costumes) {
if (fs.existsSync(`${wardrobe}costumes/${costume}/${index}`)) {
const materials = yaml.load(fs.readFileSync(`${wardrobe}costumes/${costume}/${index}`, 'utf8'));
console.log('- ' + chalk.cyan(costume) + ': ' + materials.description);
}
}
console.log();
/**
* accessories
*/
const accessories = fs.readdirSync(`${wardrobe}/accessories/`);
console.log(chalk.green('accessories: '));
for (const accessory of accessories) {
if (fs.existsSync(`${wardrobe}/accessories/${accessory}/${index}`)) {
const materials = yaml.load(fs.readFileSync(`${wardrobe}/accessories/${accessory}/${index}`, 'utf8'));
console.log('- ' + chalk.cyan(accessory) + ': ' + materials.description);
}
}
console.log();
/**
* servers
*/
const servers = fs.readdirSync(`${wardrobe}/servers/`);
console.log(chalk.green('servers: '));
for (const server of servers) {
if (fs.existsSync(`${wardrobe}/servers/${server}/${index}`)) {
const materials = yaml.load(fs.readFileSync(`${wardrobe}/servers/${server}/${index}`, 'utf8'));
console.log('- ' + chalk.cyan(server) + ': ' + materials.description);
}
}
console.log();
/**
* vendors
*/
const vendors = fs.readdirSync(`${wardrobe}/vendors/`);
console.log(chalk.green('vendors/themes: '));
for (const vendor of vendors) {
if (fs.existsSync(`${wardrobe}/vendors/${vendor}/theme`)) {
console.log('- ' + chalk.cyan(vendor));
}
}
}
}