Add commands help in rondo command
This commit is contained in:
parent
cd569887c0
commit
5bd2121a7d
@ -3,6 +3,7 @@ import { arg, argparse } from '@rondo.dev/argparse'
|
||||
import { Command } from './Command'
|
||||
import * as log from './log'
|
||||
import { resolve } from './resolve'
|
||||
import { getHelp } from './util/getHelp'
|
||||
|
||||
async function run(
|
||||
commandName: string,
|
||||
@ -25,19 +26,27 @@ async function start(
|
||||
exit = (code: number) => process.exit(code),
|
||||
) {
|
||||
const commands = await resolve()
|
||||
const choices = Object.keys(commands)
|
||||
.filter(c => !c.startsWith('_') && typeof commands[c] === 'function')
|
||||
|
||||
const desc = 'Commands:\n ' + choices
|
||||
.filter(choice => typeof commands[choice] === 'function')
|
||||
.map(choice => getHelp(commands[choice]))
|
||||
.join('\n ')
|
||||
|
||||
const {parse} = argparse({
|
||||
help: arg('boolean', {alias: 'h'}),
|
||||
debug: arg('boolean'),
|
||||
command: arg('string', {
|
||||
required: true,
|
||||
positional: true,
|
||||
choices: Object.keys(commands).filter(c => !c.startsWith('_')),
|
||||
choices,
|
||||
}),
|
||||
args: arg('string[]', {
|
||||
n: '*',
|
||||
positional: true,
|
||||
}),
|
||||
})
|
||||
}, desc)
|
||||
|
||||
let args: ReturnType<typeof parse> | null = null
|
||||
try {
|
||||
|
||||
@ -31,7 +31,7 @@ export async function add(...argv: string[]) {
|
||||
description: 'Print help message',
|
||||
}),
|
||||
// frontend: arg('boolean', {alias: 'f'}),
|
||||
}, 'Create a new library from template')
|
||||
}, add.help)
|
||||
const args = parse(argv)
|
||||
|
||||
const destDir = path.join('./packages', args.name)
|
||||
@ -63,3 +63,5 @@ export async function add(...argv: string[]) {
|
||||
pkg.dependencies[libraryName] = `file:packages/${args.name}`
|
||||
fs.writeFileSync(pkgFile, JSON.stringify(pkg, null, ' '))
|
||||
}
|
||||
add.help = 'Create a new package from template. ' +
|
||||
'Update root package.json with its definition'
|
||||
|
||||
@ -23,12 +23,13 @@ export async function build(...argv: string[]) {
|
||||
description: 'Watch for changes',
|
||||
}),
|
||||
help: arg('boolean', {alias: 'h'}),
|
||||
})
|
||||
}, build.help)
|
||||
const args = parse(argv)
|
||||
const path = args.esm ? join(args.project, 'tsconfig.esm.json') : args.project
|
||||
const watchArgs = args.watch ? ['--watch', '--preserveWatchOutput'] : []
|
||||
await run(tsc, ['--build', path, ...watchArgs])
|
||||
}
|
||||
build.help = 'Build or watch TypeScript project'
|
||||
|
||||
export async function test(...argv: string[]) {
|
||||
const {args} = argparse({
|
||||
@ -37,10 +38,11 @@ export async function test(...argv: string[]) {
|
||||
positional: true,
|
||||
}),
|
||||
help: arg('boolean', {alias: 'h'}),
|
||||
})
|
||||
}, test.help)
|
||||
.parse(argv)
|
||||
await run('jest', args)
|
||||
}
|
||||
test.help = 'Run jest tests'
|
||||
|
||||
export async function exec(...argv: string[]) {
|
||||
const {parse} = argparse({
|
||||
@ -53,7 +55,7 @@ export async function exec(...argv: string[]) {
|
||||
positional: true,
|
||||
}),
|
||||
help: arg('boolean', {alias: 'h'}),
|
||||
})
|
||||
}, exec.help)
|
||||
const args = parse(argv)
|
||||
const {file} = args
|
||||
const command = file.endsWith('.ts') ? 'ts-node' : 'node'
|
||||
@ -65,13 +67,14 @@ export async function exec(...argv: string[]) {
|
||||
] : []
|
||||
await run(command, [...nodeArgs, file, ...args.args])
|
||||
}
|
||||
exec.help = 'Execute a js or ts file using node or ts-node'
|
||||
|
||||
export async function createMigration(...argv: string[]) {
|
||||
const args = argparse({
|
||||
name: arg('string', {required: true, positional: true}),
|
||||
project: arg('string', {alias: 'p', default: '.'}),
|
||||
help: arg('boolean', {alias: 'h'}),
|
||||
})
|
||||
}, createMigration.help)
|
||||
.parse(argv)
|
||||
|
||||
const {name, project} = args
|
||||
@ -84,6 +87,7 @@ export async function createMigration(...argv: string[]) {
|
||||
}
|
||||
await run('ts-node', [typeorm, 'migration:generate', '--name', name], project)
|
||||
}
|
||||
createMigration.help = 'Generate a new TypeORM migration'
|
||||
|
||||
function findTsConfig(file: string): string {
|
||||
let lastPath = ''
|
||||
@ -110,6 +114,7 @@ async function browserify(path = '.', ...extraArgs: string[]) {
|
||||
...extraArgs,
|
||||
])
|
||||
}
|
||||
browserify.help = 'Build a client-side bundle using browserify'
|
||||
|
||||
async function uglify(path = '.') {
|
||||
await run('uglifyjs', [
|
||||
@ -121,18 +126,20 @@ async function uglify(path = '.') {
|
||||
join(path, 'build', 'client.prod.js'),
|
||||
])
|
||||
}
|
||||
uglify.help = 'Uglify bundle'
|
||||
|
||||
export async function js(...argv: string[]) {
|
||||
const args = argparse({
|
||||
path: arg('string', {positional: true, default: '.'}),
|
||||
watch: arg('boolean', {alias: 'w'}),
|
||||
help: arg('boolean', {alias: 'h'}),
|
||||
})
|
||||
}, js.help)
|
||||
.parse(argv)
|
||||
|
||||
const {path, watch} = args
|
||||
return watch ? watchJs(path) : buildJs(path)
|
||||
}
|
||||
js.help = 'Build or watch client-side js files'
|
||||
|
||||
async function buildJs(path: string) {
|
||||
await build(...['-p', path, '--esm'])
|
||||
@ -158,7 +165,7 @@ export async function css(...argv: string[]) {
|
||||
path: arg('string', {positional: true, default: '.'}),
|
||||
watch: arg('boolean', {alias: 'w'}),
|
||||
help: arg('boolean', {alias: 'h'}),
|
||||
})
|
||||
}, css.help)
|
||||
.parse(argv)
|
||||
|
||||
const {path, watch} = args
|
||||
@ -173,6 +180,7 @@ export async function css(...argv: string[]) {
|
||||
join(path, 'scss'),
|
||||
])
|
||||
}
|
||||
css.help = 'Build or watch sass files'
|
||||
|
||||
async function watchCss(path = '.') {
|
||||
await run('node-sass', [
|
||||
@ -212,3 +220,4 @@ export async function frontend(...argv: string[]) {
|
||||
]
|
||||
await Promise.all(promises)
|
||||
}
|
||||
frontend.help = 'Build all frontend files'
|
||||
|
||||
@ -15,7 +15,7 @@ export async function clean(...argv: string[]) {
|
||||
positional: true,
|
||||
}),
|
||||
help: arg('boolean', {alias: 'h'}),
|
||||
})
|
||||
}, clean.help)
|
||||
|
||||
const args = parse(argv)
|
||||
|
||||
@ -30,3 +30,4 @@ export async function clean(...argv: string[]) {
|
||||
await rimrafAsync(path)
|
||||
}
|
||||
}
|
||||
clean.help = 'Remove *.tsbuildinfo, lib/ and esm/ folders'
|
||||
|
||||
@ -9,7 +9,7 @@ export async function exportDir(...argv: string[]) {
|
||||
dir: arg('string', {default: 'src/migrations'}),
|
||||
out: arg('string', {default: 'src/migrations/index.ts'}),
|
||||
help: arg('boolean', {alias: 'h'}),
|
||||
})
|
||||
}, exportDir.help)
|
||||
.parse(argv)
|
||||
|
||||
const dir = join(args.project, args.dir)
|
||||
@ -26,3 +26,5 @@ export async function exportDir(...argv: string[]) {
|
||||
info('Writing to %s', out)
|
||||
fs.writeFileSync(join(dir, 'index.ts'), index)
|
||||
}
|
||||
exportDir.help = 'Create index.ts and generate import statements for files ' +
|
||||
'in the same directory'
|
||||
|
||||
@ -40,12 +40,12 @@ export function imports(...argv: string[]): string[] {
|
||||
readDirectory: ts.sys.readDirectory,
|
||||
useCaseSensitiveFileNames: true,
|
||||
}
|
||||
const configFile = ts.readConfigFile(configPath, ts.sys.readFile);
|
||||
const configFile = ts.readConfigFile(configPath, ts.sys.readFile)
|
||||
const parsedCommandLine = ts.parseJsonConfigFileContent(
|
||||
configFile.config,
|
||||
parseConfigHost,
|
||||
projectDir,
|
||||
);
|
||||
)
|
||||
|
||||
const program = ts.createProgram(
|
||||
parsedCommandLine.fileNames,
|
||||
@ -116,3 +116,6 @@ export function imports(...argv: string[]): string[] {
|
||||
|
||||
return []
|
||||
}
|
||||
imports.help = 'Find used module in a package, use root package.json to ' +
|
||||
'find dependency versions and update local package.json. Useful when using ' +
|
||||
'hoisting in lerna'
|
||||
|
||||
@ -62,7 +62,7 @@ export function intergen(...argv: string[]): string {
|
||||
debug: arg('boolean'),
|
||||
help: arg('boolean', {alias: 'h'}),
|
||||
output: arg('string', {alias: 'o', default: '-'}),
|
||||
}).parse(argv)
|
||||
}, intergen.help).parse(argv)
|
||||
|
||||
function debug(m: string, ...meta: Array<unknown>) {
|
||||
if (args.debug) {
|
||||
@ -379,3 +379,4 @@ export function intergen(...argv: string[]): string {
|
||||
}
|
||||
return value
|
||||
}
|
||||
intergen.help = 'Generate TypeScript interfaces from all found classes'
|
||||
|
||||
@ -15,7 +15,7 @@ export async function syncEsmConfig(...argv: string[]) {
|
||||
const args = argparse({
|
||||
packages: arg('string', {default: 'packages/', positional: true}),
|
||||
help: arg('boolean', {alias: 'h'}),
|
||||
}, `Synchronizes ${TSCONFIG_ESM_FILENAME} files with ${TSCONFIG_FILENAME}`)
|
||||
}, syncEsmConfig.help)
|
||||
.parse(argv)
|
||||
|
||||
const pkgDir = args.packages
|
||||
@ -53,3 +53,5 @@ export async function syncEsmConfig(...argv: string[]) {
|
||||
fs.writeFileSync(pkgFile, JSON.stringify(pkg, null, ' '))
|
||||
})
|
||||
}
|
||||
syncEsmConfig.help =
|
||||
`Synchronizes ${TSCONFIG_ESM_FILENAME} files with ${TSCONFIG_FILENAME}`
|
||||
|
||||
@ -1,13 +1,14 @@
|
||||
import * as fs from 'fs'
|
||||
import { arg, argparse } from '@rondo.dev/argparse'
|
||||
import _unpack from 'browser-unpack'
|
||||
import * as fs from 'fs'
|
||||
import * as path from 'path'
|
||||
import { argparse, arg } from '@rondo.dev/argparse'
|
||||
import { padLeft } from '../util'
|
||||
|
||||
export async function unpack(...argv: string[]) {
|
||||
const args = argparse({
|
||||
filename: arg('string', {positional: true, required: true}),
|
||||
help: arg('boolean'),
|
||||
}).parse(argv)
|
||||
}, unpack.help).parse(argv)
|
||||
|
||||
const file = fs.readFileSync(args.filename, 'utf8')
|
||||
const result = _unpack(file)
|
||||
@ -38,13 +39,6 @@ export async function unpack(...argv: string[]) {
|
||||
return text
|
||||
}
|
||||
|
||||
function padLeft(text: string, size: number) {
|
||||
while (text.length < size) {
|
||||
text = ' ' + text
|
||||
}
|
||||
return text
|
||||
}
|
||||
|
||||
sizes
|
||||
.forEach(item => {
|
||||
console.log(
|
||||
@ -58,12 +52,13 @@ export async function unpack(...argv: string[]) {
|
||||
padLeft((totalSize / 1024).toFixed(3) + ' kb', maxSizeLength),
|
||||
)
|
||||
}
|
||||
unpack.help = 'Show name and size of each module in browserify bundle'
|
||||
|
||||
export async function unpackInverseDeps(...argv: string[]) {
|
||||
const args = argparse({
|
||||
filename: arg('string', {positional: true, required: true}),
|
||||
help: arg('boolean'),
|
||||
}).parse(argv)
|
||||
}, unpackInverseDeps.help).parse(argv)
|
||||
|
||||
const file = fs.readFileSync(args.filename, 'utf8')
|
||||
const result = _unpack(file)
|
||||
@ -90,3 +85,5 @@ export async function unpackInverseDeps(...argv: string[]) {
|
||||
console.log('')
|
||||
})
|
||||
}
|
||||
unpackInverseDeps.help =
|
||||
'List inversed dependencies in a browserify bundle'
|
||||
|
||||
@ -85,3 +85,4 @@ export async function update(...argv: string[]) {
|
||||
info('Done! Do not forget to run npm install!')
|
||||
}
|
||||
}
|
||||
update.help = 'Update all dependencies to the latest versions'
|
||||
|
||||
10
packages/scripts/src/util/getHelp.ts
Normal file
10
packages/scripts/src/util/getHelp.ts
Normal file
@ -0,0 +1,10 @@
|
||||
import { padRight } from './pad'
|
||||
|
||||
export function getHelp(fn: (...args: string[]) => unknown): string {
|
||||
const name = fn.name
|
||||
const fn2 = fn as {help?: string}
|
||||
if (typeof fn2.help === 'string') {
|
||||
return padRight(name, 17) + ' ' + fn2.help
|
||||
}
|
||||
return name
|
||||
}
|
||||
1
packages/scripts/src/util/index.ts
Normal file
1
packages/scripts/src/util/index.ts
Normal file
@ -0,0 +1 @@
|
||||
export * from './pad'
|
||||
13
packages/scripts/src/util/pad.ts
Normal file
13
packages/scripts/src/util/pad.ts
Normal file
@ -0,0 +1,13 @@
|
||||
export function padLeft(text: string, size: number) {
|
||||
while (text.length < size) {
|
||||
text = ' ' + text
|
||||
}
|
||||
return text
|
||||
}
|
||||
|
||||
export function padRight(text: string, size: number) {
|
||||
while (text.length < size) {
|
||||
text = text + ' '
|
||||
}
|
||||
return text
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user