@cj-tech-master/excelts 1.6.3 → 2.0.0-canary.20251228013952.4f2c3c6

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 (400) hide show
  1. package/README.md +139 -24
  2. package/README_zh.md +140 -26
  3. package/dist/browser/excelts.esm.js +18468 -0
  4. package/dist/browser/excelts.esm.js.map +1 -0
  5. package/dist/browser/excelts.esm.min.js +125 -0
  6. package/dist/browser/excelts.iife.js +13107 -47146
  7. package/dist/browser/excelts.iife.js.map +1 -1
  8. package/dist/browser/excelts.iife.min.js +24 -106
  9. package/dist/cjs/csv/csv-core.js +701 -0
  10. package/dist/cjs/csv/csv-stream.js +646 -0
  11. package/dist/cjs/csv/csv.base.js +137 -0
  12. package/dist/cjs/csv/csv.browser.js +68 -0
  13. package/dist/cjs/csv/csv.js +218 -162
  14. package/dist/cjs/doc/anchor.js +2 -2
  15. package/dist/cjs/doc/cell.js +22 -22
  16. package/dist/cjs/doc/column.js +28 -7
  17. package/dist/cjs/doc/data-validations.js +3 -3
  18. package/dist/cjs/doc/defined-names.js +13 -13
  19. package/dist/cjs/doc/image.js +7 -7
  20. package/dist/cjs/doc/modelcontainer.js +2 -2
  21. package/dist/cjs/doc/note.js +2 -2
  22. package/dist/cjs/doc/pivot-table.js +5 -5
  23. package/dist/cjs/doc/range.js +11 -11
  24. package/dist/cjs/doc/row.js +16 -16
  25. package/dist/cjs/doc/table.js +5 -5
  26. package/dist/cjs/doc/workbook.base.js +211 -0
  27. package/dist/cjs/doc/workbook.browser.js +62 -0
  28. package/dist/cjs/doc/workbook.js +68 -179
  29. package/dist/cjs/doc/worksheet.js +45 -41
  30. package/dist/cjs/index.js +49 -32
  31. package/dist/cjs/stream/xlsx/hyperlink-reader.js +6 -6
  32. package/dist/cjs/stream/xlsx/sheet-comments-writer.js +12 -12
  33. package/dist/cjs/stream/xlsx/sheet-rels-writer.js +4 -4
  34. package/dist/cjs/stream/xlsx/workbook-reader.js +22 -22
  35. package/dist/cjs/stream/xlsx/workbook-writer.js +38 -38
  36. package/dist/cjs/stream/xlsx/worksheet-reader.js +17 -17
  37. package/dist/cjs/stream/xlsx/worksheet-writer.js +67 -60
  38. package/dist/cjs/utils/browser-buffer.js +75 -0
  39. package/dist/cjs/utils/cell-format.js +2 -2
  40. package/dist/cjs/utils/cell-matrix.js +5 -5
  41. package/dist/cjs/utils/datetime.js +499 -0
  42. package/dist/cjs/utils/encryptor.browser.js +240 -0
  43. package/dist/cjs/utils/parse-sax.js +1191 -13
  44. package/dist/cjs/utils/shared-formula.js +5 -5
  45. package/dist/cjs/utils/sheet-utils.js +13 -13
  46. package/dist/cjs/utils/stream-buf.browser.js +355 -0
  47. package/dist/cjs/utils/stream-buf.js +5 -5
  48. package/dist/cjs/utils/unzip/extract.js +11 -11
  49. package/dist/cjs/utils/unzip/index.js +21 -21
  50. package/dist/cjs/utils/unzip/parse-extra-field.js +3 -3
  51. package/dist/cjs/utils/unzip/parse.js +16 -16
  52. package/dist/cjs/utils/unzip/zip-parser.js +14 -3
  53. package/dist/cjs/utils/utils.base.js +161 -0
  54. package/dist/cjs/utils/utils.browser.js +89 -0
  55. package/dist/cjs/utils/utils.js +46 -154
  56. package/dist/cjs/utils/xml-stream.js +3 -3
  57. package/dist/cjs/utils/zip/compress.base.js +88 -0
  58. package/dist/cjs/utils/zip/compress.browser.js +127 -0
  59. package/dist/cjs/utils/zip/compress.js +18 -198
  60. package/dist/cjs/utils/zip/crc32.browser.js +88 -0
  61. package/dist/cjs/utils/zip/deflate-fallback.js +575 -0
  62. package/dist/cjs/utils/zip/index.js +17 -17
  63. package/dist/cjs/utils/zip/streaming-zip.js +264 -0
  64. package/dist/cjs/utils/zip/zip-builder.js +10 -10
  65. package/dist/cjs/utils/zip-stream.browser.js +135 -0
  66. package/dist/cjs/utils/zip-stream.js +4 -4
  67. package/dist/cjs/xlsx/xform/base-xform.js +4 -4
  68. package/dist/cjs/xlsx/xform/book/defined-name-xform.js +4 -4
  69. package/dist/cjs/xlsx/xform/book/sheet-xform.js +4 -4
  70. package/dist/cjs/xlsx/xform/book/workbook-calc-properties-xform.js +2 -2
  71. package/dist/cjs/xlsx/xform/book/workbook-pivot-cache-xform.js +2 -2
  72. package/dist/cjs/xlsx/xform/book/workbook-properties-xform.js +2 -2
  73. package/dist/cjs/xlsx/xform/book/workbook-view-xform.js +2 -2
  74. package/dist/cjs/xlsx/xform/book/workbook-xform.js +24 -24
  75. package/dist/cjs/xlsx/xform/comment/comment-xform.js +4 -4
  76. package/dist/cjs/xlsx/xform/comment/comments-xform.js +6 -6
  77. package/dist/cjs/xlsx/xform/comment/style/vml-position-xform.js +2 -2
  78. package/dist/cjs/xlsx/xform/comment/style/vml-protection-xform.js +2 -2
  79. package/dist/cjs/xlsx/xform/comment/vml-anchor-xform.js +2 -2
  80. package/dist/cjs/xlsx/xform/comment/vml-client-data-xform.js +10 -10
  81. package/dist/cjs/xlsx/xform/comment/vml-notes-xform.js +6 -6
  82. package/dist/cjs/xlsx/xform/comment/vml-shape-xform.js +6 -6
  83. package/dist/cjs/xlsx/xform/comment/vml-textbox-xform.js +2 -2
  84. package/dist/cjs/xlsx/xform/composite-xform.js +2 -2
  85. package/dist/cjs/xlsx/xform/core/app-heading-pairs-xform.js +2 -2
  86. package/dist/cjs/xlsx/xform/core/app-titles-of-parts-xform.js +2 -2
  87. package/dist/cjs/xlsx/xform/core/app-xform.js +11 -11
  88. package/dist/cjs/xlsx/xform/core/content-types-xform.js +4 -4
  89. package/dist/cjs/xlsx/xform/core/core-xform.js +23 -23
  90. package/dist/cjs/xlsx/xform/core/relationship-xform.js +2 -2
  91. package/dist/cjs/xlsx/xform/core/relationships-xform.js +6 -6
  92. package/dist/cjs/xlsx/xform/drawing/base-cell-anchor-xform.js +2 -2
  93. package/dist/cjs/xlsx/xform/drawing/blip-fill-xform.js +4 -4
  94. package/dist/cjs/xlsx/xform/drawing/blip-xform.js +2 -2
  95. package/dist/cjs/xlsx/xform/drawing/c-nv-pic-pr-xform.js +2 -2
  96. package/dist/cjs/xlsx/xform/drawing/c-nv-pr-xform.js +6 -6
  97. package/dist/cjs/xlsx/xform/drawing/cell-position-xform.js +7 -7
  98. package/dist/cjs/xlsx/xform/drawing/drawing-xform.js +10 -10
  99. package/dist/cjs/xlsx/xform/drawing/ext-lst-xform.js +2 -2
  100. package/dist/cjs/xlsx/xform/drawing/ext-xform.js +2 -2
  101. package/dist/cjs/xlsx/xform/drawing/hlink-click-xform.js +2 -2
  102. package/dist/cjs/xlsx/xform/drawing/nv-pic-pr-xform.js +6 -6
  103. package/dist/cjs/xlsx/xform/drawing/one-cell-anchor-xform.js +10 -10
  104. package/dist/cjs/xlsx/xform/drawing/pic-xform.js +9 -9
  105. package/dist/cjs/xlsx/xform/drawing/two-cell-anchor-xform.js +9 -9
  106. package/dist/cjs/xlsx/xform/list-xform.js +2 -2
  107. package/dist/cjs/xlsx/xform/pivot-table/cache-field-xform.js +5 -5
  108. package/dist/cjs/xlsx/xform/pivot-table/cache-field.js +3 -3
  109. package/dist/cjs/xlsx/xform/pivot-table/pivot-cache-definition-xform.js +10 -10
  110. package/dist/cjs/xlsx/xform/pivot-table/pivot-cache-records-xform.js +9 -9
  111. package/dist/cjs/xlsx/xform/pivot-table/pivot-table-xform.js +10 -11
  112. package/dist/cjs/xlsx/xform/sheet/auto-filter-xform.js +4 -4
  113. package/dist/cjs/xlsx/xform/sheet/cell-xform.js +65 -65
  114. package/dist/cjs/xlsx/xform/sheet/cf/cf-rule-xform.js +27 -27
  115. package/dist/cjs/xlsx/xform/sheet/cf/cfvo-xform.js +3 -3
  116. package/dist/cjs/xlsx/xform/sheet/cf/color-scale-xform.js +6 -6
  117. package/dist/cjs/xlsx/xform/sheet/cf/conditional-formatting-xform.js +6 -6
  118. package/dist/cjs/xlsx/xform/sheet/cf/conditional-formattings-xform.js +4 -4
  119. package/dist/cjs/xlsx/xform/sheet/cf/databar-xform.js +6 -6
  120. package/dist/cjs/xlsx/xform/sheet/cf/ext-lst-ref-xform.js +5 -5
  121. package/dist/cjs/xlsx/xform/sheet/cf/formula-xform.js +2 -2
  122. package/dist/cjs/xlsx/xform/sheet/cf/icon-set-xform.js +11 -11
  123. package/dist/cjs/xlsx/xform/sheet/cf-ext/cf-icon-ext-xform.js +3 -3
  124. package/dist/cjs/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js +11 -12
  125. package/dist/cjs/xlsx/xform/sheet/cf-ext/cfvo-ext-xform.js +4 -4
  126. package/dist/cjs/xlsx/xform/sheet/cf-ext/conditional-formatting-ext-xform.js +8 -8
  127. package/dist/cjs/xlsx/xform/sheet/cf-ext/conditional-formattings-ext-xform.js +6 -6
  128. package/dist/cjs/xlsx/xform/sheet/cf-ext/databar-ext-xform.js +26 -26
  129. package/dist/cjs/xlsx/xform/sheet/cf-ext/f-ext-xform.js +2 -2
  130. package/dist/cjs/xlsx/xform/sheet/cf-ext/icon-set-ext-xform.js +14 -14
  131. package/dist/cjs/xlsx/xform/sheet/cf-ext/sqref-ext-xform.js +2 -2
  132. package/dist/cjs/xlsx/xform/sheet/col-breaks-xform.js +38 -0
  133. package/dist/cjs/xlsx/xform/sheet/col-xform.js +6 -6
  134. package/dist/cjs/xlsx/xform/sheet/data-validations-xform.js +18 -18
  135. package/dist/cjs/xlsx/xform/sheet/dimension-xform.js +2 -2
  136. package/dist/cjs/xlsx/xform/sheet/drawing-xform.js +2 -2
  137. package/dist/cjs/xlsx/xform/sheet/ext-lst-xform.js +5 -5
  138. package/dist/cjs/xlsx/xform/sheet/header-footer-xform.js +2 -2
  139. package/dist/cjs/xlsx/xform/sheet/hyperlink-xform.js +2 -2
  140. package/dist/cjs/xlsx/xform/sheet/merge-cell-xform.js +2 -2
  141. package/dist/cjs/xlsx/xform/sheet/merges.js +8 -8
  142. package/dist/cjs/xlsx/xform/sheet/outline-properties-xform.js +2 -2
  143. package/dist/cjs/xlsx/xform/sheet/page-breaks-xform.js +15 -3
  144. package/dist/cjs/xlsx/xform/sheet/page-margins-xform.js +2 -2
  145. package/dist/cjs/xlsx/xform/sheet/page-setup-properties-xform.js +2 -2
  146. package/dist/cjs/xlsx/xform/sheet/page-setup-xform.js +2 -2
  147. package/dist/cjs/xlsx/xform/sheet/picture-xform.js +2 -2
  148. package/dist/cjs/xlsx/xform/sheet/print-options-xform.js +2 -2
  149. package/dist/cjs/xlsx/xform/sheet/row-breaks-xform.js +15 -17
  150. package/dist/cjs/xlsx/xform/sheet/row-xform.js +11 -11
  151. package/dist/cjs/xlsx/xform/sheet/sheet-format-properties-xform.js +2 -2
  152. package/dist/cjs/xlsx/xform/sheet/sheet-properties-xform.js +8 -8
  153. package/dist/cjs/xlsx/xform/sheet/sheet-protection-xform.js +2 -2
  154. package/dist/cjs/xlsx/xform/sheet/sheet-view-xform.js +4 -4
  155. package/dist/cjs/xlsx/xform/sheet/table-part-xform.js +2 -2
  156. package/dist/cjs/xlsx/xform/sheet/worksheet-xform.js +75 -70
  157. package/dist/cjs/xlsx/xform/simple/boolean-xform.js +2 -2
  158. package/dist/cjs/xlsx/xform/simple/date-xform.js +2 -2
  159. package/dist/cjs/xlsx/xform/simple/float-xform.js +2 -2
  160. package/dist/cjs/xlsx/xform/simple/integer-xform.js +2 -2
  161. package/dist/cjs/xlsx/xform/simple/string-xform.js +2 -2
  162. package/dist/cjs/xlsx/xform/static-xform.js +4 -4
  163. package/dist/cjs/xlsx/xform/strings/phonetic-text-xform.js +6 -6
  164. package/dist/cjs/xlsx/xform/strings/rich-text-xform.js +6 -6
  165. package/dist/cjs/xlsx/xform/strings/shared-string-xform.js +8 -8
  166. package/dist/cjs/xlsx/xform/strings/shared-strings-xform.js +6 -6
  167. package/dist/cjs/xlsx/xform/strings/text-xform.js +2 -2
  168. package/dist/cjs/xlsx/xform/style/alignment-xform.js +8 -8
  169. package/dist/cjs/xlsx/xform/style/border-xform.js +8 -8
  170. package/dist/cjs/xlsx/xform/style/color-xform.js +2 -2
  171. package/dist/cjs/xlsx/xform/style/dxf-xform.js +14 -14
  172. package/dist/cjs/xlsx/xform/style/fill-xform.js +9 -9
  173. package/dist/cjs/xlsx/xform/style/font-xform.js +22 -22
  174. package/dist/cjs/xlsx/xform/style/numfmt-xform.js +5 -5
  175. package/dist/cjs/xlsx/xform/style/protection-xform.js +2 -2
  176. package/dist/cjs/xlsx/xform/style/style-xform.js +6 -6
  177. package/dist/cjs/xlsx/xform/style/styles-xform.js +39 -39
  178. package/dist/cjs/xlsx/xform/style/underline-xform.js +2 -2
  179. package/dist/cjs/xlsx/xform/table/auto-filter-xform.js +4 -4
  180. package/dist/cjs/xlsx/xform/table/custom-filter-xform.js +2 -2
  181. package/dist/cjs/xlsx/xform/table/filter-column-xform.js +9 -9
  182. package/dist/cjs/xlsx/xform/table/filter-xform.js +2 -2
  183. package/dist/cjs/xlsx/xform/table/table-column-xform.js +2 -2
  184. package/dist/cjs/xlsx/xform/table/table-style-info-xform.js +2 -2
  185. package/dist/cjs/xlsx/xform/table/table-xform.js +12 -12
  186. package/dist/cjs/xlsx/xlsx.base.js +742 -0
  187. package/dist/cjs/xlsx/xlsx.browser.js +162 -0
  188. package/dist/cjs/xlsx/xlsx.js +118 -892
  189. package/dist/esm/csv/csv-core.js +694 -0
  190. package/dist/esm/csv/csv-stream.js +638 -0
  191. package/dist/esm/csv/csv.base.js +127 -0
  192. package/dist/esm/csv/csv.browser.js +65 -0
  193. package/dist/esm/csv/csv.js +181 -159
  194. package/dist/esm/doc/column.js +21 -0
  195. package/dist/esm/doc/workbook.base.js +207 -0
  196. package/dist/esm/doc/workbook.browser.js +59 -0
  197. package/dist/esm/doc/workbook.js +64 -175
  198. package/dist/esm/doc/worksheet.js +4 -0
  199. package/dist/esm/index.browser.js +33 -1
  200. package/dist/esm/index.js +23 -8
  201. package/dist/esm/local.js +0 -1
  202. package/dist/esm/stream/xlsx/workbook-writer.js +1 -1
  203. package/dist/esm/stream/xlsx/worksheet-writer.js +8 -1
  204. package/dist/esm/utils/browser-buffer.js +67 -0
  205. package/dist/esm/utils/datetime.js +493 -0
  206. package/dist/esm/utils/encryptor.browser.js +237 -0
  207. package/dist/esm/utils/parse-sax.js +1188 -12
  208. package/dist/esm/utils/stream-buf.browser.js +352 -0
  209. package/dist/esm/utils/unzip/zip-parser.js +11 -0
  210. package/dist/esm/utils/utils.base.js +142 -0
  211. package/dist/esm/utils/utils.browser.js +68 -0
  212. package/dist/esm/utils/utils.js +15 -123
  213. package/dist/esm/utils/zip/compress.base.js +83 -0
  214. package/dist/esm/utils/zip/compress.browser.js +121 -0
  215. package/dist/esm/utils/zip/compress.js +16 -164
  216. package/dist/esm/utils/zip/crc32.browser.js +82 -0
  217. package/dist/esm/utils/zip/deflate-fallback.js +570 -0
  218. package/dist/esm/utils/zip/streaming-zip.js +259 -0
  219. package/dist/esm/utils/zip-stream.browser.js +132 -0
  220. package/dist/esm/xlsx/xform/pivot-table/pivot-table-xform.js +2 -3
  221. package/dist/esm/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js +2 -3
  222. package/dist/esm/xlsx/xform/sheet/col-breaks-xform.js +35 -0
  223. package/dist/esm/xlsx/xform/sheet/page-breaks-xform.js +13 -1
  224. package/dist/esm/xlsx/xform/sheet/row-breaks-xform.js +11 -13
  225. package/dist/esm/xlsx/xform/sheet/worksheet-xform.js +7 -2
  226. package/dist/esm/xlsx/xlsx.base.js +739 -0
  227. package/dist/esm/xlsx/xlsx.browser.js +159 -0
  228. package/dist/esm/xlsx/xlsx.js +114 -888
  229. package/dist/types/csv/csv-core.d.ts +207 -0
  230. package/dist/types/csv/csv-stream.d.ts +114 -0
  231. package/dist/types/csv/csv.base.d.ts +62 -0
  232. package/dist/types/csv/csv.browser.d.ts +33 -0
  233. package/dist/types/csv/csv.d.ts +97 -71
  234. package/dist/types/doc/anchor.d.ts +1 -1
  235. package/dist/types/doc/cell.d.ts +7 -7
  236. package/dist/types/doc/column.d.ts +9 -3
  237. package/dist/types/doc/defined-names.d.ts +4 -4
  238. package/dist/types/doc/image.d.ts +2 -2
  239. package/dist/types/doc/modelcontainer.d.ts +1 -1
  240. package/dist/types/doc/pivot-table.d.ts +1 -1
  241. package/dist/types/doc/range.d.ts +1 -1
  242. package/dist/types/doc/row.d.ts +3 -3
  243. package/dist/types/doc/table.d.ts +2 -2
  244. package/dist/types/doc/workbook.base.d.ts +111 -0
  245. package/dist/types/doc/workbook.browser.d.ts +38 -0
  246. package/dist/types/doc/workbook.d.ts +62 -92
  247. package/dist/types/doc/worksheet.d.ts +12 -10
  248. package/dist/types/index.browser.d.ts +19 -5
  249. package/dist/types/index.d.ts +24 -23
  250. package/dist/types/local.d.ts +0 -1
  251. package/dist/types/stream/xlsx/hyperlink-reader.d.ts +1 -1
  252. package/dist/types/stream/xlsx/workbook-reader.d.ts +4 -4
  253. package/dist/types/stream/xlsx/workbook-writer.d.ts +7 -7
  254. package/dist/types/stream/xlsx/worksheet-reader.d.ts +5 -5
  255. package/dist/types/stream/xlsx/worksheet-writer.d.ts +11 -9
  256. package/dist/types/types.d.ts +6 -0
  257. package/dist/types/utils/browser-buffer.d.ts +28 -0
  258. package/dist/types/utils/col-cache.d.ts +1 -1
  259. package/dist/types/utils/datetime.d.ts +56 -0
  260. package/dist/types/utils/encryptor.browser.d.ts +28 -0
  261. package/dist/types/utils/parse-sax.d.ts +108 -1
  262. package/dist/types/utils/sheet-utils.d.ts +3 -3
  263. package/dist/types/utils/stream-buf.browser.d.ts +41 -0
  264. package/dist/types/utils/unzip/extract.d.ts +6 -6
  265. package/dist/types/utils/unzip/index.d.ts +8 -8
  266. package/dist/types/utils/unzip/parse.d.ts +3 -3
  267. package/dist/types/utils/unzip/zip-parser.d.ts +5 -0
  268. package/dist/types/utils/utils.base.d.ts +29 -0
  269. package/dist/types/utils/utils.browser.d.ts +29 -0
  270. package/dist/types/utils/utils.d.ts +6 -25
  271. package/dist/types/utils/zip/compress.base.d.ts +45 -0
  272. package/dist/types/utils/zip/compress.browser.d.ts +63 -0
  273. package/dist/types/utils/zip/compress.d.ts +13 -45
  274. package/dist/types/utils/zip/crc32.browser.d.ts +52 -0
  275. package/dist/types/utils/zip/deflate-fallback.d.ts +39 -0
  276. package/dist/types/utils/zip/index.d.ts +5 -5
  277. package/dist/types/utils/zip/streaming-zip.d.ts +96 -0
  278. package/dist/types/utils/zip/zip-builder.d.ts +1 -1
  279. package/dist/types/utils/zip-stream.browser.d.ts +39 -0
  280. package/dist/types/xlsx/xform/base-xform.d.ts +1 -1
  281. package/dist/types/xlsx/xform/book/defined-name-xform.d.ts +1 -1
  282. package/dist/types/xlsx/xform/book/sheet-xform.d.ts +1 -1
  283. package/dist/types/xlsx/xform/book/workbook-calc-properties-xform.d.ts +1 -1
  284. package/dist/types/xlsx/xform/book/workbook-pivot-cache-xform.d.ts +1 -1
  285. package/dist/types/xlsx/xform/book/workbook-properties-xform.d.ts +1 -1
  286. package/dist/types/xlsx/xform/book/workbook-view-xform.d.ts +1 -1
  287. package/dist/types/xlsx/xform/book/workbook-xform.d.ts +2 -2
  288. package/dist/types/xlsx/xform/comment/comment-xform.d.ts +2 -2
  289. package/dist/types/xlsx/xform/comment/comments-xform.d.ts +2 -2
  290. package/dist/types/xlsx/xform/comment/style/vml-position-xform.d.ts +1 -1
  291. package/dist/types/xlsx/xform/comment/style/vml-protection-xform.d.ts +1 -1
  292. package/dist/types/xlsx/xform/comment/vml-anchor-xform.d.ts +1 -1
  293. package/dist/types/xlsx/xform/comment/vml-client-data-xform.d.ts +1 -1
  294. package/dist/types/xlsx/xform/comment/vml-notes-xform.d.ts +1 -1
  295. package/dist/types/xlsx/xform/comment/vml-shape-xform.d.ts +1 -1
  296. package/dist/types/xlsx/xform/comment/vml-textbox-xform.d.ts +1 -1
  297. package/dist/types/xlsx/xform/composite-xform.d.ts +1 -1
  298. package/dist/types/xlsx/xform/core/app-heading-pairs-xform.d.ts +1 -1
  299. package/dist/types/xlsx/xform/core/app-titles-of-parts-xform.d.ts +1 -1
  300. package/dist/types/xlsx/xform/core/app-xform.d.ts +1 -1
  301. package/dist/types/xlsx/xform/core/content-types-xform.d.ts +1 -1
  302. package/dist/types/xlsx/xform/core/core-xform.d.ts +1 -1
  303. package/dist/types/xlsx/xform/core/relationship-xform.d.ts +1 -1
  304. package/dist/types/xlsx/xform/core/relationships-xform.d.ts +1 -1
  305. package/dist/types/xlsx/xform/drawing/base-cell-anchor-xform.d.ts +1 -1
  306. package/dist/types/xlsx/xform/drawing/blip-fill-xform.d.ts +2 -2
  307. package/dist/types/xlsx/xform/drawing/blip-xform.d.ts +1 -1
  308. package/dist/types/xlsx/xform/drawing/c-nv-pic-pr-xform.d.ts +1 -1
  309. package/dist/types/xlsx/xform/drawing/c-nv-pr-xform.d.ts +1 -1
  310. package/dist/types/xlsx/xform/drawing/cell-position-xform.d.ts +2 -2
  311. package/dist/types/xlsx/xform/drawing/drawing-xform.d.ts +1 -1
  312. package/dist/types/xlsx/xform/drawing/ext-lst-xform.d.ts +1 -1
  313. package/dist/types/xlsx/xform/drawing/ext-xform.d.ts +1 -1
  314. package/dist/types/xlsx/xform/drawing/hlink-click-xform.d.ts +1 -1
  315. package/dist/types/xlsx/xform/drawing/nv-pic-pr-xform.d.ts +1 -1
  316. package/dist/types/xlsx/xform/drawing/one-cell-anchor-xform.d.ts +1 -1
  317. package/dist/types/xlsx/xform/drawing/pic-xform.d.ts +1 -1
  318. package/dist/types/xlsx/xform/drawing/two-cell-anchor-xform.d.ts +1 -1
  319. package/dist/types/xlsx/xform/list-xform.d.ts +1 -1
  320. package/dist/types/xlsx/xform/pivot-table/cache-field-xform.d.ts +1 -1
  321. package/dist/types/xlsx/xform/pivot-table/pivot-cache-definition-xform.d.ts +3 -3
  322. package/dist/types/xlsx/xform/pivot-table/pivot-cache-records-xform.d.ts +2 -2
  323. package/dist/types/xlsx/xform/pivot-table/pivot-table-xform.d.ts +1 -1
  324. package/dist/types/xlsx/xform/sheet/auto-filter-xform.d.ts +1 -1
  325. package/dist/types/xlsx/xform/sheet/cell-xform.d.ts +1 -1
  326. package/dist/types/xlsx/xform/sheet/cf/cf-rule-xform.d.ts +6 -6
  327. package/dist/types/xlsx/xform/sheet/cf/cfvo-xform.d.ts +1 -1
  328. package/dist/types/xlsx/xform/sheet/cf/color-scale-xform.d.ts +3 -3
  329. package/dist/types/xlsx/xform/sheet/cf/conditional-formatting-xform.d.ts +1 -1
  330. package/dist/types/xlsx/xform/sheet/cf/conditional-formattings-xform.d.ts +2 -2
  331. package/dist/types/xlsx/xform/sheet/cf/databar-xform.d.ts +3 -3
  332. package/dist/types/xlsx/xform/sheet/cf/ext-lst-ref-xform.d.ts +1 -1
  333. package/dist/types/xlsx/xform/sheet/cf/formula-xform.d.ts +1 -1
  334. package/dist/types/xlsx/xform/sheet/cf/icon-set-xform.d.ts +2 -2
  335. package/dist/types/xlsx/xform/sheet/cf-ext/cf-icon-ext-xform.d.ts +1 -1
  336. package/dist/types/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.d.ts +3 -3
  337. package/dist/types/xlsx/xform/sheet/cf-ext/cfvo-ext-xform.d.ts +2 -2
  338. package/dist/types/xlsx/xform/sheet/cf-ext/conditional-formatting-ext-xform.d.ts +3 -3
  339. package/dist/types/xlsx/xform/sheet/cf-ext/conditional-formattings-ext-xform.d.ts +2 -2
  340. package/dist/types/xlsx/xform/sheet/cf-ext/databar-ext-xform.d.ts +3 -3
  341. package/dist/types/xlsx/xform/sheet/cf-ext/f-ext-xform.d.ts +1 -1
  342. package/dist/types/xlsx/xform/sheet/cf-ext/icon-set-ext-xform.d.ts +3 -3
  343. package/dist/types/xlsx/xform/sheet/cf-ext/sqref-ext-xform.d.ts +1 -1
  344. package/dist/types/xlsx/xform/sheet/col-breaks-xform.d.ts +16 -0
  345. package/dist/types/xlsx/xform/sheet/col-xform.d.ts +1 -1
  346. package/dist/types/xlsx/xform/sheet/data-validations-xform.d.ts +1 -1
  347. package/dist/types/xlsx/xform/sheet/dimension-xform.d.ts +1 -1
  348. package/dist/types/xlsx/xform/sheet/drawing-xform.d.ts +1 -1
  349. package/dist/types/xlsx/xform/sheet/ext-lst-xform.d.ts +1 -1
  350. package/dist/types/xlsx/xform/sheet/header-footer-xform.d.ts +1 -1
  351. package/dist/types/xlsx/xform/sheet/hyperlink-xform.d.ts +1 -1
  352. package/dist/types/xlsx/xform/sheet/merge-cell-xform.d.ts +1 -1
  353. package/dist/types/xlsx/xform/sheet/outline-properties-xform.d.ts +1 -1
  354. package/dist/types/xlsx/xform/sheet/page-breaks-xform.d.ts +5 -1
  355. package/dist/types/xlsx/xform/sheet/page-margins-xform.d.ts +1 -1
  356. package/dist/types/xlsx/xform/sheet/page-setup-properties-xform.d.ts +1 -1
  357. package/dist/types/xlsx/xform/sheet/page-setup-xform.d.ts +1 -1
  358. package/dist/types/xlsx/xform/sheet/picture-xform.d.ts +1 -1
  359. package/dist/types/xlsx/xform/sheet/print-options-xform.d.ts +1 -1
  360. package/dist/types/xlsx/xform/sheet/row-breaks-xform.d.ts +5 -1
  361. package/dist/types/xlsx/xform/sheet/row-xform.d.ts +1 -1
  362. package/dist/types/xlsx/xform/sheet/sheet-format-properties-xform.d.ts +1 -1
  363. package/dist/types/xlsx/xform/sheet/sheet-properties-xform.d.ts +1 -1
  364. package/dist/types/xlsx/xform/sheet/sheet-protection-xform.d.ts +1 -1
  365. package/dist/types/xlsx/xform/sheet/sheet-view-xform.d.ts +1 -1
  366. package/dist/types/xlsx/xform/sheet/table-part-xform.d.ts +1 -1
  367. package/dist/types/xlsx/xform/sheet/worksheet-xform.d.ts +1 -1
  368. package/dist/types/xlsx/xform/simple/boolean-xform.d.ts +1 -1
  369. package/dist/types/xlsx/xform/simple/date-xform.d.ts +1 -1
  370. package/dist/types/xlsx/xform/simple/float-xform.d.ts +1 -1
  371. package/dist/types/xlsx/xform/simple/integer-xform.d.ts +1 -1
  372. package/dist/types/xlsx/xform/simple/string-xform.d.ts +1 -1
  373. package/dist/types/xlsx/xform/static-xform.d.ts +1 -1
  374. package/dist/types/xlsx/xform/strings/phonetic-text-xform.d.ts +1 -1
  375. package/dist/types/xlsx/xform/strings/rich-text-xform.d.ts +3 -3
  376. package/dist/types/xlsx/xform/strings/shared-string-xform.d.ts +1 -1
  377. package/dist/types/xlsx/xform/strings/shared-strings-xform.d.ts +2 -2
  378. package/dist/types/xlsx/xform/strings/text-xform.d.ts +1 -1
  379. package/dist/types/xlsx/xform/style/alignment-xform.d.ts +1 -1
  380. package/dist/types/xlsx/xform/style/border-xform.d.ts +2 -2
  381. package/dist/types/xlsx/xform/style/color-xform.d.ts +1 -1
  382. package/dist/types/xlsx/xform/style/dxf-xform.d.ts +1 -1
  383. package/dist/types/xlsx/xform/style/fill-xform.d.ts +2 -2
  384. package/dist/types/xlsx/xform/style/font-xform.d.ts +1 -1
  385. package/dist/types/xlsx/xform/style/numfmt-xform.d.ts +1 -1
  386. package/dist/types/xlsx/xform/style/protection-xform.d.ts +1 -1
  387. package/dist/types/xlsx/xform/style/style-xform.d.ts +3 -3
  388. package/dist/types/xlsx/xform/style/styles-xform.d.ts +2 -2
  389. package/dist/types/xlsx/xform/style/underline-xform.d.ts +1 -1
  390. package/dist/types/xlsx/xform/table/auto-filter-xform.d.ts +2 -2
  391. package/dist/types/xlsx/xform/table/custom-filter-xform.d.ts +1 -1
  392. package/dist/types/xlsx/xform/table/filter-column-xform.d.ts +2 -2
  393. package/dist/types/xlsx/xform/table/filter-xform.d.ts +1 -1
  394. package/dist/types/xlsx/xform/table/table-column-xform.d.ts +1 -1
  395. package/dist/types/xlsx/xform/table/table-style-info-xform.d.ts +1 -1
  396. package/dist/types/xlsx/xform/table/table-xform.d.ts +1 -1
  397. package/dist/types/xlsx/xlsx.base.d.ts +134 -0
  398. package/dist/types/xlsx/xlsx.browser.d.ts +31 -0
  399. package/dist/types/xlsx/xlsx.d.ts +20 -80
  400. package/package.json +16 -39
