@cj-tech-master/excelts 1.6.3-canary.20251224193747.e89b618 → 1.6.3-canary.20251226035947.ef0b4f2

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.
Files changed (68) hide show
  1. package/README.md +5 -4
  2. package/README_zh.md +5 -4
  3. package/dist/browser/excelts.esm.js +2447 -3094
  4. package/dist/browser/excelts.esm.js.map +1 -1
  5. package/dist/browser/excelts.esm.min.js +23 -25
  6. package/dist/browser/excelts.iife.js +2448 -3095
  7. package/dist/browser/excelts.iife.js.map +1 -1
  8. package/dist/browser/excelts.iife.min.js +23 -25
  9. package/dist/cjs/csv/csv-core.js +2 -2
  10. package/dist/cjs/csv/csv-stream.js +1 -1
  11. package/dist/cjs/csv/csv.base.js +10 -27
  12. package/dist/cjs/csv/csv.js +4 -12
  13. package/dist/cjs/doc/column.js +21 -0
  14. package/dist/cjs/doc/worksheet.js +4 -0
  15. package/dist/cjs/stream/xlsx/workbook-writer.js +4 -4
  16. package/dist/cjs/stream/xlsx/worksheet-writer.js +8 -1
  17. package/dist/cjs/utils/datetime.js +648 -0
  18. package/dist/cjs/utils/parse-sax.js +1190 -12
  19. package/dist/cjs/utils/unzip/zip-parser.js +11 -0
  20. package/dist/cjs/utils/zip/compress.base.js +3 -0
  21. package/dist/cjs/utils/zip/compress.browser.js +74 -30
  22. package/dist/cjs/utils/zip/deflate-fallback.js +575 -0
  23. package/dist/cjs/utils/zip/streaming-zip.js +264 -0
  24. package/dist/cjs/xlsx/xform/sheet/col-breaks-xform.js +38 -0
  25. package/dist/cjs/xlsx/xform/sheet/page-breaks-xform.js +13 -1
  26. package/dist/cjs/xlsx/xform/sheet/row-breaks-xform.js +11 -13
  27. package/dist/cjs/xlsx/xform/sheet/worksheet-xform.js +7 -2
  28. package/dist/cjs/xlsx/xlsx.browser.js +10 -53
  29. package/dist/cjs/xlsx/xlsx.js +27 -59
  30. package/dist/esm/csv/csv-core.js +2 -2
  31. package/dist/esm/csv/csv-stream.js +1 -1
  32. package/dist/esm/csv/csv.base.js +10 -24
  33. package/dist/esm/csv/csv.js +4 -12
  34. package/dist/esm/doc/column.js +21 -0
  35. package/dist/esm/doc/worksheet.js +4 -0
  36. package/dist/esm/stream/xlsx/workbook-writer.js +1 -1
  37. package/dist/esm/stream/xlsx/worksheet-writer.js +8 -1
  38. package/dist/esm/utils/datetime.js +639 -0
  39. package/dist/esm/utils/parse-sax.js +1188 -12
  40. package/dist/esm/utils/unzip/zip-parser.js +11 -0
  41. package/dist/esm/utils/zip/compress.base.js +3 -0
  42. package/dist/esm/utils/zip/compress.browser.js +76 -31
  43. package/dist/esm/utils/zip/deflate-fallback.js +570 -0
  44. package/dist/esm/utils/zip/streaming-zip.js +259 -0
  45. package/dist/esm/xlsx/xform/sheet/col-breaks-xform.js +35 -0
  46. package/dist/esm/xlsx/xform/sheet/page-breaks-xform.js +13 -1
  47. package/dist/esm/xlsx/xform/sheet/row-breaks-xform.js +11 -13
  48. package/dist/esm/xlsx/xform/sheet/worksheet-xform.js +7 -2
  49. package/dist/esm/xlsx/xlsx.browser.js +10 -53
  50. package/dist/esm/xlsx/xlsx.js +27 -59
  51. package/dist/types/csv/csv-core.d.ts +6 -6
  52. package/dist/types/csv/csv.base.d.ts +4 -3
  53. package/dist/types/doc/column.d.ts +6 -0
  54. package/dist/types/doc/worksheet.d.ts +3 -1
  55. package/dist/types/stream/xlsx/workbook-writer.d.ts +1 -1
  56. package/dist/types/stream/xlsx/worksheet-writer.d.ts +3 -1
  57. package/dist/types/types.d.ts +6 -0
  58. package/dist/types/utils/datetime.d.ts +85 -0
  59. package/dist/types/utils/parse-sax.d.ts +108 -1
  60. package/dist/types/utils/unzip/zip-parser.d.ts +5 -0
  61. package/dist/types/utils/zip/compress.base.d.ts +3 -0
  62. package/dist/types/utils/zip/compress.browser.d.ts +27 -18
  63. package/dist/types/utils/zip/deflate-fallback.d.ts +39 -0
  64. package/dist/types/utils/zip/streaming-zip.d.ts +96 -0
  65. package/dist/types/xlsx/xform/sheet/col-breaks-xform.d.ts +16 -0
  66. package/dist/types/xlsx/xform/sheet/page-breaks-xform.d.ts +4 -0
  67. package/dist/types/xlsx/xform/sheet/row-breaks-xform.d.ts +4 -0
  68. package/package.json +7 -28
