| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- #!/usr/bin/env node
- import * as defaultConfig from "./defaults.js"
- import { getConfig, processTask } from "./lib.js"
- import { performance } from "node:perf_hooks"
- import { getLogger } from "./logging.js"
- const startTime = performance.now()
- const { opts, tasks } = await getConfig() || { ...defaultConfig }
- const log = getLogger(opts.logLevel, "main")
- log.info(`Processing ${tasks.length} steps`)
- log.debug(`Running directory: ${opts.runDir}`)
- log.debug(`Output directory: ${opts.outDir}`)
- if (opts.cacheDir) {
- log.debug(`Cache directory: ${opts.cacheDir}`)
- } else {
- log.warn("Cache disabled")
- }
- const taskRunner = tasks.reduce(
- async (metaPromise, step) => {
- const tasks = Array.isArray(step) ? step : [step]
- const { meta, filesWritten } = await metaPromise
- const stepTasks = tasks.map(task => task.name)
- log.info(`Starting tasks: ${stepTasks.join(", ")}`)
- const stepResults = await Promise.all(tasks.map(async task => {
- const log = getLogger(opts.logLevel, task.name)
- const taskResult = await processTask(meta, task)
- log.trace(`taskResult: ${JSON.stringify(taskResult)}`)
- return taskResult
- }))
- const newState = stepResults.reduce((newState, taskResult) => {
- const resources = Object.keys(taskResult.resources).length > 0 ? {
- ...newState.meta.resources,
- [taskResult.name]: taskResult.resources,
- } : { ...newState.meta.resources }
- return {
- meta: {
- ...newState.meta,
- resources,
- },
- filesWritten: newState.filesWritten + taskResult.filesWritten,
- }
- }, { meta, filesWritten })
- return newState
- },
- Promise.resolve({ meta: { opts }, filesWritten: 0 }),
- )
- const finalState = await taskRunner
- log.trace(`Final state: ${JSON.stringify(finalState, null, 2)}`)
- const endTime = performance.now()
- const timeTaken = (endTime - startTime)
- const hrTime = timeTaken > 1000 ? `${Number.parseFloat(timeTaken / 1000).toFixed(2)}s` : `${Number.parseFloat(timeTaken).toFixed(2)}ms`
- log.info(`Completed ${tasks.length} steps in ${hrTime}, wrote ${finalState.filesWritten} files.`)
|