juxscript 1.1.203 → 1.1.204

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"dataframe.d.ts","sourceRoot":"","sources":["dataframe.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dataframe.d.ts","sourceRoot":"","sources":["dataframe.ts"],"names":[],"mappings":"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"}
@@ -568,6 +568,11 @@ export class DataFrameComponent extends BaseComponent {
568
568
  sheetChunkSize: this._sheetChunkSize
569
569
  });
570
570
  const sheetNames = Object.keys(sheets);
571
+ if (sheetNames.length === 0) {
572
+ this._updateStatus(`No data found with header at row ${headerRow}. Try a different row.`, 'error');
573
+ this.state.loading = false;
574
+ return;
575
+ }
571
576
  await this._driver.store(this._rawFileData.file.name, sheets[sheetNames[0]], { source: this._rawFileData.file.name });
572
577
  if (sheetNames.length > 1) {
573
578
  this._renderMultiSheet(sheets, this._rawFileData.file.name);
@@ -579,6 +584,7 @@ export class DataFrameComponent extends BaseComponent {
579
584
  }
580
585
  catch (err) {
581
586
  this._updateStatus(`Error: ${err.message}`, 'error');
587
+ this.state.loading = false;
582
588
  }
583
589
  }
584
590
  }
@@ -760,6 +766,7 @@ export class DataFrameComponent extends BaseComponent {
760
766
  }
761
767
  catch (err) {
762
768
  this._updateStatus(`Error: ${err.message}`, 'error');
769
+ this.state.loading = false;
763
770
  }
764
771
  }
765
772
  }
@@ -691,6 +691,13 @@ export class DataFrameComponent extends BaseComponent<DataFrameState> {
691
691
  });
692
692
 
693
693
  const sheetNames = Object.keys(sheets);
694
+
695
+ if (sheetNames.length === 0) {
696
+ this._updateStatus(`No data found with header at row ${headerRow}. Try a different row.`, 'error');
697
+ this.state.loading = false;
698
+ return;
699
+ }
700
+
694
701
  await this._driver.store(this._rawFileData!.file.name, sheets[sheetNames[0]], { source: this._rawFileData!.file.name });
695
702
 
696
703
  if (sheetNames.length > 1) {
@@ -702,6 +709,7 @@ export class DataFrameComponent extends BaseComponent<DataFrameState> {
702
709
  this._reshapeModal!.closeModal();
703
710
  } catch (err: any) {
704
711
  this._updateStatus(`Error: ${err.message}`, 'error');
712
+ this.state.loading = false;
705
713
  }
706
714
  }
707
715
  }
@@ -905,6 +913,7 @@ export class DataFrameComponent extends BaseComponent<DataFrameState> {
905
913
  this._reshapeModal!.closeModal();
906
914
  } catch (err: any) {
907
915
  this._updateStatus(`Error: ${err.message}`, 'error');
916
+ this.state.loading = false;
908
917
  }
909
918
  }
910
919
  }
