| 1565 | * @since 2.0.0 |
| 1566 | */ |
| 1567 | export const range = ( |
| 1568 | min: number, |
| 1569 | max: number, |
| 1570 | chunkSize = Channel.DefaultChunkSize |
| 1571 | ): Stream<number> => |
| 1572 | min > max ? empty : fromPull(Effect.sync(() => { |
| 1573 | const size = Math.max(1, chunkSize) |
| 1574 | let start = min |
| 1575 | let done = false |
| 1576 | return Effect.suspend(() => { |
| 1577 | if (done) return Cause.done() |
| 1578 | const remaining = max - start + 1 |
| 1579 | if (remaining > size) { |
| 1580 | const chunk = Arr.range(start, start + size - 1) |
| 1581 | start += size |
| 1582 | return Effect.succeed(chunk) |
| 1583 | } |
| 1584 | const chunk = Arr.range(start, start + remaining - 1) |
| 1585 | done = true |
| 1586 | return Effect.succeed(chunk) |
| 1587 | }) |
| 1588 | })) |
| 1589 | |
| 1590 | /** |
| 1591 | * The stream that never produces any value or fails with any error. |