juxscript 1.1.202 → 1.1.203

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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"}
@@ -372,9 +372,23 @@ export class DataFrameComponent extends BaseComponent {
372
372
  this.state.sourceName = sourceName;
373
373
  this.state.rowCount = df.height;
374
374
  this.state.colCount = df.width;
375
- const cleanCols = df.columns.filter(c => !c.startsWith('__EMPTY'));
376
- if (cleanCols.length < df.columns.length) {
377
- this._df = df.select(...cleanCols);
375
+ // Only strip __EMPTY columns that are ENTIRELY null/empty
376
+ const cols = df.columns;
377
+ const rows = df.toRows();
378
+ const emptyColumns = cols.filter(c => {
379
+ if (!c.startsWith('__EMPTY'))
380
+ return false;
381
+ // Check if ALL values in this column are null/empty
382
+ return rows.every(row => {
383
+ const val = row[c];
384
+ return val === null || val === undefined || String(val).trim() === '';
385
+ });
386
+ });
387
+ if (emptyColumns.length > 0) {
388
+ const keepCols = cols.filter(c => !emptyColumns.includes(c));
389
+ if (keepCols.length > 0) {
390
+ this._df = df.select(...keepCols);
391
+ }
378
392
  }
379
393
  if (this._table && this._df) {
380
394
  const columnDefs = this._df.columns.map(col => ({ key: col, label: col }));
@@ -463,9 +463,23 @@ export class DataFrameComponent extends BaseComponent<DataFrameState> {
463
463
  this.state.rowCount = df.height;
464
464
  this.state.colCount = df.width;
465
465
 
466
- const cleanCols = df.columns.filter(c => !c.startsWith('__EMPTY'));
467
- if (cleanCols.length < df.columns.length) {
468
- this._df = df.select(...cleanCols);
466
+ // Only strip __EMPTY columns that are ENTIRELY null/empty
467
+ const cols = df.columns;
468
+ const rows = df.toRows();
469
+ const emptyColumns = cols.filter(c => {
470
+ if (!c.startsWith('__EMPTY')) return false;
471
+ // Check if ALL values in this column are null/empty
472
+ return rows.every(row => {
473
+ const val = row[c];
474
+ return val === null || val === undefined || String(val).trim() === '';
475
+ });
476
+ });
477
+
478
+ if (emptyColumns.length > 0) {
479
+ const keepCols = cols.filter(c => !emptyColumns.includes(c));
480
+ if (keepCols.length > 0) {
481
+ this._df = df.select(...keepCols);
482
+ }
469
483
  }
470
484
 
471
485
  if (this._table && this._df) {
@@ -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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"}
@@ -520,69 +520,90 @@ export class TabularDriver {
520
520
  continue;
521
521
  }
522
522
  const range = XLSX.utils.decode_range(ref);
523
- const startRow = range.s.r; // first row index
524
- const endRow = range.e.r; // last row index
525
- const startCol = range.s.c; // first col index
526
- const endCol = range.e.c; // last col index
527
- const numCols = endCol - startCol + 1;
523
+ const startRow = range.s.r;
524
+ const endRow = range.e.r;
525
+ const startCol = range.s.c;
526
+ const endCol = range.e.c;
528
527
  if (endRow < startRow) {
529
528
  processedSheets++;
530
529
  continue;
531
530
  }
532
- // Helper: read a single cell value from the worksheet
533
- const getCellValue = (r, c) => {
534
- const cellAddress = XLSX.utils.encode_cell({ r, c });
535
- const cell = worksheet[cellAddress];
536
- if (!cell)
537
- return null;
538
- // Use formatted value (v = raw, w = formatted text)
539
- return cell.v !== undefined ? cell.v : null;
540
- };
541
- // Helper: read an entire row as an array
542
- const readRow = (r) => {
543
- const vals = [];
544
- for (let c = startCol; c <= endCol; c++) {
545
- vals.push(getCellValue(r, c));
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);
546
549
  }
547
- return vals;
548
- };
549
- // The actual row in the sheet for the header
550
- const headerSheetRow = startRow + headerRow;
551
- if (headerSheetRow > endRow) {
552
- console.warn(`[TabularDriver] headerRow ${headerRow} exceeds sheet range (max row: ${endRow - startRow})`);
550
+ else {
551
+ while (rawData[i].length < maxCols) {
552
+ rawData[i].push(null);
553
+ }
554
+ }
555
+ }
556
+ // Validate headerRow is within bounds
557
+ if (headerRow >= rawData.length) {
558
+ console.warn(`[TabularDriver] headerRow ${headerRow} exceeds data length ${rawData.length}`);
553
559
  processedSheets++;
554
560
  continue;
555
561
  }
556
- // Read header row values directly from cells
557
- const headerValues = readRow(headerSheetRow);
558
- // Build headers array
559
- const headers = headerValues.map((h, i) => {
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];
560
570
  if (h === null || h === undefined || String(h).trim() === '') {
561
- return `__EMPTY${i > 0 ? '_' + i : ''}`;
571
+ headers.push(`__EMPTY${j > 0 ? '_' + j : ''}`);
562
572
  }
563
- return String(h).trim();
564
- });
565
- // Ensure we have at least one valid header
573
+ else {
574
+ headers.push(String(h).trim());
575
+ }
576
+ }
577
+ // Count valid (non-empty) headers
566
578
  const validHeaders = headers.filter(h => !h.startsWith('__EMPTY'));
579
+ console.log(`[TabularDriver] Headers:`, headers);
580
+ console.log(`[TabularDriver] Valid headers: ${validHeaders.length}/${headers.length}`);
567
581
  if (validHeaders.length === 0) {
568
582
  console.warn(`[TabularDriver] No valid headers found at row ${headerRow} in sheet "${sheetName}"`);
569
583
  processedSheets++;
570
584
  continue;
571
585
  }
572
- // Build data rows: everything after the header row
586
+ // Build rows from data AFTER the header row
573
587
  const rows = [];
574
- for (let r = headerSheetRow + 1; r <= endRow; r++) {
575
- const rowData = readRow(r);
588
+ for (let i = headerRow + 1; i < rawData.length; i++) {
589
+ const rowData = rawData[i];
576
590
  // Skip completely empty rows
577
- const hasContent = rowData.some(cell => cell !== null && cell !== undefined && String(cell).trim() !== '');
591
+ if (!rowData)
592
+ continue;
593
+ const hasContent = rowData.some((cell) => cell !== null && cell !== undefined && String(cell).trim() !== '');
578
594
  if (!hasContent)
579
595
  continue;
580
596
  const row = {};
581
597
  for (let j = 0; j < headers.length; j++) {
582
- row[headers[j]] = rowData[j] !== undefined ? rowData[j] : null;
598
+ row[headers[j]] = j < rowData.length ? rowData[j] : null;
583
599
  }
584
600
  rows.push(row);
585
601
  }
602
+ console.log(`[TabularDriver] Built ${rows.length} data rows`);
603
+ if (rows.length > 0) {
604
+ console.log(`[TabularDriver] First row keys:`, Object.keys(rows[0]));
605
+ console.log(`[TabularDriver] First row:`, rows[0]);
606
+ }
586
607
  if (rows.length > 0) {
587
608
  sheets[sheetName] = new DataFrame(rows);
588
609
  }
@@ -646,81 +646,104 @@ export class TabularDriver {
646
646
  }
647
647
 
648
648
  const range = XLSX.utils.decode_range(ref);
649
- const startRow = range.s.r; // first row index
650
- const endRow = range.e.r; // last row index
651
- const startCol = range.s.c; // first col index
652
- const endCol = range.e.c; // last col index
653
- const numCols = endCol - startCol + 1;
649
+ const startRow = range.s.r;
650
+ const endRow = range.e.r;
651
+ const startCol = range.s.c;
652
+ const endCol = range.e.c;
654
653
 
655
654
  if (endRow < startRow) {
656
655
  processedSheets++;
657
656
  continue;
658
657
  }
659
658
 
660
- // Helper: read a single cell value from the worksheet
661
- const getCellValue = (r: number, c: number): any => {
662
- const cellAddress = XLSX.utils.encode_cell({ r, c });
663
- const cell = worksheet[cellAddress];
664
- if (!cell) return null;
665
- // Use formatted value (v = raw, w = formatted text)
666
- return cell.v !== undefined ? cell.v : null;
667
- };
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
+ });
668
667
 
669
- // Helper: read an entire row as an array
670
- const readRow = (r: number): any[] => {
671
- const vals: any[] = [];
672
- for (let c = startCol; c <= endCol; c++) {
673
- vals.push(getCellValue(r, c));
674
- }
675
- return vals;
676
- };
668
+ if (rawData.length === 0) {
669
+ processedSheets++;
670
+ continue;
671
+ }
672
+
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)));
677
675
 
