| 4269 | } |
| 4270 | |
| 4271 | public *traverse( |
| 4272 | source: GraphSource<any>, |
| 4273 | _input: Iterable<unknown>, |
| 4274 | context?: QueryContext, |
| 4275 | ): IterableIterator<unknown> { |
| 4276 | // Execute each statement sequentially |
| 4277 | // Each statement starts fresh with empty input (no statement chaining) |
| 4278 | const emptyInput: unknown[] = []; |
| 4279 | |
| 4280 | for (let i = 0; i < this.traversers.length; i++) { |
| 4281 | const traverser = this.traversers[i]!; |
| 4282 | for (const result of traverser.traverse(source, emptyInput, context)) { |
| 4283 | this.traversed++; |
| 4284 | this.emitted++; |
| 4285 | // Wrap result with statement index for identification |
| 4286 | if (result && typeof result === "object" && !Array.isArray(result)) { |
| 4287 | yield { ...result, _statementIndex: i }; |
| 4288 | } else { |
| 4289 | yield { _value: result, _statementIndex: i }; |
| 4290 | } |
| 4291 | } |
| 4292 | } |
| 4293 | } |
| 4294 | |
| 4295 | public override toStringTokens(): StepStringToken[] { |
| 4296 | const tokens: StepStringToken[] = [{ kind: "start" }, { kind: "name", value: this.name }]; |