@cj-tech-master/excelts 1.6.2 → 1.6.3-canary.20251224124621.73c5d94

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