juxscript 1.1.198 → 1.1.199

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":"TabularDriver.d.ts","sourceRoot":"","sources":["TabularDriver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,MAAM,WAAW,WAAW;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,YAAY;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAC5D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mBAAmB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED,qBAAa,aAAa;IACtB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,GAAG,CAA4B;gBAE3B,MAAM,GAAE,MAAsB,EAAE,SAAS,GAAE,MAAiB;IAKlE,IAAI,IAAI,OAAO,CAAC,WAAW,CAAC;IA4BlC;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAgCxB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAwBxB;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,SAAS;IA6D7D;;;OAGG;IACG,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,SAAS,CAAC;IAoG5E;;OAEG;YACW,UAAU;IAuExB;;OAEG;IACG,aAAa,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAiBlD;;OAEG;IACG,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAuBzF;;OAEG;IACG,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAwBjD;;OAEG;IACG,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IA4BzD;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAqBlH;;OAEG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYjC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAgB5B;;OAEG;IACG,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,SAAS,CAAC;IA0ExE;;OAEG;IACG,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAyEtG,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,UAAU;IAmClB,OAAO,CAAC,SAAS;IAYjB,KAAK,IAAI,IAAI;CAMhB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,aAAa,CAEhF"}
1
+ {"version":3,"file":"TabularDriver.d.ts","sourceRoot":"","sources":["TabularDriver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,MAAM,WAAW,WAAW;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,YAAY;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAC5D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mBAAmB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED,qBAAa,aAAa;IACtB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,GAAG,CAA4B;gBAE3B,MAAM,GAAE,MAAsB,EAAE,SAAS,GAAE,MAAiB;IAKlE,IAAI,IAAI,OAAO,CAAC,WAAW,CAAC;IA4BlC;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAgCxB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAwBxB;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,SAAS;IA6D7D;;;OAGG;IACG,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,SAAS,CAAC;IAoG5E;;OAEG;YACW,UAAU;IAuExB;;OAEG;IACG,aAAa,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAiBlD;;OAEG;IACG,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAuBzF;;OAEG;IACG,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAwBjD;;OAEG;IACG,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IA4BzD;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAqBlH;;OAEG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYjC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAgB5B;;OAEG;IACG,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,SAAS,CAAC;IA0ExE;;OAEG;IACG,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAkHtG,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,UAAU;IAmClB,OAAO,CAAC,SAAS;IAYjB,KAAK,IAAI,IAAI;CAMhB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,aAAa,CAEhF"}
@@ -490,7 +490,7 @@ export class TabularDriver {
490
490
  * ✅ UPDATED: Stream Excel file with optional headerRow override
491
491
  */
492
492
  async streamFileMultiSheet(file, options = {}) {
493
- const { maxSheetSize = 100000, sheetChunkSize = 10000, onProgress, headerRow } = options;
493
+ const { maxSheetSize = 100000, sheetChunkSize = 10000, onProgress, headerRow = 0 } = options;
494
494
  let XLSX;
495
495
  try {
496
496
  XLSX = await import('xlsx');
@@ -524,17 +524,54 @@ export class TabularDriver {
524
524
  processedSheets++;
525
525
  continue;
526
526
  }
527
- // When headerRow is specified and > 0, we need to:
528
- // 1. Tell sheet_to_json to start reading from that row
529
- // 2. SheetJS treats the first row of the range as headers
530
- const jsonData = XLSX.utils.sheet_to_json(worksheet, {
531
- range: (headerRow !== undefined && headerRow > 0) ? headerRow : undefined,
532
- defval: null,
533
- raw: false,
534
- blankrows: false
535
- });
536
- if (jsonData.length > 0) {
537
- sheets[sheetName] = new DataFrame(jsonData);
527
+ // FIX: Use sheet_to_json with header option to get raw arrays first
528
+ // Then manually construct the DataFrame with the correct header row
529
+ if (headerRow > 0) {
530
+ // Get all data as raw arrays (no header interpretation)
531
+ const rawData = XLSX.utils.sheet_to_json(worksheet, {
532
+ header: 1, // Return array of arrays
533
+ defval: null,
534
+ raw: false,
535
+ blankrows: false
536
+ });
537
+ if (rawData.length <= headerRow) {
538
+ processedSheets++;
539
+ continue;
540
+ }
541
+ // Extract headers from the specified row
542
+ const headers = rawData[headerRow].map((h, i) => {
543
+ if (h === null || h === undefined || String(h).trim() === '') {
544
+ return `__EMPTY${i > 0 ? '_' + i : ''}`;
545
+ }
546
+ return String(h);
547
+ });
548
+ // Build rows from data after header row
549
+ const rows = [];
550
+ for (let i = headerRow + 1; i < rawData.length; i++) {
551
+ const rowData = rawData[i];
552
+ if (!rowData || rowData.every((cell) => cell === null || cell === undefined)) {
553
+ continue; // Skip empty rows
554
+ }
555
+ const row = {};
556
+ headers.forEach((header, j) => {
557
+ row[header] = rowData[j] !== undefined ? rowData[j] : null;
558
+ });
559
+ rows.push(row);
560
+ }
561
+ if (rows.length > 0) {
562
+ sheets[sheetName] = new DataFrame(rows);
563
+ }
564
+ }
565
+ else {
566
+ // Default behavior: first row is header
567
+ const jsonData = XLSX.utils.sheet_to_json(worksheet, {
568
+ defval: null,
569
+ raw: false,
570
+ blankrows: false
571
+ });
572
+ if (jsonData.length > 0) {
573
+ sheets[sheetName] = new DataFrame(jsonData);
574
+ }
538
575
  }
539
576
  processedSheets++;
540
577
  if (onProgress) {
@@ -610,7 +610,7 @@ export class TabularDriver {
610
610
  * ✅ UPDATED: Stream Excel file with optional headerRow override
611
611
  */
612
612
  async streamFileMultiSheet(file: File, options: ParseOptions = {}): Promise<Record<string, DataFrame>> {
613
- const { maxSheetSize = 100000, sheetChunkSize = 10000, onProgress, headerRow } = options;
613
+ const { maxSheetSize = 100000, sheetChunkSize = 10000, onProgress, headerRow = 0 } = options;
614
614
 
615
615
  let XLSX: any;
616
616
  try {
@@ -652,18 +652,59 @@ export class TabularDriver {
652
652
  continue;
653
653
  }
654
654
 
655
- // When headerRow is specified and > 0, we need to:
656
- // 1. Tell sheet_to_json to start reading from that row
657
- // 2. SheetJS treats the first row of the range as headers
658
- const jsonData: Record<string, any>[] = XLSX.utils.sheet_to_json(worksheet, {
659
- range: (headerRow !== undefined && headerRow > 0) ? headerRow : undefined,
660
- defval: null,
661
- raw: false,
662
- blankrows: false
663
- });
655
+ // FIX: Use sheet_to_json with header option to get raw arrays first
656
+ // Then manually construct the DataFrame with the correct header row
657
+ if (headerRow > 0) {
658
+ // Get all data as raw arrays (no header interpretation)
659
+ const rawData: any[][] = XLSX.utils.sheet_to_json(worksheet, {
660
+ header: 1, // Return array of arrays
661
+ defval: null,
662
+ raw: false,
663
+ blankrows: false
664
+ });
665
+
666
+ if (rawData.length <= headerRow) {
667
+ processedSheets++;
668
+ continue;
669
+ }
664
670
 
665
- if (jsonData.length > 0) {
666
- sheets[sheetName] = new DataFrame(jsonData);
671
+ // Extract headers from the specified row
672
+ const headers = rawData[headerRow].map((h: any, i: number) => {
673
+ if (h === null || h === undefined || String(h).trim() === '') {
674
+ return `__EMPTY${i > 0 ? '_' + i : ''}`;
675
+ }
676
+ return String(h);
677
+ });
678
+
679
+ // Build rows from data after header row
680
+ const rows: Record<string, any>[] = [];
681
+ for (let i = headerRow + 1; i < rawData.length; i++) {
682
+ const rowData = rawData[i];
683
+ if (!rowData || rowData.every((cell: any) => cell === null || cell === undefined)) {
684
+ continue; // Skip empty rows
685
+ }
686
+
687
+ const row: Record<string, any> = {};
688
+ headers.forEach((header: string, j: number) => {
689
+ row[header] = rowData[j] !== undefined ? rowData[j] : null;
690
+ });
691
+ rows.push(row);
692
+ }
693
+
694
+ if (rows.length > 0) {
695
+ sheets[sheetName] = new DataFrame(rows);
696
+ }
697
+ } else {
698
+ // Default behavior: first row is header
699
+ const jsonData: Record<string, any>[] = XLSX.utils.sheet_to_json(worksheet, {
700
+ defval: null,
701
+ raw: false,
702
+ blankrows: false
703
+ });
704
+
705
+ if (jsonData.length > 0) {
706
+ sheets[sheetName] = new DataFrame(jsonData);
707
+ }
667
708
  }
668
709
 
669
710
  processedSheets++;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "juxscript",
3
- "version": "1.1.198",
3
+ "version": "1.1.199",
4
4
  "type": "module",
5
5
  "description": "A JavaScript UX authorship platform",
6
6
  "main": "index.js",