53 lines
1.3 KiB
JavaScript
53 lines
1.3 KiB
JavaScript
#!/usr/bin/env node
|
|
// mime-todo/bin/main.ts
|
|
import { parseTodoFile } from "../lib/file"
|
|
|
|
|
|
async function main() {
|
|
const [, , cmd, ...args] = process.argv
|
|
const todo = await parseTodoFile()
|
|
|
|
switch (cmd) {
|
|
case "issues":
|
|
for (const issue of todo.issues) {
|
|
console.log(`#${issue.id} [${issue.type}] (${issue.status}) ${issue.title}`)
|
|
}
|
|
break
|
|
|
|
case "sprints":
|
|
for (const sprint of todo.sprints) {
|
|
console.log(`${sprint.name}: ${sprint.start}..${sprint.end}`)
|
|
}
|
|
break
|
|
|
|
case "issues-in-sprint": {
|
|
const name = args.join(" ")
|
|
const sprint = todo.sprints.find(s => s.name === name)
|
|
if (!sprint) {
|
|
console.error(`Sprint not found: ${name}`)
|
|
process.exit(1)
|
|
}
|
|
const { start, end } = sprint
|
|
for (const issue of todo.issues) {
|
|
const ds = issue.dueStart ?? issue.dueEnd
|
|
const de = issue.dueEnd ?? issue.dueStart
|
|
if (!ds || !de) continue
|
|
if (ds <= end && de >= start) {
|
|
console.log(`#${issue.id} [${issue.type}] (${issue.status}) ${issue.title}`)
|
|
}
|
|
}
|
|
break
|
|
}
|
|
|
|
default:
|
|
console.log(`Usage:
|
|
todo list
|
|
todo sprints
|
|
todo issues-in-sprint <name>`)
|
|
}
|
|
}
|
|
|
|
main().catch(err => {
|
|
console.error(err)
|
|
process.exit(1)
|
|
})
|