Files
tdir/cli.ts
2026-05-22 09:09:56 +02:00

78 lines
2.0 KiB
JavaScript

#!/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
}