This changes some type definitions so that sheetjs accepts readonly arrays in places where it's not mutating the array anyway.
For example, without this change, the following code would not compile:
```
const myData: ReadonlyArray<{ col1: string, col2: string}> = [{ col1: 'a', col2: 'b' }];
const myWorksheet = utils. json_to_sheet(myData);
```
This theoretically should work - sheetjs isn't mutating the myData array anyway, so it should accept a readonly array as input.
Signed-off-by: Sweater-Baron <sweater-baron@noreply.git.sheetjs.com>
**Title:**
Fix for Incorrect Row Indexing and Infinite Loop in stream.to_json Function
**Description:**
This pull request addresses two key issues in the `stream.to_json` function of the SheetJS library:
1. **Infinite Loop**: Previously, when a row was hidden, the function skipped processing the current row without incrementing the row counter `R`, resulting in an infinite loop during execution.
2. **Incorrect Row Indexing**: The row index was incorrectly accessed using a one-based index, whereas the actual row index was zero-based. This led to unintended hidden rows being included in the stream and skipping of subsequent non-hidden rows.
**Changes:**
- Modified the hidden row check to use the correct zero-based indexing
- Incremented `R` after identifying a hidden row to ensure the loop progresses to the next row.
- Ensured that the stream correctly processes all rows, skipping hidden rows without affecting subsequent rows.
**Testing:**
- Validated that the `stream.to_json` function no longer enters an infinite loop when encountering hidden rows.
- Confirmed that the correct rows are processed and pushed to the stream, with hidden rows being appropriately skipped.
**Impact:**
This fix enhances the reliability of the SheetJS library, ensuring accurate data streaming from spreadsheets without infinite loops or incorrect row handling.
**Checklist:**
- [x] Code changes have been tested locally.
- [x] The changes adhere to the project's coding standards and guidelines.
**Additional Information:**
These changes are crucial for maintaining the library's functionality in production environments, where precise data handling is essential.
**References:**
Closes#3176.
---
Reviewed-on: sheetjs/sheetjs#3178
Co-authored-by: deepak-negi-web <deepak-negi-web@noreply.git.sheetjs.com>
Co-committed-by: deepak-negi-web <deepak-negi-web@noreply.git.sheetjs.com>