@@ -427,6 +427,17 @@ export class ZipParser {
427
427
  }
428
428
  return result;
429
429
  }
430
+ /**
431
+ * Extract all files (sync, Node.js only)
432
+ * Returns object with file paths as keys and Uint8Array content as values
433
+ */
434
+ extractAllSync() {
435
+ const result = {};
436
+ for (const entry of this.entries) {
437
+ result[entry.path] = extractEntryDataSync(this.data, entry);
438
+ }
439
+ return result;
440
+ }
430
441
  /**
431
442
  * Iterate over entries with async callback
432
443
  */
@@ -4,6 +4,9 @@
4
4
  *
5
5
  * Uses CompressionStream/DecompressionStream API with "deflate-raw" format
6
6
  * (raw DEFLATE without zlib header/trailer, required for ZIP files)
7
+ *
8
+ * Browser fallback: For browsers without deflate-raw support (Firefox < 113, Safari < 16.4),
9
+ * see deflate-fallback.ts for pure JS implementation
7
10
  */
8
11
  /**
9
12
  * Check if CompressionStream is available
@@ -1,12 +1,53 @@
1
1
  /**
2
- * Browser compression utilities using Web Streams API
2
+ * Browser compression utilities
3
3
  *
4
- * Uses CompressionStream API (Chrome 80+, Firefox 113+, Safari 16.4+)
5
- * with "deflate-raw" format (required for ZIP files)
4
+ * Primary: CompressionStream API (Chrome 103+, Firefox 113+, Safari 16.4+)
5
+ * Fallback: Pure JS DEFLATE implementation for older browsers
6
+ *
7
+ * Supported browsers with fallback:
8
+ * - Chrome >= 85
9
+ * - Firefox >= 79
10
+ * - Safari >= 14
11
+ * - Edge >= 85
12
+ */
13
+ import { compressWithStream, decompressWithStream } from "./compress.base.js";
14
+ import { inflateRaw, deflateRawCompressed, deflateRawStore } from "./deflate-fallback.js";
15
+ // Re-export shared types
16
+ export {};
17
+ /**
18
+ * Check if CompressionStream with "deflate-raw" is available
19
+ * Note: Chrome 80-102 has CompressionStream but not deflate-raw support
20
+ */
21
+ export function hasCompressionStream() {
22
+ if (typeof CompressionStream === "undefined") {
23
+ return false;
24
+ }
25
+ // Test if deflate-raw is supported (not just CompressionStream existence)
26
+ try {
27
+ new CompressionStream("deflate-raw");
28
+ return true;
29
+ }
30
+ catch {
31
+ return false;
32
+ }
33
+ }
34
+ // Cache the detection result for performance
35
+ let _hasDeflateRaw = null;
36
+ /**
37
+ * Check if deflate-raw is supported, with caching for performance.
38
+ * The cache is bypassed if CompressionStream is undefined (for testing).
6
39
  */
