|
|
@@ -9,6 +9,7 @@ import {
|
|
|
removeBasePaths,
|
|
|
removeCwd,
|
|
|
replaceFileExtension,
|
|
|
+ getValueAtPath,
|
|
|
} from "./util.js"
|
|
|
import path from "path"
|
|
|
import process from "node:process"
|
|
|
@@ -58,7 +59,7 @@ async function runTask({ meta, config, jobId }) {
|
|
|
: { proxy: stateObject }
|
|
|
|
|
|
const {
|
|
|
- detail,
|
|
|
+ detail = {},
|
|
|
paths = [],
|
|
|
deps: processorDeps,
|
|
|
ref,
|
|
|
@@ -76,6 +77,7 @@ async function runTask({ meta, config, jobId }) {
|
|
|
const processorStateDeps = processorDeps?.state || []
|
|
|
const configPathDeps = config.deps?.paths || []
|
|
|
const configStateDeps = config.deps?.state || []
|
|
|
+ const stateSelectors = config.stateSelectors || []
|
|
|
await updateCache(
|
|
|
meta.opts.cacheDir,
|
|
|
jobId,
|
|
|
@@ -83,7 +85,7 @@ async function runTask({ meta, config, jobId }) {
|
|
|
...configPathDeps, ...processorPathDeps, config?.filePath,
|
|
|
].filter(item => !!item)),
|
|
|
[
|
|
|
- ...configStateDeps, ...processorStateDeps, ...(state?.accessed || []),
|
|
|
+ ...configStateDeps, ...stateSelectors, ...processorStateDeps, ...(state?.accessed || []),
|
|
|
].filter(item => !!item),
|
|
|
taskResult,
|
|
|
cache.updates,
|
|
|
@@ -116,7 +118,26 @@ async function expandFileTask(patternsToInclude, config, meta) {
|
|
|
}
|
|
|
return runTask({ meta, config: jobConfig, jobId: `${config.name} @ ${filePath}` })
|
|
|
}),
|
|
|
- )}
|
|
|
+ )
|
|
|
+}
|
|
|
+
|
|
|
+async function expandStateTask(stateToExpand, config, meta) {
|
|
|
+ const stateToProcess = stateToExpand.map(property => {
|
|
|
+ const values = getValueAtPath(meta, property)
|
|
|
+ const expandedValues = Array.isArray(values) ? values : Object.values(values)
|
|
|
+ return expandedValues.map((value, index) => ({ property, index, value }))
|
|
|
+ }).flat()
|
|
|
+
|
|
|
+ return await Promise.all(
|
|
|
+ stateToProcess.map(async (stateJob) => {
|
|
|
+ const jobConfig = {
|
|
|
+ ...config,
|
|
|
+ ...stateJob.value.detail,
|
|
|
+ }
|
|
|
+ return runTask({ meta, config: jobConfig, jobId: `${config.name} @ ${stateJob.property}:${stateJob.index}` })
|
|
|
+ }),
|
|
|
+ )
|
|
|
+}
|
|
|
|
|
|
export async function expandAndRunTask(meta, config) {
|
|
|
const includes = meta.opts?.include?.[config.name] || []
|
|
|
@@ -126,6 +147,10 @@ export async function expandAndRunTask(meta, config) {
|
|
|
return expandFileTask(patternsToInclude, config, meta)
|
|
|
}
|
|
|
|
|
|
+ if (config.stateSelectors) {
|
|
|
+ return expandStateTask(config.stateSelectors, config, meta)
|
|
|
+ }
|
|
|
+
|
|
|
const jobId = config.jobId || config.name
|
|
|
const taskResult = await runTask({ meta, config, jobId })
|
|
|
return [taskResult]
|