@@ -0,0 +1,137 @@
1
+ "use strict";
2
+ /**
3
+ * CSV Base class - Shared functionality for Node.js and Browser
4
+ *
5
+ * Uses native CSV parser (RFC 4180 compliant) with zero external dependencies.
6
+ * Date parsing uses native high-performance datetime utilities.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.parseCsvStream = exports.formatCsv = exports.parseCsv = void 0;
10
+ exports.createDefaultValueMapper = createDefaultValueMapper;
11
+ exports.createDefaultWriteMapper = createDefaultWriteMapper;
12
+ exports.parseCsvToWorksheet = parseCsvToWorksheet;
13
+ exports.formatWorksheetToCsv = formatWorksheetToCsv;
14
+ const datetime_1 = require("../utils/datetime");
15
+ const csv_core_1 = require("./csv-core");
16
+ // Special Excel values mapping
17
+ const SpecialValues = {
18
+ true: true,
19
+ false: false,
20
+ "#N/A": { error: "#N/A" },
21
+ "#REF!": { error: "#REF!" },
22
+ "#NAME?": { error: "#NAME?" },
23
+ "#DIV/0!": { error: "#DIV/0!" },
24
+ "#NULL!": { error: "#NULL!" },
25
+ "#VALUE!": { error: "#VALUE!" },
26
+ "#NUM!": { error: "#NUM!" }
27
+ };
28
+ /**
29
+ * Create the default value mapper for CSV parsing
30
+ */
31
+ function createDefaultValueMapper(dateFormats) {
32
+ const dateParser = datetime_1.DateParser.create(dateFormats);
33
+ return function mapValue(datum) {
34
+ if (datum === "") {
35
+ return null;
36
+ }
37
+ // Try to parse as number
38
+ const datumNumber = Number(datum);
39
+ if (!Number.isNaN(datumNumber) && datumNumber !== Infinity) {
40
+ return datumNumber;
41
+ }
42
+ // Try to parse as date
43
+ const date = dateParser.parse(datum);
44
+ if (date) {
45
+ return date;
46
+ }
47
+ // Check for special values
48
+ const special = SpecialValues[datum];
49
+ if (special !== undefined) {
50
+ return special;
51
+ }
52
+ return datum;
53
+ };
54
+ }
55
+ /**
56
+ * Create the default value mapper for CSV writing
57
+ */
58
+ function createDefaultWriteMapper(dateFormat, dateUTC) {
59
+ const formatter = dateFormat
60
+ ? datetime_1.DateFormatter.create(dateFormat, { utc: dateUTC })
61
+ : datetime_1.DateFormatter.iso(dateUTC);
62
+ return function mapValue(value) {
63
+ if (value) {
64
+ // Handle hyperlinks
65
+ if (value.text || value.hyperlink) {
66
+ return value.hyperlink || value.text || "";
67
+ }
68
+ // Handle formulas
69
+ if (value.formula || value.result) {
70
+ return value.result || "";
71
+ }
72
+ // Handle dates
73
+ if (value instanceof Date) {
74
+ return formatter.format(value);
75
+ }
76
+ // Handle errors
77
+ if (value.error) {
78
+ return value.error;
79
+ }
80
+ // Handle other objects
81
+ if (typeof value === "object") {
82
+ return JSON.stringify(value);
83
+ }
84
+ }
85
+ return value;
86
+ };
87
+ }
88
+ /**
89
+ * Parse CSV content into a worksheet
90
+ */
91
+ function parseCsvToWorksheet(content, workbook, options = {}) {
92
+ const worksheet = workbook.addWorksheet(options.sheetName);
93
+ const dateFormats = options.dateFormats || [
94
+ "YYYY-MM-DD[T]HH:mm:ssZ",
95
+ "YYYY-MM-DD[T]HH:mm:ss",
96
+ "YYYY-MM-DD"
97
+ ];
98
+ const map = options.map || createDefaultValueMapper(dateFormats);
99
+ // Parse CSV
100
+ const rows = (0, csv_core_1.parseCsv)(content, options.parserOptions);
101
+ // Add rows to worksheet
102
+ for (const row of rows) {
103
+ worksheet.addRow(row.map(map));
104
+ }
105
+ return worksheet;
106
+ }
107
+ /**
108
+ * Format worksheet as CSV string
109
+ */
110
+ function formatWorksheetToCsv(worksheet, options = {}) {
111
+ if (!worksheet) {
112
+ return "";
113
+ }
114
+ const { dateFormat, dateUTC } = options;
115
+ const map = options.map || createDefaultWriteMapper(dateFormat, dateUTC);
116
+ const includeEmptyRows = options.includeEmptyRows !== false;
117
+ const rows = [];
118
+ let lastRow = 1;
119
+ worksheet.eachRow((row, rowNumber) => {
120
+ // Add empty rows if needed
121
+ if (includeEmptyRows) {
122
+ while (lastRow++ < rowNumber - 1) {
123
+ rows.push([]);
124
+ }
125
+ }
126
+ const { values } = row;
127
+ values.shift(); // Remove first empty element (1-indexed)
128
+ rows.push(values.map(map));
129
+ lastRow = rowNumber;
130
+ });
131
+ return (0, csv_core_1.formatCsv)(rows, options.formatterOptions);
132
+ }
133
+ // Re-export core types
134
+ var csv_core_2 = require("./csv-core");
135
+ Object.defineProperty(exports, "parseCsv", { enumerable: true, get: function () { return csv_core_2.parseCsv; } });
136
+ Object.defineProperty(exports, "formatCsv", { enumerable: true, get: function () { return csv_core_2.formatCsv; } });
137
+ Object.defineProperty(exports, "parseCsvStream", { enumerable: true, get: function () { return csv_core_2.parseCsvStream; } });
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ /**
3
+ * CSV class for Browser - No file system dependencies
4
+ *
5
+ * Provides:
6
+ * - load: Load from string or ArrayBuffer
7
+ * - writeString: Write to string
8
+ * - writeBuffer: Write to Uint8Array
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.CSV = void 0;
12
+ const csv_base_1 = require("./csv.base");
13
+ class CSV {
14
+ constructor(workbook) {
15
+ this.workbook = workbook;
16
+ }
17
+ /**
18
+ * Load CSV from string or ArrayBuffer
19
+ */
20
+ load(data, options) {
21
+ let content;
22
+ if (typeof data === "string") {
23
+ content = data;
24
+ }
25
+ else if (data instanceof ArrayBuffer) {
26
+ content = new TextDecoder("utf-8").decode(data);
27
+ }
28
+ else if (data instanceof Uint8Array) {
29
+ content = new TextDecoder("utf-8").decode(data);
30
+ }
31
+ else {
32
+ throw new Error("Invalid data type. Expected string, ArrayBuffer, or Uint8Array.");
33
+ }
34
+ return (0, csv_base_1.parseCsvToWorksheet)(content, this.workbook, options);
35
+ }
36
+ /**
37
+ * Write CSV to string
38
+ */
39
+ writeString(options) {
40
+ const worksheet = this.workbook.getWorksheet(options?.sheetName || options?.sheetId);
41
+ return (0, csv_base_1.formatWorksheetToCsv)(worksheet, options);
42
+ }
43
+ /**
44
+ * Write CSV to Uint8Array buffer
45
+ */
46
+ writeBuffer(options) {
47
+ const content = this.writeString(options);
48
+ return new TextEncoder().encode(content);
49
+ }
50
+ // Stubs for unsupported methods - throw helpful errors
51
+ async readFile(_filename, _options) {
52
+ throw new Error("CSV.readFile() is not available in browser. " +
53
+ "Use CSV.load() with string or ArrayBuffer instead.");
54
+ }
55
+ async read(_stream, _options) {
56
+ throw new Error("CSV.read() stream is not available in browser. " +
57
+ "Use CSV.load() with string or ArrayBuffer instead.");
58
+ }
59
+ async writeFile(_filename, _options) {
60
+ throw new Error("CSV.writeFile() is not available in browser. " +
61
+ "Use CSV.writeString() or CSV.writeBuffer() and handle download manually.");
62
+ }
63
+ write(_stream, _options) {
64
+ throw new Error("CSV.write() stream is not available in browser. " +
65
+ "Use CSV.writeString() or CSV.writeBuffer() instead.");
66
+ }
67
+ }
68
+ exports.CSV = CSV;
@@ -1,193 +1,249 @@
1
1
  "use strict";
