@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
@@ -92,14 +92,14 @@ class WorkbookWriter {
92
92
  let buffer;
93
93
  if (base64) {
94
94
  // Use Buffer.from for efficient base64 decoding
95
- const base64Data = typeof data === "string" ? data : data.toString();
95
+ const base64Data = typeof data === "string" ? data : new TextDecoder().decode(data);
96
96
  buffer = Buffer.from(base64Data, "base64");
97
97
  }
98
98
  else if (typeof data === "string") {
99
99
  buffer = Buffer.from(data, "utf8");
100
100
  }
101
101
  else {
102
- buffer = new Uint8Array(data);
102
+ buffer = data;
103
103
  }
104
104
  zipFile.push(buffer, true); // true = final chunk
105
105
  }
@@ -119,15 +119,15 @@ class WorkbookWriter {
119
119
  // if there are any uncommitted worksheets, commit them now and wait
120
120
  const promises = this._worksheets.map(commitWorksheet);
121
121
  if (promises.length) {
122
- return Promise.all(promises);
122
+ return Promise.all(promises).then(() => { });
123
123
  }
124
124
  return Promise.resolve();
125
125
  }
126
126
  async commit() {
127
- // commit all worksheets, then add suplimentary files
127
+ // commit all worksheets, then add supplementary files
128
128
  await this.promise;
129
- await this.addMedia();
130
129
  await this._commitWorksheets();
130
+ await this.addMedia();
131
131
  await Promise.all([
132
132
  this.addContentTypes(),
133
133
  this.addApp(),
@@ -149,28 +149,39 @@ class WorkbookWriter {
149
149
  }
150
150
  return this._worksheets.length || 1;
151
151
  }
152
+ /**
153
+ * Add Image to Workbook and return the id
154
+ */
152
155
  addImage(image) {
153
156
  const id = this.media.length;
154
- const medium = Object.assign({}, image, {
157
+ const medium = {
158
+ ...image,
155
159
  type: "image",
156
160
  name: `image${id}.${image.extension}`
157
- });
161
+ };
158
162
  this.media.push(medium);
159
163
  return id;
160
164
  }
165
+ /**
166
+ * Get image by id
167
+ */
161
168
  getImage(id) {
162
169
  return this.media[id];
163
170
  }
164
- addWorksheet(name, options = {}) {
171
+ /**
172
+ * Add a new worksheet and return a reference to it
173
+ */
174
+ addWorksheet(name, options) {
165
175
  // it's possible to add a worksheet with different than default
166
176
  // shared string handling
167
177
  // in fact, it's even possible to switch it mid-sheet
168
- const useSharedStrings = options.useSharedStrings !== undefined ? options.useSharedStrings : this.useSharedStrings;
169
- if (options.tabColor) {
178
+ const opts = options || {};
179
+ const useSharedStrings = opts.useSharedStrings !== undefined ? opts.useSharedStrings : this.useSharedStrings;
180
+ if (opts.tabColor) {
170
181
  console.trace("tabColor option has moved to { properties: tabColor: {...} }");
171
- options.properties = Object.assign({
172
- tabColor: options.tabColor
173
- }, options.properties);
182
+ opts.properties = Object.assign({
183
+ tabColor: opts.tabColor
184
+ }, opts.properties);
174
185
  }
175
186
  const id = this.nextId;
176
187
  name = name || `sheet${id}`;
@@ -179,16 +190,19 @@ class WorkbookWriter {
179
190
  name,
180
191
  workbook: this,
181
192
  useSharedStrings,
182
- properties: options.properties,
183
- state: options.state,
184
- pageSetup: options.pageSetup,
185
- views: options.views,
186
- autoFilter: options.autoFilter,
187
- headerFooter: options.headerFooter
193
+ properties: opts.properties,
194
+ state: opts.state,
195
+ pageSetup: opts.pageSetup,
196
+ views: opts.views,
197
+ autoFilter: opts.autoFilter,
198
+ headerFooter: opts.headerFooter
188
199
  });
189
200
  this._worksheets[id] = worksheet;
190
201
  return worksheet;
191
202
  }
203
+ /**
204
+ * Fetch sheet by name or id
205
+ */
192
206
  getWorksheet(id) {
193
207
  if (id === undefined) {
194
208
  return this._worksheets.find(() => true);
@@ -197,7 +211,7 @@ class WorkbookWriter {
197
211
  return this._worksheets[id];
198
212
  }
199
213
  if (typeof id === "string") {
200
- return this._worksheets.find((worksheet) => worksheet && worksheet.name === id);
214
+ return this._worksheets.find(worksheet => worksheet && worksheet.name === id);
201
215
  }
202
216
  return undefined;
203
217
  }
@@ -250,7 +264,7 @@ class WorkbookWriter {
250
264
  reject(err);
251
265
  }
252
266
  else {
253
- resolve(data);
267
+ resolve(new Uint8Array(data));
254
268
  }
255
269
  });
256
270
  });
