{"version":3,"file":"parallel-groups.d.ts","sourceRoot":"","sources":["../../../../src/runs/background/parallel-groups.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAwBtE,wBAAgB,uBAAuB,CACtC,MAAM,EAAE,OAAO,EACf,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,GACpB,wBAAwB,EAAE,CAK5B;AAED,wBAAgB,sBAAsB,CACrC,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,wBAAwB,EAAE,GAChC,MAAM,CAmBR","sourcesContent":["import type { AsyncParallelGroupStatus } from \"../../shared/types.ts\";\n\nfunction isValidParallelGroup(\n\tgroup: unknown,\n\tstepCount: number,\n\tchainStepCount: number,\n): group is AsyncParallelGroupStatus {\n\tif (typeof group !== \"object\" || group === null) return false;\n\tconst { start, count, stepIndex } = group as Partial<AsyncParallelGroupStatus>;\n\treturn (\n\t\ttypeof start === \"number\" &&\n\t\ttypeof count === \"number\" &&\n\t\ttypeof stepIndex === \"number\" &&\n\t\tNumber.isInteger(start) &&\n\t\tNumber.isInteger(count) &&\n\t\tNumber.isInteger(stepIndex) &&\n\t\tstart >= 0 &&\n\t\tcount > 0 &&\n\t\tstepIndex >= 0 &&\n\t\tstepIndex < chainStepCount &&\n\t\tstart + count <= stepCount\n\t);\n}\n\nexport function normalizeParallelGroups(\n\tgroups: unknown,\n\tstepCount: number,\n\tchainStepCount: number,\n): AsyncParallelGroupStatus[] {\n\tif (!Array.isArray(groups)) return [];\n\treturn groups\n\t\t.filter((group): group is AsyncParallelGroupStatus => isValidParallelGroup(group, stepCount, chainStepCount))\n\t\t.sort((left, right) => left.stepIndex - right.stepIndex || left.start - right.start);\n}\n\nexport function flatToLogicalStepIndex(\n\tflatIndex: number,\n\tchainStepCount: number,\n\tgroups: AsyncParallelGroupStatus[],\n): number {\n\tlet logicalIndex = 0;\n\tlet cursor = 0;\n\tfor (const group of groups) {\n\t\twhile (cursor < group.start && logicalIndex < chainStepCount) {\n\t\t\tif (cursor === flatIndex) return logicalIndex;\n\t\t\tcursor++;\n\t\t\tlogicalIndex++;\n\t\t}\n\t\tif (flatIndex >= group.start && flatIndex < group.start + group.count) return group.stepIndex;\n\t\tcursor = group.start + group.count;\n\t\tlogicalIndex = group.stepIndex + 1;\n\t}\n\twhile (cursor <= flatIndex && logicalIndex < chainStepCount) {\n\t\tif (cursor === flatIndex) return logicalIndex;\n\t\tcursor++;\n\t\tlogicalIndex++;\n\t}\n\treturn Math.max(0, chainStepCount - 1);\n}\n"]}