reverse cli command
This commit is contained in:
77
cli.ts
Normal file
77
cli.ts
Normal file
@@ -0,0 +1,77 @@
|
||||
#!/usr/bin/env node
|
||||
import { reverseDir } from "./reverse"
|
||||
|
||||
function printHelp() {
|
||||
console.log(`tdir
|
||||
|
||||
Usage:
|
||||
tdir reverse <rendered-dir> <template-dir> [--map <path>]
|
||||
|
||||
Commands:
|
||||
reverse Rebuild template files from a rendered directory and reverse map
|
||||
|
||||
Options:
|
||||
--map Reverse map path. Defaults to <rendered-dir>/.tdir-map.json.
|
||||
Relative paths are resolved from <rendered-dir>.
|
||||
--help Show this help message.
|
||||
`)
|
||||
}
|
||||
|
||||
function parseReverseArgs(args: string[]) {
|
||||
const positional: string[] = []
|
||||
let mapPath: string | undefined
|
||||
|
||||
for (let i = 0; i < args.length; i++) {
|
||||
const arg = args[i]!
|
||||
if (arg === "--help" || arg === "-h") {
|
||||
return { help: true, positional, mapPath }
|
||||
}
|
||||
if (arg === "--map") {
|
||||
const value = args[++i]
|
||||
if (!value) throw new Error("Missing value for --map")
|
||||
mapPath = value
|
||||
continue
|
||||
}
|
||||
positional.push(arg)
|
||||
}
|
||||
|
||||
return { help: false, positional, mapPath }
|
||||
}
|
||||
|
||||
function main(argv: string[]) {
|
||||
const [command, ...args] = argv
|
||||
|
||||
if (!command || command === "--help" || command === "-h") {
|
||||
printHelp()
|
||||
return 0
|
||||
}
|
||||
|
||||
if (command !== "reverse") {
|
||||
throw new Error(`Unknown command: ${command}`)
|
||||
}
|
||||
|
||||
const parsed = parseReverseArgs(args)
|
||||
if (parsed.help) {
|
||||
printHelp()
|
||||
return 0
|
||||
}
|
||||
|
||||
const [renderedDir, templateDir] = parsed.positional
|
||||
if (!renderedDir || !templateDir || parsed.positional.length > 2) {
|
||||
throw new Error("Usage: tdir reverse <rendered-dir> <template-dir> [--map <path>]")
|
||||
}
|
||||
|
||||
const result = reverseDir(renderedDir, templateDir, { mapPath: parsed.mapPath })
|
||||
console.log(`Wrote ${result.filesWritten} file${result.filesWritten === 1 ? "" : "s"}`)
|
||||
for (const warning of result.warnings) {
|
||||
console.warn(`Warning: ${warning.outputPath}: ${warning.message}`)
|
||||
}
|
||||
return result.warnings.length > 0 ? 2 : 0
|
||||
}
|
||||
|
||||
try {
|
||||
process.exitCode = main(process.argv.slice(2))
|
||||
} catch (error) {
|
||||
console.error(error instanceof Error ? error.message : String(error))
|
||||
process.exitCode = 1
|
||||
}
|
||||
Reference in New Issue
Block a user