@@ -259,13 +273,13 @@ class WorkbookWriter {
259
273
  }
260
274
  if (medium.buffer) {
261
275
  this._addFile(medium.buffer, filename);
262
- return Promise.resolve();
276
+ return;
263
277
  }
264
278
  if (medium.base64) {
265
279
  const dataimg64 = medium.base64;
266
280
  const content = dataimg64.substring(dataimg64.indexOf(",") + 1);
267
281
  this._addFile(content, filename, true);
268
- return Promise.resolve();
282
+ return;
269
283
  }
270
284
  }
271
285
  throw new Error("Unsupported media");
@@ -25,7 +25,7 @@ class WorksheetReader extends EventEmitter {
25
25
  destroy() {
26
26
  throw new Error("Invalid Operation: destroy");
27
27
  }
28
- // return the current dimensions of the writer
28
+ // return the current dimensions of the reader
29
29
  get dimensions() {
30
30
  return this._dimensions;
31
31
  }
@@ -44,7 +44,7 @@ class WorksheetReader extends EventEmitter {
44
44
  if (col) {
45
45
  return col;
46
46
  }
47
- // otherise, assume letter
47
+ // otherwise, assume letter
48
48
  c = colCache.l2n(c);
49
49
  }
50
50
  if (!this._columns) {
@@ -85,9 +85,9 @@ class WorksheetReader extends EventEmitter {
85
85
  }
86
86
  async *[Symbol.asyncIterator]() {
87
87
  for await (const events of this.parse()) {
88
- for (const { eventType, value } of events) {
89
- if (eventType === "row") {
90
- yield value;
88
+ for (const event of events) {
89
+ if (event.eventType === "row") {
90
+ yield event.value;
91
91
  }
92
92
  }
93
93
  }
@@ -283,6 +283,7 @@ class WorksheetReader extends EventEmitter {
283
283
  cell.value = sharedStrings[index];
284
284
  }
285
285
  else {
286
+ // Streaming format - unresolved shared string reference
286
287
  cell.value = {
287
288
  sharedString: index
288
289
  };
@@ -299,19 +300,22 @@ class WorksheetReader extends EventEmitter {
299
300
  case "b":
300
301
  cell.value = parseInt(c.v.text, 10) !== 0;
301
302
  break;
302
- default:
303
- if (isDateFmt(cell.numFmt)) {
304
- cell.value = excelToDate(parseFloat(c.v.text), properties.model && properties.model.date1904);
303
+ default: {
304
+ const numFmtStr = typeof cell.numFmt === "string" ? cell.numFmt : cell.numFmt?.formatCode;
305
+ if (numFmtStr && isDateFmt(numFmtStr)) {
306
+ cell.value = excelToDate(parseFloat(c.v.text), properties?.model?.date1904);
305
307
  }
306
308
  else {
307
309
  cell.value = parseFloat(c.v.text);
308
310
  }
309
311
  break;
312
+ }
310
313
  }
311
314
  }
312
315
  if (hyperlinks) {
313
316
  const hyperlink = hyperlinks[c.ref];
314
317
  if (hyperlink) {
318
+ // Streaming-specific: assign text and hyperlink for further processing
315
319
  cell.text = cell.value;
316
320
  cell.value = undefined;
317
321
  cell.hyperlink = hyperlink;
@@ -275,20 +275,26 @@ class WorksheetWriter {
275
275
  }
276
276
  // iterate over every uncommitted row in the worksheet, including maybe empty rows
277
277
  eachRow(options, iteratee) {
278
- if (!iteratee) {
279
- iteratee = options;
280
- options = undefined;
278
+ let callback;
279
+ let opts;
280
+ if (typeof options === "function") {
281
+ callback = options;
282
+ opts = undefined;
281
283
  }
282
- if (options && options.includeEmpty) {
284
+ else {
285
+ callback = iteratee;
286
+ opts = options;
287
+ }
288
+ if (opts && opts.includeEmpty) {
283
289
  const n = this._nextRow;
284
290
  for (let i = this._rowZero; i < n; i++) {
285
- iteratee(this.getRow(i), i);
291
+ callback(this.getRow(i), i);
286
292
  }
287
293
  }
288
294
  else {
289
295
  this._rows.forEach(row => {
290
296
  if (row.hasValues) {
291
- iteratee(row, row.number);
297
+ callback(row, row.number);
292
298
  }
293
299
  });
294
300
  }
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Browser-compatible Buffer utilities
3
+ * Provides base64 encoding/decoding and a Buffer-like wrapper for Uint8Array
4
+ */
5
+ /**
6
+ * Convert Uint8Array to base64 string
7
+ */
8
+ export function uint8ArrayToBase64(bytes) {
9
+ let binary = "";
10
+ for (let i = 0; i < bytes.length; i++) {
11
+ binary += String.fromCharCode(bytes[i]);
12
+ }
13
+ return btoa(binary);
14
+ }
15
+ /**
16
+ * Convert base64 string to Uint8Array
17
+ */
18
+ export function base64ToUint8Array(base64) {
19
+ const binaryString = atob(base64);
20
+ const bytes = new Uint8Array(binaryString.length);
21
+ for (let i = 0; i < binaryString.length; i++) {
22
+ bytes[i] = binaryString.charCodeAt(i);
23
+ }
24
+ return bytes;
25
+ }
26
+ /**
27
+ * Buffer-like wrapper for Uint8Array with toString("base64") support
28
+ * This provides Node.js Buffer-like API for browser environments
29
+ */
30
+ export class BrowserBuffer extends Uint8Array {
31
+ toString(encoding) {
32
+ if (encoding === "base64") {
33
+ return uint8ArrayToBase64(this);
34
+ }
35
+ return new TextDecoder().decode(this);
36
+ }
37
+ static from(data) {
38
+ const buffer = new BrowserBuffer(data.length);
39
+ buffer.set(data);
40
+ return buffer;
41
+ }
42
+ }
43
+ /**
44
+ * Convert string to UTF-16LE Uint8Array (used for Excel password hashing)
45
+ */
46
+ export function stringToUtf16Le(str) {
47
+ const bytes = new Uint8Array(str.length * 2);
48
+ for (let i = 0; i < str.length; i++) {
49
+ const code = str.charCodeAt(i);
50
+ bytes[i * 2] = code & 0xff;
51
+ bytes[i * 2 + 1] = (code >> 8) & 0xff;
52
+ }
53
+ return bytes;
54
+ }
55
+ /**
56
+ * Concatenate multiple Uint8Arrays into one
57
+ */
58
+ export function concatUint8Arrays(...arrays) {
59
+ const totalLength = arrays.reduce((acc, arr) => acc + arr.length, 0);
60
+ const result = new Uint8Array(totalLength);
61
+ let offset = 0;
62
+ for (const arr of arrays) {
63
+ result.set(arr, offset);
64
+ offset += arr.length;
65
+ }
66
+ return result;
67
+ }
@@ -0,0 +1,237 @@
1
+ /**
2
+ * Browser-compatible Encryptor with pure JS SHA implementations
3
+ * This provides synchronous hash functions for browser compatibility
4
+ */
5
+ import { BrowserBuffer, base64ToUint8Array, uint8ArrayToBase64, stringToUtf16Le, concatUint8Arrays } from "./browser-buffer.js";
6
+ // Helper to convert number to little-endian Uint8Array
7
+ function uint32ToLe(num) {
8
+ const bytes = new Uint8Array(4);
9
+ bytes[0] = num & 0xff;
10
+ bytes[1] = (num >> 8) & 0xff;
11
+ bytes[2] = (num >> 16) & 0xff;
12
+ bytes[3] = (num >> 24) & 0xff;
13
+ return bytes;
14
+ }
15
+ // ============================================================================
16
+ // Pure JavaScript SHA-512 implementation
17
+ // ============================================================================
18
+ // SHA-512 constants (first 80 primes 2..409)
19
+ const K = new BigUint64Array([
20
+ 0x428a2f98d728ae22n,
21
+ 0x7137449123ef65cdn,
22
+ 0xb5c0fbcfec4d3b2fn,
23
+ 0xe9b5dba58189dbb4n,
24
+ 0x3956c25bf348b538n,
25
+ 0x59f111f1b605d019n,
26
+ 0x923f82a4af194f9bn,
27
+ 0xab1c5ed5da6d8118n,
28
+ 0xd807aa98a3030242n,
29
+ 0x12835b0145706fben,
30
+ 0x243185be4ee4b28cn,
31
+ 0x550c7dc3d5ffb4e2n,
32
+ 0x72be5d74f27b896fn,
33
+ 0x80deb1fe3b1696b1n,
34
+ 0x9bdc06a725c71235n,
35
+ 0xc19bf174cf692694n,
36
+ 0xe49b69c19ef14ad2n,
37
+ 0xefbe4786384f25e3n,
38
+ 0x0fc19dc68b8cd5b5n,
39
+ 0x240ca1cc77ac9c65n,
40
+ 0x2de92c6f592b0275n,
41
+ 0x4a7484aa6ea6e483n,
42
+ 0x5cb0a9dcbd41fbd4n,
43
+ 0x76f988da831153b5n,
44
+ 0x983e5152ee66dfabn,
45
+ 0xa831c66d2db43210n,
46
+ 0xb00327c898fb213fn,
47
+ 0xbf597fc7beef0ee4n,
48
+ 0xc6e00bf33da88fc2n,
49
+ 0xd5a79147930aa725n,
50
+ 0x06ca6351e003826fn,
51
+ 0x142929670a0e6e70n,
52
+ 0x27b70a8546d22ffcn,
53
+ 0x2e1b21385c26c926n,
54
+ 0x4d2c6dfc5ac42aedn,
55
+ 0x53380d139d95b3dfn,
56
+ 0x650a73548baf63den,
57
+ 0x766a0abb3c77b2a8n,
58
+ 0x81c2c92e47edaee6n,
59
+ 0x92722c851482353bn,
60
+ 0xa2bfe8a14cf10364n,
61
+ 0xa81a664bbc423001n,
62
+ 0xc24b8b70d0f89791n,
63
+ 0xc76c51a30654be30n,
64
+ 0xd192e819d6ef5218n,
65
+ 0xd69906245565a910n,
66
+ 0xf40e35855771202an,
67
+ 0x106aa07032bbd1b8n,
68
+ 0x19a4c116b8d2d0c8n,
69
+ 0x1e376c085141ab53n,
70
+ 0x2748774cdf8eeb99n,
71
+ 0x34b0bcb5e19b48a8n,
72
+ 0x391c0cb3c5c95a63n,
73
+ 0x4ed8aa4ae3418acbn,
74
+ 0x5b9cca4f7763e373n,
75
+ 0x682e6ff3d6b2b8a3n,
76
+ 0x748f82ee5defb2fcn,
77
+ 0x78a5636f43172f60n,
78
+ 0x84c87814a1f0ab72n,
79
+ 0x8cc702081a6439ecn,
80
+ 0x90befffa23631e28n,
81
+ 0xa4506cebde82bde9n,
82
+ 0xbef9a3f7b2c67915n,
83
+ 0xc67178f2e372532bn,
84
+ 0xca273eceea26619cn,
85
+ 0xd186b8c721c0c207n,
86
+ 0xeada7dd6cde0eb1en,
87
+ 0xf57d4f7fee6ed178n,
88
+ 0x06f067aa72176fban,
89
+ 0x0a637dc5a2c898a6n,
90
+ 0x113f9804bef90daen,
91
+ 0x1b710b35131c471bn,
92
+ 0x28db77f523047d84n,
93
+ 0x32caab7b40c72493n,
94
+ 0x3c9ebe0a15c9bebcn,
95
+ 0x431d67c49c100d4cn,
96
+ 0x4cc5d4becb3e42b6n,
97
+ 0x597f299cfc657e2an,
98
+ 0x5fcb6fab3ad6faecn,
99
+ 0x6c44198c4a475817n
100
+ ]);
101
+ // Initial hash values for SHA-512
102
+ const H0 = new BigUint64Array([
103
+ 0x6a09e667f3bcc908n,
104
+ 0xbb67ae8584caa73bn,
105
+ 0x3c6ef372fe94f82bn,
106
+ 0xa54ff53a5f1d36f1n,
107
+ 0x510e527fade682d1n,
108
+ 0x9b05688c2b3e6c1fn,
109
+ 0x1f83d9abfb41bd6bn,
110
+ 0x5be0cd19137e2179n
111
+ ]);
112
+ function rotr64(x, n) {
113
+ return ((x >> BigInt(n)) | (x << BigInt(64 - n))) & 0xffffffffffffffffn;
114
+ }
115
+ function sha512(message) {
116
+ // Pre-processing: adding padding bits
117
+ const msgLen = message.length;
118
+ const msgBitLen = BigInt(msgLen * 8);
119
+ // Calculate padding length (message + 1 + padding + 16 bytes for length) should be multiple of 128
120
+ const padLen = (128 - ((msgLen + 17) % 128)) % 128;
121
+ const paddedLen = msgLen + 1 + padLen + 16;
122
+ const padded = new Uint8Array(paddedLen);
123
+ padded.set(message);
124
+ padded[msgLen] = 0x80;
125
+ // Append original length in bits as 128-bit big-endian (we only use lower 64 bits)
126
+ const view = new DataView(padded.buffer);
127
+ // Upper 64 bits (always 0 for messages < 2^64 bits)
128
+ view.setBigUint64(paddedLen - 16, 0n, false);
129
+ // Lower 64 bits
130
+ view.setBigUint64(paddedLen - 8, msgBitLen, false);
131
+ // Initialize hash values
132
+ const H = new BigUint64Array(H0);
133
+ // Process message in 1024-bit (128-byte) chunks
134
+ const W = new BigUint64Array(80);
135
+ for (let chunkStart = 0; chunkStart < paddedLen; chunkStart += 128) {
136
+ const chunkView = new DataView(padded.buffer, chunkStart, 128);
137
+ // Copy chunk into first 16 words W[0..15]
138
+ for (let i = 0; i < 16; i++) {
139
+ W[i] = chunkView.getBigUint64(i * 8, false);
140
+ }
141
+ // Extend the first 16 words into the remaining 64 words W[16..79]
142
+ for (let i = 16; i < 80; i++) {
143
+ const s0 = rotr64(W[i - 15], 1) ^ rotr64(W[i - 15], 8) ^ (W[i - 15] >> 7n);
144
+ const s1 = rotr64(W[i - 2], 19) ^ rotr64(W[i - 2], 61) ^ (W[i - 2] >> 6n);
145
+ W[i] = (W[i - 16] + s0 + W[i - 7] + s1) & 0xffffffffffffffffn;
146
+ }
147
+ // Initialize working variables
148
+ let a = H[0], b = H[1], c = H[2], d = H[3];
149
+ let e = H[4], f = H[5], g = H[6], h = H[7];
150
+ // Main loop
151
+ for (let i = 0; i < 80; i++) {
152
+ const S1 = rotr64(e, 14) ^ rotr64(e, 18) ^ rotr64(e, 41);
153
+ const ch = (e & f) ^ (~e & g);
154
+ const temp1 = (h + S1 + ch + K[i] + W[i]) & 0xffffffffffffffffn;
155
+ const S0 = rotr64(a, 28) ^ rotr64(a, 34) ^ rotr64(a, 39);
156
+ const maj = (a & b) ^ (a & c) ^ (b & c);
157
+ const temp2 = (S0 + maj) & 0xffffffffffffffffn;
158
+ h = g;
159
+ g = f;
160
+ f = e;
161
+ e = (d + temp1) & 0xffffffffffffffffn;
162
+ d = c;
163
+ c = b;
164
+ b = a;
165
+ a = (temp1 + temp2) & 0xffffffffffffffffn;
166
+ }
167
+ // Add compressed chunk to current hash value
168
+ H[0] = (H[0] + a) & 0xffffffffffffffffn;
169
+ H[1] = (H[1] + b) & 0xffffffffffffffffn;
170
+ H[2] = (H[2] + c) & 0xffffffffffffffffn;
171
+ H[3] = (H[3] + d) & 0xffffffffffffffffn;
172
+ H[4] = (H[4] + e) & 0xffffffffffffffffn;
173
+ H[5] = (H[5] + f) & 0xffffffffffffffffn;
174
+ H[6] = (H[6] + g) & 0xffffffffffffffffn;
175
+ H[7] = (H[7] + h) & 0xffffffffffffffffn;
176
+ }
177
+ // Produce the final hash value (big-endian)
178
+ const result = new Uint8Array(64);
179
+ const resultView = new DataView(result.buffer);
180
+ for (let i = 0; i < 8; i++) {
181
+ resultView.setBigUint64(i * 8, H[i], false);
182
+ }
183
+ return result;
184
+ }
185
+ // ============================================================================
186
+ // Encryptor implementation
187
+ // ============================================================================
188
+ const Encryptor = {
189
+ /**
190
+ * Calculate a hash of the concatenated buffers with the given algorithm.
191
+ * @param algorithm - The hash algorithm.
192
+ * @returns The hash as Uint8Array
193
+ */
194
+ hash(algorithm, ...buffers) {
195
+ const data = concatUint8Arrays(...buffers);
196
+ const algo = algorithm.toLowerCase().replace("-", "");
197
+ if (algo === "sha512") {
198
+ return sha512(data);
199
+ }
200
+ throw new Error(`Hash algorithm '${algorithm}' not supported in browser sync mode!`);
201
+ },
202
+ /**
203
+ * Convert a password into an encryption key
204
+ * @param password - The password
205
+ * @param hashAlgorithm - The hash algorithm
206
+ * @param saltValue - The salt value (base64 encoded)
207
+ * @param spinCount - The spin count
208
+ * @returns The encryption key (base64 encoded)
209
+ */
210
+ convertPasswordToHash(password, hashAlgorithm, saltValue, spinCount) {
211
+ const algo = hashAlgorithm.toLowerCase().replace("-", "");
212
+ if (algo !== "sha512") {
213
+ throw new Error(`Hash algorithm '${hashAlgorithm}' not supported in browser!`);
214
+ }
215
+ // Password must be in unicode buffer (UTF-16LE)
216
+ const passwordBuffer = stringToUtf16Le(password);
217
+ // Generate the initial hash
218
+ const saltBuffer = base64ToUint8Array(saltValue);
219
+ let key = this.hash(hashAlgorithm, saltBuffer, passwordBuffer);
220
+ // Now regenerate until spin count
221
+ for (let i = 0; i < spinCount; i++) {
222
+ const iterator = uint32ToLe(i);
223
+ key = this.hash(hashAlgorithm, key, iterator);
224
+ }
225
+ return uint8ArrayToBase64(key);
226
+ },
227
+ /**
228
+ * Generates cryptographically strong pseudo-random data.
229
+ * @param size The size argument is a number indicating the number of bytes to generate.
230
+ */
231
+ randomBytes(size) {
232
+ const bytes = new BrowserBuffer(size);
233
+ crypto.getRandomValues(bytes);
234
+ return bytes;
235
+ }
236
+ };
237
+ export { Encryptor };