7
- import { hasCompressionStream, compressWithStream, decompressWithStream } from "./compress.base.js";
8
- // Re-export shared types and utilities
9
- export { hasCompressionStream };
40
+ function hasDeflateRawSupport() {
41
+ // If API doesn't exist, return false immediately (bypass cache for tests)
42
+ if (typeof CompressionStream === "undefined") {
43
+ return false;
44
+ }
45
+ // Use cached result for performance
46
+ if (_hasDeflateRaw === null) {
47
+ _hasDeflateRaw = hasCompressionStream();
48
+ }
49
+ return _hasDeflateRaw;
50
+ }
10
51
  /**
11
52
  * Check if native zlib is available (always false in browser)
12
53
  */
@@ -14,7 +55,7 @@ export function hasNativeZlib() {
14
55
  return false;
15
56
  }
16
57
  /**
17
- * Compress data using browser's native CompressionStream
58
+ * Compress data using browser's native CompressionStream or JS fallback
18
59
  *
19
60
  * @param data - Data to compress
20
61
  * @param options - Compression options
@@ -28,49 +69,53 @@ export function hasNativeZlib() {
28
69
  */
29
70
  export async function compress(data, options = {}) {
30
71
  const level = options.level ?? 6;
31
- // Level 0 means no compression
72
+ // Level 0 means no compression (STORE mode)
32
73
  if (level === 0) {
33
- return data;
74
+ return deflateRawStore(data);
34
75
  }
35
- // Use CompressionStream
36
- if (typeof CompressionStream !== "undefined") {
76
+ // Use native CompressionStream if available
77
+ if (hasDeflateRawSupport()) {
37
78
  return compressWithStream(data);
38
79
  }
39
- // No compression available - return original data
40
- console.warn("No native compression available, returning uncompressed data");
41
- return data;
80
+ // Fallback to pure JS implementation
81
+ return deflateRawCompressed(data);
42
82
  }
43
83
  /**
44
- * Compress data synchronously
45
- * Not available in browser - throws error
84
+ * Compress data synchronously using pure JS implementation
46
85
  *
47
- * @param _data - Data to compress
48
- * @param _options - Compression options
49
- * @throws Error always - sync compression not available in browser
86
+ * @param data - Data to compress
87
+ * @param options - Compression options
88
+ * @returns Compressed data
50
89
  */
51
- export function compressSync(_data, _options = {}) {
52
- throw new Error("Synchronous compression is not available in browser environment");
90
+ export function compressSync(data, options = {}) {
91
+ const level = options.level ?? 6;
92
+ // Level 0 means no compression (STORE mode)
93
+ if (level === 0) {
94
+ return deflateRawStore(data);
95
+ }
96
+ // Pure JS implementation
97
+ return deflateRawCompressed(data);
53
98
  }
54
99
  /**
55
- * Decompress data using browser's native DecompressionStream
100
+ * Decompress data using browser's native DecompressionStream or JS fallback
56
101
  *
57
102
  * @param data - Compressed data (deflate-raw format)
58
103
  * @returns Decompressed data
59
104
  */
60
105
  export async function decompress(data) {
61
- // Use DecompressionStream
62
- if (typeof DecompressionStream !== "undefined") {
106
+ // Use native DecompressionStream if available
107
+ if (hasDeflateRawSupport()) {
63
108
  return decompressWithStream(data);
64
109
  }
65
- throw new Error("No native decompression available in browser");
110
+ // Fallback to pure JS implementation
111
+ return inflateRaw(data);
66
112
  }
67
113
  /**
68
- * Decompress data synchronously
69
- * Not available in browser - throws error
114
+ * Decompress data synchronously using pure JS implementation
70
115
  *
71
- * @param _data - Compressed data
72
- * @throws Error always - sync decompression not available in browser
116
+ * @param data - Compressed data (deflate-raw format)
117
+ * @returns Decompressed data
73
118
  */
74
- export function decompressSync(_data) {
75
- throw new Error("Synchronous decompression is not available in browser environment");
119
+ export function decompressSync(data) {
120
+ return inflateRaw(data);
76
121
  }