678
- // The actual row in the sheet for the header
679
- const headerSheetRow = startRow + headerRow;
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
+ }
680
686
 
681
- if (headerSheetRow > endRow) {
682
- console.warn(`[TabularDriver] headerRow ${headerRow} exceeds sheet range (max row: ${endRow - startRow})`);
687
+ // Validate headerRow is within bounds
688
+ if (headerRow >= rawData.length) {
689
+ console.warn(`[TabularDriver] headerRow ${headerRow} exceeds data length ${rawData.length}`);
683
690
  processedSheets++;
684
691
  continue;
685
692
  }
686
693
 
687
- // Read header row values directly from cells
688
- const headerValues = readRow(headerSheetRow);
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]);
689
697
 
690
- // Build headers array
691
- const headers: string[] = headerValues.map((h: any, i: number) => {
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];
692
703
  if (h === null || h === undefined || String(h).trim() === '') {
693
- return `__EMPTY${i > 0 ? '_' + i : ''}`;
704
+ headers.push(`__EMPTY${j > 0 ? '_' + j : ''}`);
705
+ } else {
706
+ headers.push(String(h).trim());
694
707
  }
695
- return String(h).trim();
696
- });
708
+ }
697
709
 
698
- // Ensure we have at least one valid header
710
+ // Count valid (non-empty) headers
699
711
  const validHeaders = headers.filter(h => !h.startsWith('__EMPTY'));
