@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,352 @@
1
+ import { StringBuf } from "./string-buf.js";
2
+ // =============================================================================
3
+ // Data chunks - encapsulating incoming data
4
+ class StringChunk {
5
+ constructor(data, encoding) {
6
+ this._data = data;
7
+ this._encoding = encoding;
8
+ }
9
+ get length() {
10
+ return this.toBuffer().length;
11
+ }
12
+ copy(target, targetOffset, offset, length) {
13
+ const buf = this.toBuffer();
14
+ const bytesToCopy = Math.min(length, buf.length - offset);
15
+ target.set(buf.subarray(offset, offset + bytesToCopy), targetOffset);
16
+ return bytesToCopy;
17
+ }
18
+ toBuffer() {
19
+ if (!this._buffer) {
20
+ this._buffer = new TextEncoder().encode(this._data);
21
+ }
22
+ return this._buffer;
23
+ }
24
+ }
25
+ class StringBufChunk {
26
+ constructor(data) {
27
+ this._data = data;
28
+ }
29
+ get length() {
30
+ return this._data.length;
31
+ }
32
+ copy(target, targetOffset, offset, length) {
33
+ const buf = this.toBuffer();
34
+ const bytesToCopy = Math.min(length, buf.length - offset);
35
+ target.set(buf.subarray(offset, offset + bytesToCopy), targetOffset);
36
+ return bytesToCopy;
37
+ }
38
+ toBuffer() {
39
+ return this._data.toBuffer();
40
+ }
41
+ }
42
+ class BufferChunk {
43
+ constructor(data) {
44
+ this._data = data;
45
+ }
46
+ get length() {
47
+ return this._data.length;
48
+ }
49
+ copy(target, targetOffset, offset, length) {
50
+ const bytesToCopy = Math.min(length, this._data.length - offset);
51
+ target.set(this._data.subarray(offset, offset + bytesToCopy), targetOffset);
52
+ }
53
+ toBuffer() {
54
+ return this._data;
55
+ }
56
+ }
57
+ // =============================================================================
58
+ // ReadWriteBuf - a single buffer supporting simple read-write
59
+ class ReadWriteBuf {
60
+ constructor(size) {
61
+ this.size = size;
62
+ this.buffer = new Uint8Array(size);
63
+ this.iRead = 0;
64
+ this.iWrite = 0;
65
+ }
66
+ toBuffer() {
67
+ if (this.iRead === 0 && this.iWrite === this.size) {
68
+ return this.buffer;
69
+ }
70
+ return this.buffer.slice(this.iRead, this.iWrite);
71
+ }
72
+ get length() {
73
+ return this.iWrite - this.iRead;
74
+ }
75
+ get eod() {
76
+ return this.iRead === this.iWrite;
77
+ }
78
+ get full() {
79
+ return this.iWrite === this.size;
80
+ }
81
+ read(size) {
82
+ if (size === 0) {
83
+ return null;
84
+ }
85
+ if (size === undefined || size >= this.length) {
86
+ const buf = this.toBuffer();
87
+ this.iRead = this.iWrite;
88
+ return buf;
89
+ }
90
+ const buf = this.buffer.slice(this.iRead, this.iRead + size);
91
+ this.iRead += size;
92
+ return buf;
93
+ }
94
+ write(chunk, offset, length) {
95
+ const size = Math.min(length, this.size - this.iWrite);
96
+ chunk.copy(this.buffer, this.iWrite, offset, offset + size);
97
+ this.iWrite += size;
98
+ return size;
99
+ }
100
+ }
101
+ // =============================================================================
102
+ // StreamBuf - Browser version without Node.js stream dependency
103
+ // A simple buffer manager that mimics stream behavior for xlsx writing
104
+ class StreamBuf {
105
+ constructor(options) {
106
+ options = options || {};
107
+ this.bufSize = options.bufSize || 1024 * 1024;
108
+ this.buffers = [];
109
+ this.batch = options.batch || false;
110
+ this.corked = false;
111
+ this.paused = false;
112
+ this.encoding = null;
113
+ this.pipes = [];
114
+ this.events = new Map();
115
+ }
116
+ // Event emitter methods
117
+ on(event, callback) {
118
+ const callbacks = this.events.get(event) || [];
119
+ callbacks.push(callback);
120
+ this.events.set(event, callbacks);
121
+ return this;
122
+ }
123
+ once(event, callback) {
124
+ const onceCallback = (...args) => {
125
+ this.off(event, onceCallback);
126
+ callback(...args);
127
+ };
128
+ return this.on(event, onceCallback);
129
+ }
130
+ off(event, callback) {
131
+ const callbacks = this.events.get(event) || [];
132
+ const index = callbacks.indexOf(callback);
133
+ if (index !== -1) {
134
+ callbacks.splice(index, 1);
135
+ }
136
+ return this;
137
+ }
138
+ emit(event, ...args) {
139
+ const callbacks = this.events.get(event) || [];
140
+ callbacks.forEach(cb => cb(...args));
141
+ return callbacks.length > 0;
142
+ }
143
+ removeListener(event, callback) {
144
+ return this.off(event, callback);
145
+ }
146
+ toBuffer() {
147
+ switch (this.buffers.length) {
148
+ case 0:
149
+ return null;
150
+ case 1:
151
+ return this.buffers[0].toBuffer();
152
+ default: {
153
+ const totalLength = this.buffers.reduce((acc, buf) => acc + buf.length, 0);
154
+ const result = new Uint8Array(totalLength);
155
+ let offset = 0;
156
+ for (const rwBuf of this.buffers) {
157
+ const buf = rwBuf.toBuffer();
158
+ result.set(buf, offset);
159
+ offset += buf.length;
160
+ }
161
+ return result;
162
+ }
163
+ }
164
+ }
165
+ _getWritableBuffer() {
166
+ if (this.buffers.length) {
167
+ const last = this.buffers[this.buffers.length - 1];
168
+ if (!last.full) {
169
+ return last;
170
+ }
171
+ }
172
+ const buf = new ReadWriteBuf(this.bufSize);
173
+ this.buffers.push(buf);
174
+ return buf;
175
+ }
176
+ async _pipe(chunk) {
177
+ const write = (pipe) => {
178
+ return new Promise(resolve => {
179
+ pipe.write(chunk.toBuffer(), () => {
180
+ resolve();
181
+ });
182
+ });
183
+ };
184
+ await Promise.all(this.pipes.map(write));
185
+ }
186
+ _writeToBuffers(chunk) {
187
+ let inPos = 0;
188
+ const inLen = chunk.length;
189
+ while (inPos < inLen) {
190
+ const buffer = this._getWritableBuffer();
191
+ inPos += buffer.write(chunk, inPos, inLen - inPos);
192
+ }
193
+ }
194
+ async write(data, encoding, callback) {
195
+ const nop = () => { };
196
+ if (encoding instanceof Function) {
197
+ callback = encoding;
198
+ encoding = "utf8";
199
+ }
200
+ callback = callback || nop;
201
+ let chunk;
202
+ if (data instanceof StringBuf || (data && data.constructor?.name === "StringBuf")) {
203
+ chunk = new StringBufChunk(data);
204
+ }
205
+ else if (data instanceof Uint8Array) {
206
+ chunk = new BufferChunk(data);
207
+ }
208
+ else if (ArrayBuffer.isView(data)) {
209
+ chunk = new BufferChunk(new Uint8Array(data.buffer, data.byteOffset, data.byteLength));
210
+ }
211
+ else if (data instanceof ArrayBuffer) {
212
+ chunk = new BufferChunk(new Uint8Array(data));
213
+ }
214
+ else if (typeof data === "string" || data instanceof String) {
215
+ chunk = new StringChunk(String(data), encoding);
216
+ }
217
+ else {
218
+ throw new Error("Chunk must be one of type String, Uint8Array, ArrayBuffer or StringBuf.");
219
+ }
220
+ if (this.pipes.length) {
221
+ if (this.batch) {
222
+ this._writeToBuffers(chunk);
223
+ while (!this.corked && this.buffers.length > 1) {
224
+ await this._pipe(new BufferChunk(this.buffers.shift().toBuffer()));
225
+ }
226
+ }
227
+ else if (!this.corked) {
228
+ await this._pipe(chunk);
229
+ callback();
230
+ }
231
+ else {
232
+ this._writeToBuffers(chunk);
233
+ queueMicrotask(() => callback());
234
+ }
235
+ }
236
+ else {
237
+ if (!this.paused) {
238
+ this.emit("data", chunk.toBuffer());
239
+ }
240
+ this._writeToBuffers(chunk);
241
+ this.emit("readable");
242
+ }
243
+ return true;
244
+ }
245
+ cork() {
246
+ this.corked = true;
247
+ }
248
+ _flush() {
249
+ if (this.pipes.length) {
250
+ while (this.buffers.length) {
251
+ this._pipe(new BufferChunk(this.buffers.shift().toBuffer()));
252
+ }
253
+ }
254
+ }
255
+ uncork() {
256
+ this.corked = false;
257
+ this._flush();
258
+ }
259
+ end(chunk, encoding, callback) {
260
+ const writeComplete = (error) => {
261
+ if (error) {
262
+ callback?.(error);
263
+ }
264
+ else {
265
+ this._flush();
266
+ this.pipes.forEach((pipe) => {
267
+ pipe.end();
268
+ });
269
+ this.emit("finish");
270
+ }
271
+ };
272
+ if (chunk) {
273
+ this.write(chunk, encoding, writeComplete);
274
+ }
275
+ else {
276
+ writeComplete();
277
+ }
278
+ }
279
+ read(size) {
280
+ let buffers;
281
+ if (size) {
282
+ buffers = [];
283
+ while (size && this.buffers.length && !this.buffers[0].eod) {
284
+ const first = this.buffers[0];
285
+ const buffer = first.read(size);
286
+ if (buffer) {
287
+ size -= buffer.length;
288
+ buffers.push(buffer);
289
+ }
290
+ if (first.eod && first.full) {
291
+ this.buffers.shift();
292
+ }
293
+ }
294
+ return concatUint8Arrays(buffers);
295
+ }
296
+ buffers = this.buffers.map(buf => buf.toBuffer()).filter(Boolean);
297
+ this.buffers = [];
298
+ return concatUint8Arrays(buffers);
299
+ }
300
+ setEncoding(encoding) {
301
+ this.encoding = encoding;
302
+ }
303
+ pause() {
304
+ this.paused = true;
305
+ }
306
+ resume() {
307
+ this.paused = false;
308
+ }
309
+ isPaused() {
310
+ return this.paused;
311
+ }
312
+ pipe(destination) {
313
+ this.pipes.push(destination);
314
+ if (!this.paused && this.buffers.length) {
315
+ this.end();
316
+ }
317
+ return destination;
318
+ }
319
+ unpipe(destination) {
320
+ this.pipes = this.pipes.filter((pipe) => pipe !== destination);
321
+ }
322
+ unshift() {
323
+ throw new Error("Not Implemented");
324
+ }
325
+ wrap() {
326
+ throw new Error("Not Implemented");
327
+ }
328
+ push(chunk) {
329
+ if (chunk !== null) {
330
+ this.write(chunk);
331
+ }
332
+ return true;
333
+ }
334
+ }
335
+ // Helper function to concatenate Uint8Arrays
336
+ function concatUint8Arrays(arrays) {
337
+ if (arrays.length === 0) {
338
+ return new Uint8Array(0);
339
+ }
340
+ if (arrays.length === 1) {
341
+ return arrays[0];
342
+ }
343
+ const totalLength = arrays.reduce((acc, arr) => acc + arr.length, 0);
344
+ const result = new Uint8Array(totalLength);
345
+ let offset = 0;
346
+ for (const arr of arrays) {
347
+ result.set(arr, offset);
348
+ offset += arr.length;
349
+ }
350
+ return result;
351
+ }
352
+ export { StreamBuf };
@@ -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
  */