@@ -90,6 +90,9 @@ export declare class TabularDriver {
90
90
  /**
91
91
  * ✅ FIXED: Stream Excel file with optional headerRow override
92
92
  * headerRow is 0-based: 0 = first row, 1 = second row, etc.
93
+ *
94
+ * Uses direct cell access instead of sheet_to_json to avoid
95
+ * issues with blank row handling and sparse arrays.
93
96
  */
94
97
  streamFileMultiSheet(file: File, options?: ParseOptions): Promise<Record<string, DataFrame>>;
95
98
  private _splitLines;
@@ -1 +1 @@
1
- {"version":3,"file":"TabularDriver.d.ts","sourceRoot":"","sources":["TabularDriver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TabularDriver.d.ts","sourceRoot":"","sources":["TabularDriver.ts"],"names":[],"mappings":"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"}
@@ -489,6 +489,9 @@ export class TabularDriver {
489
489
  /**
490
490
  * ✅ FIXED: Stream Excel file with optional headerRow override
491
491
  * headerRow is 0-based: 0 = first row, 1 = second row, etc.
492
+ *
493
+ * Uses direct cell access instead of sheet_to_json to avoid
494
+ * issues with blank row handling and sparse arrays.
492
495
  */
493
496
  async streamFileMultiSheet(file, options = {}) {
494
497
  const { maxSheetSize = 100000, sheetChunkSize = 10000, onProgress, headerRow = 0 } = options;
@@ -528,80 +531,73 @@ export class TabularDriver {
528
531
  processedSheets++;
529
532
  continue;
530
533
  }
531
- // Use sheet_to_json with header:1 to get array-of-arrays
532
- // This is the most reliable way to read all data
533
- const rawData = XLSX.utils.sheet_to_json(worksheet, {
534
- header: 1,
535
- defval: null,
536
- blankrows: true,
537
- raw: true
538
- });
539
- if (rawData.length === 0) {
540
- processedSheets++;
541
- continue;
542
- }
543
- // Ensure all rows have the same number of columns
544
- const maxCols = Math.max(endCol - startCol + 1, ...rawData.map(r => (r ? r.length : 0)));
545
- // Pad short rows with nulls
546
- for (let i = 0; i < rawData.length; i++) {
547
- if (!rawData[i]) {
548
- rawData[i] = new Array(maxCols).fill(null);
549
- }
550
- else {
551
- while (rawData[i].length < maxCols) {
552
- rawData[i].push(null);
553
- }
534
+ // Direct cell reader - bypasses sheet_to_json completely
535
+ const readCellValue = (r, c) => {
536
+ const addr = XLSX.utils.encode_cell({ r, c });
537
+ const cell = worksheet[addr];
538
+ if (!cell)
539
+ return null;
540
+ // Prefer formatted string (w) for display, fall back to raw value (v)
541
+ if (cell.w !== undefined)
542
+ return cell.w;
543
+ if (cell.v !== undefined)
544
+ return cell.v;
545
+ return null;
546
+ };
547
+ const readRow = (r) => {
548
+ const vals = [];
549
+ for (let c = startCol; c <= endCol; c++) {
550
+ vals.push(readCellValue(r, c));
554
551
  }
555
- }
556
- // Validate headerRow is within bounds
557
- if (headerRow >= rawData.length) {
558
- console.warn(`[TabularDriver] headerRow ${headerRow} exceeds data length ${rawData.length}`);
552
+ return vals;
553
+ };
554
+ // Map headerRow (0-based user index) to actual sheet row
555
+ const headerSheetRow = startRow + headerRow;
556
+ console.log(`[TabularDriver] Sheet "${sheetName}": range=${ref}, startRow=${startRow}, endRow=${endRow}, startCol=${startCol}, endCol=${endCol}`);
557
+ console.log(`[TabularDriver] headerRow=${headerRow}, headerSheetRow=${headerSheetRow}`);
558
+ if (headerSheetRow > endRow) {
559
+ console.warn(`[TabularDriver] headerRow ${headerRow} (sheet row ${headerSheetRow}) exceeds endRow ${endRow}`);
559
560
  processedSheets++;
560
561
  continue;
561
562
  }
562
- // Debug: log what we see at the header row
563
- console.log(`[TabularDriver] Sheet "${sheetName}" headerRow=${headerRow}, rawData.length=${rawData.length}, maxCols=${maxCols}`);
564
- console.log(`[TabularDriver] Header row data:`, rawData[headerRow]);
565
- // Extract headers from the specified row
566
- const headerRowData = rawData[headerRow];
567
- const headers = [];
568
- for (let j = 0; j < maxCols; j++) {
569
- const h = headerRowData[j];
563
+ // Read header values directly from cells
564
+ const headerValues = readRow(headerSheetRow);
565
+ console.log(`[TabularDriver] Raw header values at sheet row ${headerSheetRow}:`, headerValues);
566
+ // Build headers array
567
+ const headers = headerValues.map((h, i) => {
570
568
  if (h === null || h === undefined || String(h).trim() === '') {
571
- headers.push(`__EMPTY${j > 0 ? '_' + j : ''}`);
572
- }
573
- else {
574
- headers.push(String(h).trim());
569
+ return `__EMPTY${i > 0 ? '_' + i : ''}`;
575
570
  }
576
- }
577
- // Count valid (non-empty) headers
571
+ return String(h).trim();
572
+ });
573
+ // Count valid headers
578
574
  const validHeaders = headers.filter(h => !h.startsWith('__EMPTY'));
579
- console.log(`[TabularDriver] Headers:`, headers);
580
- console.log(`[TabularDriver] Valid headers: ${validHeaders.length}/${headers.length}`);
575
+ console.log(`[TabularDriver] Headers (${validHeaders.length} valid / ${headers.length} total):`, headers);
581
576
  if (validHeaders.length === 0) {
582
- console.warn(`[TabularDriver] No valid headers found at row ${headerRow} in sheet "${sheetName}"`);
577
+ console.warn(`[TabularDriver] No valid headers found at row ${headerRow} (sheet row ${headerSheetRow}) in sheet "${sheetName}"`);
578
+ // Log surrounding rows for debugging
579
+ for (let debugR = Math.max(startRow, headerSheetRow - 2); debugR <= Math.min(endRow, headerSheetRow + 2); debugR++) {
580
+ console.log(`[TabularDriver] row ${debugR}:`, readRow(debugR));
581
+ }
583
582
  processedSheets++;
584
583
  continue;
585
584
  }
586
- // Build rows from data AFTER the header row
585
+ // Build data rows: everything after the header row
587
586
  const rows = [];
588
- for (let i = headerRow + 1; i < rawData.length; i++) {
589
- const rowData = rawData[i];
587
+ for (let r = headerSheetRow + 1; r <= endRow; r++) {
588
+ const rowData = readRow(r);
590
589
  // Skip completely empty rows
591
- if (!rowData)
592
- continue;
593
- const hasContent = rowData.some((cell) => cell !== null && cell !== undefined && String(cell).trim() !== '');
590
+ const hasContent = rowData.some(cell => cell !== null && cell !== undefined && String(cell).trim() !== '');
594
591
  if (!hasContent)
595
592
  continue;
596
593
  const row = {};
597
594
  for (let j = 0; j < headers.length; j++) {
598
- row[headers[j]] = j < rowData.length ? rowData[j] : null;
595
+ row[headers[j]] = rowData[j];
599
596
  }
600
597
  rows.push(row);
601
598
  }
602
- console.log(`[TabularDriver] Built ${rows.length} data rows`);
599
+ console.log(`[TabularDriver] Built ${rows.length} data rows for sheet "${sheetName}"`);
603
600
  if (rows.length > 0) {
604
- console.log(`[TabularDriver] First row keys:`, Object.keys(rows[0]));
605
601
  console.log(`[TabularDriver] First row:`, rows[0]);
606
602
  }
607
603
  if (rows.length > 0) {
@@ -609,6 +609,9 @@ export class TabularDriver {
609
609
  /**
610
610
  * ✅ FIXED: Stream Excel file with optional headerRow override
611
611
  * headerRow is 0-based: 0 = first row, 1 = second row, etc.
612
+ *
613
+ * Uses direct cell access instead of sheet_to_json to avoid
614
+ * issues with blank row handling and sparse arrays.
612
615
  */
613
616
  async streamFileMultiSheet(file: File, options: ParseOptions = {}): Promise<Record<string, DataFrame>> {
614
617
  const { maxSheetSize = 100000, sheetChunkSize = 10000, onProgress, headerRow = 0 } = options;
@@ -656,91 +659,83 @@ export class TabularDriver {
656
659
  continue;
657
660
  }
658
661
 
659
- // Use sheet_to_json with header:1 to get array-of-arrays
660
- // This is the most reliable way to read all data
661
- const rawData: any[][] = XLSX.utils.sheet_to_json(worksheet, {
662
- header: 1,
663
- defval: null,
664
- blankrows: true,
665
- raw: true
666
- });
662
+ // Direct cell reader - bypasses sheet_to_json completely
663
+ const readCellValue = (r: number, c: number): any => {
664
+ const addr = XLSX.utils.encode_cell({ r, c });
665
+ const cell = worksheet[addr];
666
+ if (!cell) return null;
667
+ // Prefer formatted string (w) for display, fall back to raw value (v)
668
+ if (cell.w !== undefined) return cell.w;
669
+ if (cell.v !== undefined) return cell.v;
670
+ return null;
671
+ };
667
672
 
668
- if (rawData.length === 0) {
669
- processedSheets++;
670
- continue;
671
- }
673
+ const readRow = (r: number): any[] => {
674
+ const vals: any[] = [];
675
+ for (let c = startCol; c <= endCol; c++) {
676
+ vals.push(readCellValue(r, c));
677
+ }
678
+ return vals;
679
+ };
672
680
 
673
- // Ensure all rows have the same number of columns
674
- const maxCols = Math.max(endCol - startCol + 1, ...rawData.map(r => (r ? r.length : 0)));
681
+ // Map headerRow (0-based user index) to actual sheet row
682
+ const headerSheetRow = startRow + headerRow;
675
683
 
676
- // Pad short rows with nulls
677
- for (let i = 0; i < rawData.length; i++) {
678
- if (!rawData[i]) {
679
- rawData[i] = new Array(maxCols).fill(null);
680
- } else {
681
- while (rawData[i].length < maxCols) {
682
- rawData[i].push(null);
683
- }
684
- }
685
- }
684
+ console.log(`[TabularDriver] Sheet "${sheetName}": range=${ref}, startRow=${startRow}, endRow=${endRow}, startCol=${startCol}, endCol=${endCol}`);
685
+ console.log(`[TabularDriver] headerRow=${headerRow}, headerSheetRow=${headerSheetRow}`);
686
686
 
687
- // Validate headerRow is within bounds
688
- if (headerRow >= rawData.length) {
689
- console.warn(`[TabularDriver] headerRow ${headerRow} exceeds data length ${rawData.length}`);
687
+ if (headerSheetRow > endRow) {
688
+ console.warn(`[TabularDriver] headerRow ${headerRow} (sheet row ${headerSheetRow}) exceeds endRow ${endRow}`);
690
689
  processedSheets++;
691
690
  continue;
692
691
  }
693
692
 
694
- // Debug: log what we see at the header row
695
- console.log(`[TabularDriver] Sheet "${sheetName}" headerRow=${headerRow}, rawData.length=${rawData.length}, maxCols=${maxCols}`);
696
- console.log(`[TabularDriver] Header row data:`, rawData[headerRow]);
693
+ // Read header values directly from cells
694
+ const headerValues = readRow(headerSheetRow);
695
+ console.log(`[TabularDriver] Raw header values at sheet row ${headerSheetRow}:`, headerValues);
697
696
 
698
- // Extract headers from the specified row
699
- const headerRowData = rawData[headerRow];
700
- const headers: string[] = [];
701
- for (let j = 0; j < maxCols; j++) {
702
- const h = headerRowData[j];
697
+ // Build headers array
698
+ const headers: string[] = headerValues.map((h: any, i: number) => {
703
699
  if (h === null || h === undefined || String(h).trim() === '') {
704
- headers.push(`__EMPTY${j > 0 ? '_' + j : ''}`);
705
- } else {
706
- headers.push(String(h).trim());
700
+ return `__EMPTY${i > 0 ? '_' + i : ''}`;
707
701
  }
708
- }
702
+ return String(h).trim();
703
+ });
709
704
 
710
- // Count valid (non-empty) headers
705
+ // Count valid headers
711
706
  const validHeaders = headers.filter(h => !h.startsWith('__EMPTY'));
712
- console.log(`[TabularDriver] Headers:`, headers);
713
- console.log(`[TabularDriver] Valid headers: ${validHeaders.length}/${headers.length}`);
707
+ console.log(`[TabularDriver] Headers (${validHeaders.length} valid / ${headers.length} total):`, headers);
714
708
 
715
709
  if (validHeaders.length === 0) {
716
- console.warn(`[TabularDriver] No valid headers found at row ${headerRow} in sheet "${sheetName}"`);
710
+ console.warn(`[TabularDriver] No valid headers found at row ${headerRow} (sheet row ${headerSheetRow}) in sheet "${sheetName}"`);
711
+ // Log surrounding rows for debugging
712
+ for (let debugR = Math.max(startRow, headerSheetRow - 2); debugR <= Math.min(endRow, headerSheetRow + 2); debugR++) {
713
+ console.log(`[TabularDriver] row ${debugR}:`, readRow(debugR));
714
+ }
717
715
  processedSheets++;
718
716
  continue;
719
717
  }
720
718
 
721
- // Build rows from data AFTER the header row
719
+ // Build data rows: everything after the header row
722
720
  const rows: Record<string, any>[] = [];
723
- for (let i = headerRow + 1; i < rawData.length; i++) {
724
- const rowData = rawData[i];
721
+ for (let r = headerSheetRow + 1; r <= endRow; r++) {
722
+ const rowData = readRow(r);
725
723
 
726
724
  // Skip completely empty rows
727
- if (!rowData) continue;
728
-
729
- const hasContent = rowData.some((cell: any) =>
725
+ const hasContent = rowData.some(cell =>
730
726
  cell !== null && cell !== undefined && String(cell).trim() !== ''
731
727
  );
732
728
  if (!hasContent) continue;
733
729
 
734
730
  const row: Record<string, any> = {};
735
731
  for (let j = 0; j < headers.length; j++) {
736
- row[headers[j]] = j < rowData.length ? rowData[j] : null;
732
+ row[headers[j]] = rowData[j];
737
733
  }
738
734
  rows.push(row);
739
735
  }
740
736
 
741
- console.log(`[TabularDriver] Built ${rows.length} data rows`);
737
+ console.log(`[TabularDriver] Built ${rows.length} data rows for sheet "${sheetName}"`);
742
738
  if (rows.length > 0) {
743
- console.log(`[TabularDriver] First row keys:`, Object.keys(rows[0]));
744
739
  console.log(`[TabularDriver] First row:`, rows[0]);
745
740
  }
746
741
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "juxscript",
3
- "version": "1.1.203",
3
+ "version": "1.1.204",
4
4
  "type": "module",
5
5
  "description": "A JavaScript UX authorship platform",
6
6
  "main": "index.js",