712
+ console.log(`[TabularDriver] Headers:`, headers);
713
+ console.log(`[TabularDriver] Valid headers: ${validHeaders.length}/${headers.length}`);
714
+
700
715
  if (validHeaders.length === 0) {
701
716
  console.warn(`[TabularDriver] No valid headers found at row ${headerRow} in sheet "${sheetName}"`);
702
717
  processedSheets++;
703
718
  continue;
704
719
  }
705
720
 
706
- // Build data rows: everything after the header row
721
+ // Build rows from data AFTER the header row
707
722
  const rows: Record<string, any>[] = [];
708
- for (let r = headerSheetRow + 1; r <= endRow; r++) {
709
- const rowData = readRow(r);
723
+ for (let i = headerRow + 1; i < rawData.length; i++) {
724
+ const rowData = rawData[i];
710
725
 
711
726
  // Skip completely empty rows
712
- const hasContent = rowData.some(cell =>
727
+ if (!rowData) continue;
728
+
729
+ const hasContent = rowData.some((cell: any) =>
713
730
  cell !== null && cell !== undefined && String(cell).trim() !== ''
714
731
  );
715
732
  if (!hasContent) continue;
716
733
 
717
734
  const row: Record<string, any> = {};
718
735
  for (let j = 0; j < headers.length; j++) {
719
- row[headers[j]] = rowData[j] !== undefined ? rowData[j] : null;
736
+ row[headers[j]] = j < rowData.length ? rowData[j] : null;
720
737
  }
721
738
  rows.push(row);
722
739
  }
723
740
 
741
+ console.log(`[TabularDriver] Built ${rows.length} data rows`);
742
+ if (rows.length > 0) {
743
+ console.log(`[TabularDriver] First row keys:`, Object.keys(rows[0]));
744
+ console.log(`[TabularDriver] First row:`, rows[0]);
745
+ }
746
+
724
747
  if (rows.length > 0) {
725
748
  sheets[sheetName] = new DataFrame(rows);
726
749
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "juxscript",
3
- "version": "1.1.202",
3
+ "version": "1.1.203",
4
4
  "type": "module",
5
5
  "description": "A JavaScript UX authorship platform",
6
6
  "main": "index.js",