2
+ /**
3
+ * CSV class for Node.js - Full streaming and file system support
4
+ *
5
+ * Features:
6
+ * - readFile: Read from file path (streaming)
7
+ * - writeFile: Write to file path (streaming)
8
+ * - read: Read from Node.js stream
9
+ * - write: Write to Node.js stream
10
+ * - createReadStream: Create a readable stream from worksheet
11
+ * - createWriteStream: Create a writable stream that writes to worksheet
12
+ */
13
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ var desc = Object.getOwnPropertyDescriptor(m, k);
16
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
17
+ desc = { enumerable: true, get: function() { return m[k]; } };
18
+ }
19
+ Object.defineProperty(o, k2, desc);
20
+ }) : (function(o, m, k, k2) {
21
+ if (k2 === undefined) k2 = k;
22
+ o[k2] = m[k];
23
+ }));
24
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
25
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
26
+ }) : function(o, v) {
27
+ o["default"] = v;
28
+ });
29
+ var __importStar = (this && this.__importStar) || (function () {
30
+ var ownKeys = function(o) {
31
+ ownKeys = Object.getOwnPropertyNames || function (o) {
32
+ var ar = [];
33
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
34
+ return ar;
35
+ };
36
+ return ownKeys(o);
37
+ };
38
+ return function (mod) {
39
+ if (mod && mod.__esModule) return mod;
40
+ var result = {};
41
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
42
+ __setModuleDefault(result, mod);
43
+ return result;
44
+ };
45
+ })();
2
46
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
47
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
48
  };
