From cf17689a6ef99dd903c5cc8c6af8ee52237e858f Mon Sep 17 00:00:00 2001 From: GP Date: Mon, 26 Jul 2021 17:03:40 +0530 Subject: [PATCH] feat(script): combined descriptions for composite scripts --- src/scripts_config.ts | 2 -- src/scripts_info.ts | 22 ++++++++++++++++++---- src/util.ts | 6 +++++- 3 files changed, 23 insertions(+), 7 deletions(-) diff --git a/src/scripts_config.ts b/src/scripts_config.ts index a0dc404..b577a1f 100644 --- a/src/scripts_config.ts +++ b/src/scripts_config.ts @@ -40,8 +40,6 @@ export interface ScriptObject extends ScriptOptions { * A textual description of what this script does. * This will be shown in the list of available scripts, * when calling `vr` without arguments. - * - * **Note** nested `ScriptObject`'s `desc` are ignored */ desc?: string; /** diff --git a/src/scripts_info.ts b/src/scripts_info.ts index 7b7474f..8371d1b 100644 --- a/src/scripts_info.ts +++ b/src/scripts_info.ts @@ -1,7 +1,11 @@ import { blue, bold, gray, red } from "../deps.ts"; -import { ScriptDefinition, ScriptsConfiguration } from "./scripts_config.ts"; +import { + ScriptDefinition, + ScriptObject, + ScriptsConfiguration, +} from "./scripts_config.ts"; import { flattenCommands, normalizeScript } from "./normalize_script.ts"; -import { isScriptObject } from "./util.ts"; +import { isNonParallelCompositeScript, isScriptObject } from "./util.ts"; export function printScriptsInfo(config: ScriptsConfiguration) { const scripts = Object.entries(config.scripts); @@ -26,16 +30,26 @@ ${ function scriptInfo(script: ScriptDefinition): string { const info = []; + const indent = " ".repeat(4); if (isScriptObject(script)) { if (script.desc) info.push(` ${script.desc}`); if (script.gitHook) { - info.push(` ${gray("Runs at")} ${red(script.gitHook)}`); + info.push(`${indent}${gray("Runs at")} ${red(script.gitHook)}`); } + } else if (isNonParallelCompositeScript(script)) { + const scripts = script.filter((s) => isScriptObject(s)) as Array< + ScriptObject + >; + const combinedDescriptions = scripts.flatMap((s) => { + if (typeof s === "string") return []; + return s.desc; + }).filter(Boolean); + info.push(`${indent}${combinedDescriptions.join(", ")}`); } const commands = flattenCommands(normalizeScript(script, {})); info.push( gray( - ` $ ${commands.map((c) => c.cmd).slice(0, 3).join(", ")}${ + `${indent}$ ${commands.map((c) => c.cmd).slice(0, 3).join(", ")}${ commands.length > 3 ? "..." : "" }`, ), diff --git a/src/util.ts b/src/util.ts index 1e0314f..1a26f86 100644 --- a/src/util.ts +++ b/src/util.ts @@ -1,4 +1,4 @@ -import { ParallelScripts, ScriptObject } from "./scripts_config.ts"; +import { ParallelScripts, Script, ScriptObject } from "./scripts_config.ts"; export type OneOrMore = T | T[]; @@ -44,4 +44,8 @@ export const isScriptObject = (script: any): script is ScriptObject => export const isParallelScripts = (script: any): script is ParallelScripts => script instanceof Object && "pll" in script; +export const isNonParallelCompositeScript = ( + script: any, +): script is Array