in src/asl-utils/asl/asl.ts [77:113]
export function findStateById<T extends StateDefinition>(
asl: Asl<T>,
stateId: StateId,
branchPath: BranchPath = [],
): StateAddress<T> {
if (!isAslWithStates(asl)) {
return STATE_NOT_FOUND
}
const state = asl.States[stateId]
if (state) {
return { state, parent: asl, parentPath: branchPath, path: [...branchPath, stateId] }
}
for (const [childStateId, childState] of Object.entries(asl.States)) {
if (isMap(childState)) {
const iteratorProcessor = getProcessorDefinition<T, DistributedMapState<T>>(childState as DistributedMapState<T>)
const result = findStateById(iteratorProcessor, stateId, [...branchPath, childStateId])
if (result.state != null) {
return result
}
}
if (isParallel<T>(childState) && childState.Branches) {
for (let branchIndex = 0; branchIndex < childState.Branches.length; branchIndex++) {
const branch = childState.Branches[branchIndex]
const result = findStateById(branch, stateId, [...branchPath, childStateId, branchIndex])
if (result.state != null) {
return result
}
}
}
}
return STATE_NOT_FOUND
}