5
49
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.CSV = void 0;
50
+ exports.CsvFormatterStream = exports.CsvParserStream = exports.CSV = void 0;
7
51
  const fs_1 = __importDefault(require("fs"));
8
- const stream_buf_js_1 = require("../utils/stream-buf");
9
- const fast_csv_1 = require("fast-csv");
10
- const customParseFormat_js_1 = __importDefault(require("dayjs/plugin/customParseFormat"));
11
- const utc_js_1 = __importDefault(require("dayjs/plugin/utc"));
12
- const dayjs_1 = __importDefault(require("dayjs"));
13
- const utils_js_1 = require("../utils/utils");
14
- const SpecialValues = {
15
- true: true,
16
- false: false,
17
- "#N/A": { error: "#N/A" },
18
- "#REF!": { error: "#REF!" },
19
- "#NAME?": { error: "#NAME?" },
20
- "#DIV/0!": { error: "#DIV/0!" },
21
- "#NULL!": { error: "#NULL!" },
22
- "#VALUE!": { error: "#VALUE!" },
23
- "#NUM!": { error: "#NUM!" }
24
- };
25
- dayjs_1.default.extend(customParseFormat_js_1.default);
26
- dayjs_1.default.extend(utc_js_1.default);
52
+ const utils_1 = require("../utils/utils");
53
+ const csv_base_1 = require("./csv.base");
54
+ const csv_stream_1 = require("./csv-stream");
27
55
  class CSV {
28
56
  constructor(workbook) {
29
57
  this.workbook = workbook;
30
- this.worksheet = null;
31
58
  }
59
+ /**
60
+ * Read CSV from file using streaming
61
+ *
62
+ * @example
63
+ * ```ts
64
+ * const worksheet = await workbook.csv.readFile('data.csv');
65
+ * ```
66
+ */
32
67
  async readFile(filename, options) {
33
- options = options || {};
34
- if (!(await (0, utils_js_1.fileExists)(filename))) {
68
+ if (!(await (0, utils_1.fileExists)(filename))) {
35
69
  throw new Error(`File not found: ${filename}`);
36
70
  }
37
- const stream = fs_1.default.createReadStream(filename);
38
- try {
39
- const worksheet = await this.read(stream, options);
40
- stream.close();
41
- return worksheet;
42
- }
43
- catch (error) {
44
- stream.close();
45
- throw error;
46
- }
71
+ const readStream = fs_1.default.createReadStream(filename, {
72
+ encoding: "utf8",
73
+ highWaterMark: options?.highWaterMark ?? 64 * 1024
74
+ });
75
+ return this.read(readStream, options);
47
76
  }
48
- read(stream, options) {
49
- options = options || {};
77
+ /**
78
+ * Read CSV from Node.js readable stream
79
+ *
80
+ * Uses true streaming - processes data row by row without loading entire file into memory.
81
+ *
82
+ * @example
83
+ * ```ts
84
+ * const stream = fs.createReadStream('data.csv');
85
+ * const worksheet = await workbook.csv.read(stream);
86
+ * ```
87
+ */
88
+ async read(stream, options) {
89
+ const worksheet = this.workbook.addWorksheet(options?.sheetName);
90
+ const dateFormats = options?.dateFormats ??
91
+ ["YYYY-MM-DD[T]HH:mm:ssZ", "YYYY-MM-DD[T]HH:mm:ss", "MM-DD-YYYY", "YYYY-MM-DD"];
92
+ const map = options?.map || (0, csv_base_1.createDefaultValueMapper)(dateFormats);
93
+ const parser = new csv_stream_1.CsvParserStream(options?.parserOptions);
50
94
  return new Promise((resolve, reject) => {
51
- const worksheet = this.workbook.addWorksheet(options.sheetName);
52
- const dateFormats = options.dateFormats || [
53
- "YYYY-MM-DD[T]HH:mm:ssZ",
54
- "YYYY-MM-DD[T]HH:mm:ss",
55
- "MM-DD-YYYY",
56
- "YYYY-MM-DD"
57
- ];
58
- const map = options.map ||
59
- function (datum) {
60
- if (datum === "") {
61
- return null;
62
- }
63
- const datumNumber = Number(datum);
64
- if (!Number.isNaN(datumNumber) && datumNumber !== Infinity) {
65
- return datumNumber;
66
- }
67
- const dt = dateFormats.reduce((matchingDate, currentDateFormat) => {
68
- if (matchingDate) {
69
- return matchingDate;
70
- }
71
- const dayjsObj = (0, dayjs_1.default)(datum, currentDateFormat, true);
72
- if (dayjsObj.isValid()) {
73
- return dayjsObj;
74
- }
75
- return null;
76
- }, null);
77
- if (dt) {
78
- return new Date(dt.valueOf());
79
- }
80
- const special = SpecialValues[datum];
81
- if (special !== undefined) {
82
- return special;
83
- }
84
- return datum;
85
- };
86
- const onData = (data) => {
87
- worksheet.addRow(data.map(map));
88
- };
89
- const onEnd = () => {
90
- csvStream.emit("worksheet", worksheet);
91
- };
92
- const cleanup = () => {
93
- csvStream.removeListener("data", onData);
94
- csvStream.removeListener("end", onEnd);
95
- csvStream.removeListener("worksheet", onWorksheet);
96
- csvStream.removeListener("error", onError);
97
- };
98
- const onWorksheet = (ws) => {
99
- cleanup();
100
- resolve(ws);
101
- };
102
- const onError = (err) => {
103
- cleanup();
104
- reject(err);
105
- };
106
- const csvStream = (0, fast_csv_1.parse)(options.parserOptions).on("data", onData).on("end", onEnd);
107
- csvStream.once("worksheet", onWorksheet).on("error", onError);
108
- stream.pipe(csvStream);
95
+ stream.pipe(parser);
96
+ parser.on("data", (row) => {
97
+ worksheet.addRow(row.map(map));
98
+ });
99
+ parser.on("end", () => {
100
+ resolve(worksheet);
101
+ });
102
+ parser.on("error", reject);
103
+ stream.on("error", reject);
109
104
  });
110
105
  }
111
- write(stream, options) {
106
+ /**
107
+ * Write CSV to file using streaming
108
+ *
109
+ * @example
110
+ * ```ts
111
+ * await workbook.csv.writeFile('output.csv');
112
+ * ```
113
+ */
114
+ async writeFile(filename, options) {
115
+ const writeStream = fs_1.default.createWriteStream(filename, {
116
+ encoding: (options?.encoding || "utf8"),
117
+ highWaterMark: options?.highWaterMark ?? 64 * 1024
118
+ });
119
+ return this.write(writeStream, options);
120
+ }
121
+ /**
122
+ * Write CSV to Node.js writable stream
123
+ *
124
+ * Uses true streaming - writes data row by row.
125
+ *
126
+ * @example
127
+ * ```ts
128
+ * const stream = fs.createWriteStream('output.csv');
129
+ * await workbook.csv.write(stream);
130
+ * ```
131
+ */
132
+ async write(stream, options) {
133
+ const worksheet = this.workbook.getWorksheet(options?.sheetName || options?.sheetId);
134
+ if (!worksheet) {
135
+ stream.end();
136
+ return;
137
+ }
138
+ const { dateFormat, dateUTC } = options || {};
139
+ const map = options?.map || (0, csv_base_1.createDefaultWriteMapper)(dateFormat, dateUTC);
140
+ const includeEmptyRows = options?.includeEmptyRows !== false;
141
+ const formatterOptions = {
142
+ ...options?.formatterOptions
143
+ };
144
+ const formatter = new csv_stream_1.CsvFormatterStream(formatterOptions);
145
+ formatter.pipe(stream);
146
+ let lastRow = 1;
147
+ worksheet.eachRow((row, rowNumber) => {
148
+ // Add empty rows if needed
149
+ if (includeEmptyRows) {
150
+ while (lastRow++ < rowNumber - 1) {
151
+ formatter.write([]);
152
+ }
153
+ }
154
+ const { values } = row;
155
+ values.shift(); // Remove first empty element (1-indexed)
156
+ formatter.write(values.map(map));
157
+ lastRow = rowNumber;
158
+ });
112
159
  return new Promise((resolve, reject) => {
113
- options = options || {};
114
- // const encoding = options.encoding || 'utf8';
115
- // const separator = options.separator || ',';
116
- // const quoteChar = options.quoteChar || '\'';
117
- const worksheet = this.workbook.getWorksheet(options.sheetName || options.sheetId);
118
- const csvStream = (0, fast_csv_1.format)(options.formatterOptions);
119
- const cleanup = () => {
120
- stream.removeListener("finish", onFinish);
121
- csvStream.removeListener("error", onError);
122
- };
123
- const onFinish = () => {
124
- cleanup();
125
- resolve();
126
- };
127
- const onError = (err) => {
128
- cleanup();
129
- reject(err);
130
- };
131
- stream.once("finish", onFinish);
132
- csvStream.on("error", onError);
133
- csvStream.pipe(stream);
134
- const { dateFormat, dateUTC } = options;
135
- const map = options.map ||
136
- (value => {
137
- if (value) {
138
- if (value.text || value.hyperlink) {
139
- return value.hyperlink || value.text || "";
140
- }
141
- if (value.formula || value.result) {
142
- return value.result || "";
143
- }
144
- if (value instanceof Date) {
145
- if (dateFormat) {
146
- return dateUTC
147
- ? dayjs_1.default.utc(value).format(dateFormat)
148
- : (0, dayjs_1.default)(value).format(dateFormat);
149
- }
150
- return dateUTC ? dayjs_1.default.utc(value).format() : (0, dayjs_1.default)(value).format();
151
- }
152
- if (value.error) {
153
- return value.error;
154
- }
155
- if (typeof value === "object") {
156
- return JSON.stringify(value);
157
- }
158
- }
159
- return value;
160
- });
161
- const includeEmptyRows = options.includeEmptyRows === undefined || options.includeEmptyRows;
162
- let lastRow = 1;
163
- if (worksheet) {
160
+ formatter.on("error", reject);
161
+ stream.on("error", reject);
162
+ stream.on("finish", () => resolve());
163
+ formatter.end();
164
+ });
165
+ }
166
+ /**
167
+ * Write CSV to buffer
168
+ *
169
+ * Note: This loads the entire CSV into memory. For large files, use write() with a stream.
170
+ */
171
+ async writeBuffer(options) {
172
+ const chunks = [];
173
+ const { Writable } = await Promise.resolve().then(() => __importStar(require("stream")));
174
+ const bufferStream = new Writable({
175
+ write(chunk, encoding, callback) {
176
+ chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk, encoding));
177
+ callback();
178
+ }
179
+ });
180
+ await this.write(bufferStream, options);
181
+ return Buffer.concat(chunks);
182
+ }
183
+ /**
184
+ * Create a readable stream that outputs CSV rows from the worksheet
185
+ *
186
+ * @example
187
+ * ```ts
188
+ * const csvStream = workbook.csv.createReadStream();
189
+ * csvStream.pipe(fs.createWriteStream('output.csv'));
190
+ * ```
191
+ */
192
+ createReadStream(options) {
193
+ const worksheet = this.workbook.getWorksheet(options?.sheetName || options?.sheetId);
194
+ const { dateFormat, dateUTC } = options || {};
195
+ const map = options?.map || (0, csv_base_1.createDefaultWriteMapper)(dateFormat, dateUTC);
196
+ const includeEmptyRows = options?.includeEmptyRows !== false;
197
+ const formatterOptions = {
198
+ ...options?.formatterOptions
199
+ };
200
+ const formatter = new csv_stream_1.CsvFormatterStream(formatterOptions);
201
+ if (worksheet) {
202
+ // Use setImmediate to allow piping before data flows
203
+ setImmediate(() => {
204
+ let lastRow = 1;
164
205
  worksheet.eachRow((row, rowNumber) => {
165
206
  if (includeEmptyRows) {
166
207
  while (lastRow++ < rowNumber - 1) {
167
- csvStream.write([]);
208
+ formatter.write([]);
168
209
  }
169
210
  }
170
211
  const { values } = row;
171
212
  values.shift();
172
- csvStream.write(values.map(map));
213
+ formatter.write(values.map(map));
173
214
  lastRow = rowNumber;
174
215
  });
175
- }
176
- csvStream.end();
177
- });
178
- }
179
- writeFile(filename, options) {
180
- options = options || {};
181
- const streamOptions = {
182
- encoding: (options.encoding || "utf8")
183
- };
184
- const stream = fs_1.default.createWriteStream(filename, streamOptions);
185
- return this.write(stream, options);
216
+ formatter.end();
217
+ });
218
+ }
219
+ else {
220
+ setImmediate(() => formatter.end());
221
+ }
222
+ return formatter;
186
223
  }
