mirror of
https://github.com/windmill-labs/windmill.git
synced 2026-09-09 16:05:42 +00:00
29 lines
834 B
TypeScript
29 lines
834 B
TypeScript
import type { FlowModule } from '$lib/gen'
|
|
|
|
export function dfs<T>(modules: FlowModule[], f: (x: FlowModule) => T): T[] {
|
|
let result: T[] = []
|
|
for (const module of modules) {
|
|
if (module.value.type == 'forloopflow' || module.value.type == 'whileloopflow') {
|
|
result = result.concat(f(module))
|
|
result = result.concat(dfs(module.value.modules, f))
|
|
} else if (module.value.type == 'branchone') {
|
|
result = result.concat(f(module))
|
|
result = result.concat(
|
|
dfs(
|
|
module.value.branches
|
|
.map((b) => b.modules)
|
|
.flat()
|
|
.concat(module.value.default),
|
|
f
|
|
)
|
|
)
|
|
} else if (module.value.type == 'branchall') {
|
|
result = result.concat(f(module))
|
|
result = result.concat(dfs(module.value.branches.map((b) => b.modules).flat(), f))
|
|
} else {
|
|
result.push(f(module))
|
|
}
|
|
}
|
|
return result
|
|
}
|