56 lines
1.3 KiB
JavaScript

import Logger from "../logger"
import ISM_GIT_CLONE from "./git_clone"
import ISM_GIT_PULL from "./git_pull"
import ISM_GIT_RESET from "./git_reset"
import ISM_HTTP from "./http"
import ISM_TORRENT from "./torrent"
const InstallationStepsMethods = {
git_clone: ISM_GIT_CLONE,
git_pull: ISM_GIT_PULL,
git_reset: ISM_GIT_RESET,
http_file: ISM_HTTP,
torrent: ISM_TORRENT,
}
const StepsOrders = [
"git_clones",
"git_pull",
"git_reset",
"torrent",
"http_file",
]
export default async function processGenericSteps(pkg, steps, logger = Logger, abortController) {
logger.info(`Processing generic steps...`)
if (!Array.isArray(steps)) {
throw new Error(`Steps must be an array`)
}
if (steps.length === 0) {
return pkg
}
steps = steps.sort((a, b) => {
return StepsOrders.indexOf(a.type) - StepsOrders.indexOf(b.type)
})
for await (let step of steps) {
step.type = step.type.toLowerCase()
if (abortController?.signal?.aborted) {
return false
}
if (!InstallationStepsMethods[step.type]) {
throw new Error(`Unknown step: ${step.type}`)
}
await InstallationStepsMethods[step.type](pkg, step, logger, abortController)
}
return pkg
}