🌳
pt0/deployF/cliF/formatCliDescriptF.mts
1import * as _ from 'lodash-es'
3type CliDescriptObj = {
4 cliExplain?: string
5 cliOptA?: string[] | (() => string[])
6 cliDefaultOpt?: string
7 cliArgs?: string
8 cliCmt?: string
9 cliFmt?: string
10 cliSupportsEpScopes?: boolean
11 options?: Record<string, string>
12 description?: string
15export const formatScopedCliDescript = ({actionName, cliDescript, examplePath}: {actionName: string, cliDescript: CliDescriptObj, examplePath?: string}) => {
16 const explainStr = cliDescript.cliExplain || ''
17 const cleanExplain = explainStr.replace(/\u001b\[\d+m/g, '')
18 return cleanExplain || `run ${actionName} on entrypoints`
21const resolveCliOptA = (cliOptA: string[] | (() => string[]) | undefined) => _.isFunction(cliOptA) ? cliOptA() : cliOptA
23export const formatCliDescript = (cliDescript: string | CliDescriptObj | (() => string | CliDescriptObj) | undefined, actionName: string, examplePath?: string): string | CliDescriptObj | null => {
24 if (!cliDescript) return null
25 if (_.isFunction(cliDescript)) cliDescript = cliDescript()
27 if (!_.isObject(cliDescript)) return cliDescript as string
28 if (!cliDescript.cliOptA && !cliDescript.options) return cliDescript.cliExplain ?? cliDescript
30 if (cliDescript.cliSupportsEpScopes) {
31 return formatScopedCliDescript({actionName, cliDescript, examplePath})
32 }
34 if (cliDescript.cliFmt === 'compact') {
35 const parts = _.map(resolveCliOptA(cliDescript.cliOptA), (optName: string) =>
36 optName === cliDescript.cliDefaultOpt
37 ? `${actionName}[:${optName}] (default)`
38 : `${actionName}:${optName}`
39 )
40 const argsStr = (cliDescript as CliDescriptObj).cliArgs ? ` ${(cliDescript as CliDescriptObj).cliArgs}` : ''
41 const cliComment = (cliDescript as CliDescriptObj).cliCmt ? ` # ${(cliDescript as CliDescriptObj).cliCmt}` : ''
42 return `${parts.join(' ')}${argsStr}${cliComment}`
43 }
45 if (cliDescript.description) {
46 const optStrs = _.map(cliDescript.options, (desc: string, name: string) => `${actionName}:${name} (${desc})`)
47 return `${cliDescript.description}. Options: ${optStrs.join(', ')}`
48 }
50 return cliDescript