187
- async writeBuffer(options) {
188
- const stream = new stream_buf_js_1.StreamBuf();
189
- await this.write(stream, options);
190
- return stream.read();
224
+ /**
225
+ * Create a writable stream that parses CSV and adds rows to a worksheet
226
+ *
227
+ * @example
228
+ * ```ts
229
+ * const csvWriter = workbook.csv.createWriteStream({ sheetName: 'Data' });
230
+ * fs.createReadStream('input.csv').pipe(csvWriter);
231
+ * await new Promise(resolve => csvWriter.on('finish', resolve));
232
+ * ```
233
+ */
234
+ createWriteStream(options) {
235
+ const worksheet = this.workbook.addWorksheet(options?.sheetName);
236
+ const dateFormats = options?.dateFormats ??
237
+ ["YYYY-MM-DD[T]HH:mm:ssZ", "YYYY-MM-DD[T]HH:mm:ss", "MM-DD-YYYY", "YYYY-MM-DD"];
238
+ const map = options?.map || (0, csv_base_1.createDefaultValueMapper)(dateFormats);
239
+ const parser = new csv_stream_1.CsvParserStream(options?.parserOptions);
240
+ parser.on("data", (row) => {
241
+ worksheet.addRow(row.map(map));
242
+ });
243
+ return parser;
191
244
  }
192
245
  }
193
246
  exports.CSV = CSV;
247
+ var csv_stream_2 = require("./csv-stream");
248
+ Object.defineProperty(exports, "CsvParserStream", { enumerable: true, get: function () { return csv_stream_2.CsvParserStream; } });
249
+ Object.defineProperty(exports, "CsvFormatterStream", { enumerable: true, get: function () { return csv_stream_2.CsvFormatterStream; } });
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Anchor = void 0;
4
- const col_cache_js_1 = require("../utils/col-cache");
4
+ const col_cache_1 = require("../utils/col-cache");
5
5
  function isAnchorModel(value) {
6
6
  return (typeof value === "object" &&
7
7
  "nativeCol" in value &&
@@ -22,7 +22,7 @@ class Anchor {
22
22
  this.nativeRowOff = 0;
23
23
  }
24
24
  else if (typeof address === "string") {
25
- const decoded = col_cache_js_1.colCache.decodeAddress(address);
25
+ const decoded = col_cache_1.colCache.decodeAddress(address);
26
26
  this.nativeCol = decoded.col + offset;
27
27
  this.nativeColOff = 0;
28
28
  this.nativeRow = decoded.row + offset;