@@ -0,0 +1,142 @@
1
+ /**
2
+ * Base utility functions shared between Node.js and Browser
3
+ * Platform-independent implementations only
4
+ */
5
+ // =============================================================================
6
+ // Basic utilities
7
+ // =============================================================================
8
+ export function delay(ms) {
9
+ return new Promise(resolve => setTimeout(resolve, ms));
10
+ }
11
+ export function nop() { }
12
+ export const inherits = function (cls, superCtor, statics, prototype) {
13
+ cls.super_ = superCtor;
14
+ if (!prototype) {
15
+ prototype = statics;
16
+ statics = null;
17
+ }
18
+ if (statics) {
19
+ Object.keys(statics).forEach(i => {
20
+ Object.defineProperty(cls, i, Object.getOwnPropertyDescriptor(statics, i));
21
+ });
22
+ }
23
+ const properties = {
24
+ constructor: {
25
+ value: cls,
26
+ enumerable: false,
27
+ writable: false,
28
+ configurable: true
29
+ }
30
+ };
31
+ if (prototype) {
32
+ Object.keys(prototype).forEach(i => {
33
+ properties[i] = Object.getOwnPropertyDescriptor(prototype, i);
34
+ });
35
+ }
36
+ cls.prototype = Object.create(superCtor.prototype, properties);
37
+ };
38
+ // =============================================================================
39
+ // Date utilities
40
+ // =============================================================================
41
+ export function dateToExcel(d, date1904) {
42
+ return 25569 + d.getTime() / (24 * 3600 * 1000) - (date1904 ? 1462 : 0);
43
+ }
44
+ export function excelToDate(v, date1904) {
45
+ const millisecondSinceEpoch = Math.round((v - 25569 + (date1904 ? 1462 : 0)) * 24 * 3600 * 1000);
46
+ return new Date(millisecondSinceEpoch);
47
+ }
48
+ export function toIsoDateString(dt) {
49
+ return dt.toISOString().substr(0, 10);
50
+ }
51
+ export function parsePath(filepath) {
52
+ const last = filepath.lastIndexOf("/");
53
+ return {
54
+ path: filepath.substring(0, last),
55
+ name: filepath.substring(last + 1)
56
+ };
57
+ }
58
+ export function getRelsPath(filepath) {
59
+ const path = parsePath(filepath);
60
+ return `${path.path}/_rels/${path.name}.rels`;
61
+ }
62
+ // =============================================================================
63
+ // XML utilities
64
+ // =============================================================================
65
+ const xmlDecodingMap = {
66
+ lt: "<",
67
+ gt: ">",
68
+ amp: "&",
69
+ quot: '"',
70
+ apos: "'"
71
+ };
72
+ export function xmlDecode(text) {
73
+ return text.replace(/&(#\d+|#x[0-9A-Fa-f]+|\w+);/g, (match, entity) => {
74
+ if (entity[0] === "#") {
75
+ // Numeric character reference
76
+ const code = entity[1] === "x" ? parseInt(entity.slice(2), 16) : parseInt(entity.slice(1));
77
+ return String.fromCodePoint(code);
78
+ }
79
+ return xmlDecodingMap[entity] || match;
80
+ });
81
+ }
82
+ // =============================================================================
83
+ // Parsing utilities
84
+ // =============================================================================
85
+ export function validInt(value) {
86
+ const i = typeof value === "number" ? value : parseInt(value, 10);
87
+ return Number.isNaN(i) ? 0 : i;
88
+ }
89
+ export function isDateFmt(fmt) {
90
+ if (!fmt) {
91
+ return false;
92
+ }
93
+ // must not be a string fmt
94
+ if (fmt.indexOf("@") > -1) {
95
+ return false;
96
+ }
97
+ // must remove all chars inside quotes and []
98
+ let cleanFmt = fmt.replace(/\[[^\]]*]/g, "");
99
+ cleanFmt = cleanFmt.replace(/"[^"]*"/g, "");
100
+ // then check for date formatting chars
101
+ return cleanFmt.match(/[ymdhMsb]+/) !== null;
102
+ }
103
+ export function parseBoolean(value) {
104
+ return value === true || value === "true" || value === 1 || value === "1";
105
+ }
106
+ // =============================================================================
107
+ // Collection utilities
108
+ // =============================================================================
109
+ export function* range(start, stop, step = 1) {
110
+ const compareOrder = step > 0 ? (a, b) => a < b : (a, b) => a > b;
111
+ for (let value = start; compareOrder(value, stop); value += step) {
112
+ yield value;
113
+ }
114
+ }
115
+ export function toSortedArray(values) {
116
+ const result = Array.from(values);
117
+ // If all numbers, use numeric sort
118
+ if (result.every(item => Number.isFinite(item))) {
119
+ return result.sort((a, b) => a - b);
120
+ }
121
+ return result.sort();
122
+ }
123
+ export function objectFromProps(props, value = null) {
124
+ return props.reduce((result, property) => {
125
+ result[property] = value;
126
+ return result;
127
+ }, {});
128
+ }
129
+ // =============================================================================
130
+ // Buffer utilities (cross-platform)
131
+ // =============================================================================
132
+ const textDecoder = new TextDecoder("utf-8");
133
+ /**
134
+ * Convert a Buffer, ArrayBuffer, or Uint8Array to a UTF-8 string
135
+ * Works in both Node.js and browser environments
136
+ */
137
+ export function bufferToString(chunk) {
138
+ if (typeof chunk === "string") {
139
+ return chunk;
140
+ }
141
+ return textDecoder.decode(chunk);
142
+ }
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Browser utility functions
3
+ * Re-exports shared utilities and adds browser-specific implementations
4
+ */
5
+ // Re-export all shared utilities
6
+ export { delay, nop, inherits, dateToExcel, excelToDate, toIsoDateString, parsePath, getRelsPath, xmlDecode, validInt, isDateFmt, parseBoolean, range, toSortedArray, objectFromProps, bufferToString } from "./utils.base.js";
7
+ // =============================================================================
8
+ // XML encoding (Browser version with full Unicode support)
9
+ // =============================================================================
10
+ const xmlEncodingMap = {
11
+ "<": "&lt;",
12
+ ">": "&gt;",
13
+ "&": "&amp;",
14
+ '"': "&quot;",
15
+ "'": "&apos;"
16
+ };
17
+ export function xmlEncode(text) {
18
+ // Handles special characters:
19
+ // 1. XML entities: < > & " '
20
+ // 2. Control characters (0x00-0x1F except tab, newline, carriage return)
21
+ // 3. Invalid XML characters: 0xFFFE, 0xFFFF
22
+ // 4. Characters that need escaping in attributes
23
+ // First pass: escape XML entities
24
+ let result = text.replace(/[<>&"']/g, char => xmlEncodingMap[char] || char);
25
+ // Second pass: handle control characters and invalid XML characters
26
+ // Valid XML chars: #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]
27
+ // oxlint-disable-next-line no-control-regex
28
+ result = result.replace(/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F\uFFFE\uFFFF]/g, char => {
29
+ const code = char.charCodeAt(0);
30
+ // For control characters, use numeric character reference
31
+ return `&#x${code.toString(16).toUpperCase()};`;
32
+ });
33
+ // Third pass: handle invalid surrogate pairs
34
+ result = result.replace(/[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?<![\uD800-\uDBFF])[\uDC00-\uDFFF]/g, () => "\uFFFD" // replacement character
35
+ );
36
+ return result;
37
+ }
38
+ // =============================================================================
39
+ // File system utilities (Browser stub - always returns false)
40
+ // =============================================================================
41
+ export function fileExists(_path) {
42
+ return Promise.resolve(false);
43
+ }
44
+ // =============================================================================
45
+ // Legacy export for backward compatibility
46
+ // =============================================================================
47
+ import { nop, inherits, dateToExcel, excelToDate, parsePath, getRelsPath, xmlDecode, validInt, isDateFmt, toIsoDateString, parseBoolean, range, toSortedArray, objectFromProps } from "./utils.base.js";
48
+ /** @deprecated Import functions directly instead of using the utils object */
49
+ export const utils = {
50
+ nop,
51
+ inherits,
52
+ dateToExcel,
53
+ excelToDate,
54
+ parsePath,
55
+ getRelsPath,
56
+ xmlEncode,
57
+ xmlDecode,
58
+ validInt,
59
+ isDateFmt,
60
+ fs: {
61
+ exists: fileExists
62
+ },
63
+ toIsoDateString,
64
+ parseBoolean,
65
+ range,
66
+ toSortedArray,
67
+ objectFromProps
68
+ };