@rowsncolumns/toolkit 24.4.1

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 (456) hide show
  1. package/LICENSE.md +100 -0
  2. package/Readme.md +27 -0
  3. package/dist/cjs/autofilter-condition.d.ts +43 -0
  4. package/dist/cjs/autofilter-condition.d.ts.map +1 -0
  5. package/dist/cjs/autofilter-condition.js +155 -0
  6. package/dist/cjs/csv-export.d.ts +49 -0
  7. package/dist/cjs/csv-export.d.ts.map +1 -0
  8. package/dist/cjs/csv-export.js +142 -0
  9. package/dist/cjs/csv-import-worker.d.ts +16 -0
  10. package/dist/cjs/csv-import-worker.d.ts.map +1 -0
  11. package/dist/cjs/csv-import-worker.js +60 -0
  12. package/dist/cjs/csv-import.d.ts +38 -0
  13. package/dist/cjs/csv-import.d.ts.map +1 -0
  14. package/dist/cjs/csv-import.js +166 -0
  15. package/dist/cjs/csv-parser/helpers.d.ts +14 -0
  16. package/dist/cjs/csv-parser/helpers.d.ts.map +1 -0
  17. package/dist/cjs/csv-parser/helpers.js +145 -0
  18. package/dist/cjs/csv-parser/types.d.ts +66 -0
  19. package/dist/cjs/csv-parser/types.d.ts.map +1 -0
  20. package/dist/cjs/csv-parser/types.js +14 -0
  21. package/dist/cjs/csv-parser/worker.d.ts +2 -0
  22. package/dist/cjs/csv-parser/worker.d.ts.map +1 -0
  23. package/dist/cjs/csv-parser/worker.js +200 -0
  24. package/dist/cjs/excel-export.d.ts +11 -0
  25. package/dist/cjs/excel-export.d.ts.map +1 -0
  26. package/dist/cjs/excel-export.js +22 -0
  27. package/dist/cjs/excel-import-session.d.ts +51 -0
  28. package/dist/cjs/excel-import-session.d.ts.map +1 -0
  29. package/dist/cjs/excel-import-session.js +307 -0
  30. package/dist/cjs/excel-import-worker.d.ts +7 -0
  31. package/dist/cjs/excel-import-worker.d.ts.map +1 -0
  32. package/dist/cjs/excel-import-worker.js +119 -0
  33. package/dist/cjs/excel-parser/builtin-numfmts.d.ts +24 -0
  34. package/dist/cjs/excel-parser/builtin-numfmts.d.ts.map +1 -0
  35. package/dist/cjs/excel-parser/builtin-numfmts.js +63 -0
  36. package/dist/cjs/excel-parser/cfb-decryptor.d.ts +53 -0
  37. package/dist/cjs/excel-parser/cfb-decryptor.d.ts.map +1 -0
  38. package/dist/cjs/excel-parser/cfb-decryptor.js +553 -0
  39. package/dist/cjs/excel-parser/cfb-encryptor.d.ts +23 -0
  40. package/dist/cjs/excel-parser/cfb-encryptor.d.ts.map +1 -0
  41. package/dist/cjs/excel-parser/cfb-encryptor.js +200 -0
  42. package/dist/cjs/excel-parser/dv-cell-stamp.d.ts +29 -0
  43. package/dist/cjs/excel-parser/dv-cell-stamp.d.ts.map +1 -0
  44. package/dist/cjs/excel-parser/dv-cell-stamp.js +239 -0
  45. package/dist/cjs/excel-parser/helpers.d.ts +28 -0
  46. package/dist/cjs/excel-parser/helpers.d.ts.map +1 -0
  47. package/dist/cjs/excel-parser/helpers.js +188 -0
  48. package/dist/cjs/excel-parser/interface.d.ts +179 -0
  49. package/dist/cjs/excel-parser/interface.d.ts.map +1 -0
  50. package/dist/cjs/excel-parser/interface.js +1 -0
  51. package/dist/cjs/excel-parser/plugins/base/index.d.ts +31 -0
  52. package/dist/cjs/excel-parser/plugins/base/index.d.ts.map +1 -0
  53. package/dist/cjs/excel-parser/plugins/base/index.js +101 -0
  54. package/dist/cjs/excel-parser/plugins/ods/conditional-formatting.d.ts +16 -0
  55. package/dist/cjs/excel-parser/plugins/ods/conditional-formatting.d.ts.map +1 -0
  56. package/dist/cjs/excel-parser/plugins/ods/conditional-formatting.js +488 -0
  57. package/dist/cjs/excel-parser/plugins/ods/data-validations.d.ts +15 -0
  58. package/dist/cjs/excel-parser/plugins/ods/data-validations.d.ts.map +1 -0
  59. package/dist/cjs/excel-parser/plugins/ods/data-validations.js +353 -0
  60. package/dist/cjs/excel-parser/plugins/ods/formula.d.ts +8 -0
  61. package/dist/cjs/excel-parser/plugins/ods/formula.d.ts.map +1 -0
  62. package/dist/cjs/excel-parser/plugins/ods/formula.js +82 -0
  63. package/dist/cjs/excel-parser/plugins/ods/index.d.ts +122 -0
  64. package/dist/cjs/excel-parser/plugins/ods/index.d.ts.map +1 -0
  65. package/dist/cjs/excel-parser/plugins/ods/index.js +3642 -0
  66. package/dist/cjs/excel-parser/plugins/ods/sparklines.d.ts +25 -0
  67. package/dist/cjs/excel-parser/plugins/ods/sparklines.d.ts.map +1 -0
  68. package/dist/cjs/excel-parser/plugins/ods/sparklines.js +221 -0
  69. package/dist/cjs/excel-parser/plugins/ods/styles.d.ts +60 -0
  70. package/dist/cjs/excel-parser/plugins/ods/styles.d.ts.map +1 -0
  71. package/dist/cjs/excel-parser/plugins/ods/styles.js +808 -0
  72. package/dist/cjs/excel-parser/plugins/ods/types.d.ts +7 -0
  73. package/dist/cjs/excel-parser/plugins/ods/types.d.ts.map +1 -0
  74. package/dist/cjs/excel-parser/plugins/ods/types.js +1 -0
  75. package/dist/cjs/excel-parser/plugins/xls/index.d.ts +5 -0
  76. package/dist/cjs/excel-parser/plugins/xls/index.d.ts.map +1 -0
  77. package/dist/cjs/excel-parser/plugins/xls/index.js +19 -0
  78. package/dist/cjs/excel-parser/plugins/xlsb/biff-record-reader.d.ts +13 -0
  79. package/dist/cjs/excel-parser/plugins/xlsb/biff-record-reader.d.ts.map +1 -0
  80. package/dist/cjs/excel-parser/plugins/xlsb/biff-record-reader.js +49 -0
  81. package/dist/cjs/excel-parser/plugins/xlsb/index.d.ts +117 -0
  82. package/dist/cjs/excel-parser/plugins/xlsb/index.d.ts.map +1 -0
  83. package/dist/cjs/excel-parser/plugins/xlsb/index.js +2972 -0
  84. package/dist/cjs/excel-parser/plugins/xlsb/rgce-parser.d.ts +18 -0
  85. package/dist/cjs/excel-parser/plugins/xlsb/rgce-parser.d.ts.map +1 -0
  86. package/dist/cjs/excel-parser/plugins/xlsb/rgce-parser.js +527 -0
  87. package/dist/cjs/excel-parser/plugins/xlsm/index.d.ts +5 -0
  88. package/dist/cjs/excel-parser/plugins/xlsm/index.d.ts.map +1 -0
  89. package/dist/cjs/excel-parser/plugins/xlsm/index.js +10 -0
  90. package/dist/cjs/excel-parser/plugins/xlsx/charts.d.ts +60 -0
  91. package/dist/cjs/excel-parser/plugins/xlsx/charts.d.ts.map +1 -0
  92. package/dist/cjs/excel-parser/plugins/xlsx/charts.js +2178 -0
  93. package/dist/cjs/excel-parser/plugins/xlsx/conditional-formatting.d.ts +18 -0
  94. package/dist/cjs/excel-parser/plugins/xlsx/conditional-formatting.d.ts.map +1 -0
  95. package/dist/cjs/excel-parser/plugins/xlsx/conditional-formatting.js +620 -0
  96. package/dist/cjs/excel-parser/plugins/xlsx/data-validations.d.ts +4 -0
  97. package/dist/cjs/excel-parser/plugins/xlsx/data-validations.d.ts.map +1 -0
  98. package/dist/cjs/excel-parser/plugins/xlsx/data-validations.js +515 -0
  99. package/dist/cjs/excel-parser/plugins/xlsx/drawing.d.ts +39 -0
  100. package/dist/cjs/excel-parser/plugins/xlsx/drawing.d.ts.map +1 -0
  101. package/dist/cjs/excel-parser/plugins/xlsx/drawing.js +941 -0
  102. package/dist/cjs/excel-parser/plugins/xlsx/index.d.ts +320 -0
  103. package/dist/cjs/excel-parser/plugins/xlsx/index.d.ts.map +1 -0
  104. package/dist/cjs/excel-parser/plugins/xlsx/index.js +6056 -0
  105. package/dist/cjs/excel-parser/plugins/xlsx/numfmt.d.ts +2 -0
  106. package/dist/cjs/excel-parser/plugins/xlsx/numfmt.d.ts.map +1 -0
  107. package/dist/cjs/excel-parser/plugins/xlsx/numfmt.js +3 -0
  108. package/dist/cjs/excel-parser/plugins/xlsx/pivots.d.ts +40 -0
  109. package/dist/cjs/excel-parser/plugins/xlsx/pivots.d.ts.map +1 -0
  110. package/dist/cjs/excel-parser/plugins/xlsx/pivots.js +342 -0
  111. package/dist/cjs/excel-parser/plugins/xlsx/relationships.d.ts +8 -0
  112. package/dist/cjs/excel-parser/plugins/xlsx/relationships.d.ts.map +1 -0
  113. package/dist/cjs/excel-parser/plugins/xlsx/relationships.js +26 -0
  114. package/dist/cjs/excel-parser/plugins/xlsx/sheet-views.d.ts +26 -0
  115. package/dist/cjs/excel-parser/plugins/xlsx/sheet-views.d.ts.map +1 -0
  116. package/dist/cjs/excel-parser/plugins/xlsx/sheet-views.js +59 -0
  117. package/dist/cjs/excel-parser/plugins/xlsx/styles.d.ts +44 -0
  118. package/dist/cjs/excel-parser/plugins/xlsx/styles.d.ts.map +1 -0
  119. package/dist/cjs/excel-parser/plugins/xlsx/styles.js +1377 -0
  120. package/dist/cjs/excel-parser/plugins/xlsx/theme.d.ts +50 -0
  121. package/dist/cjs/excel-parser/plugins/xlsx/theme.d.ts.map +1 -0
  122. package/dist/cjs/excel-parser/plugins/xlsx/theme.js +150 -0
  123. package/dist/cjs/excel-parser/plugins/xlsx/threaded-comments.d.ts +47 -0
  124. package/dist/cjs/excel-parser/plugins/xlsx/threaded-comments.d.ts.map +1 -0
  125. package/dist/cjs/excel-parser/plugins/xlsx/threaded-comments.js +141 -0
  126. package/dist/cjs/excel-parser/plugins/xlsx/value-type-detection.d.ts +44 -0
  127. package/dist/cjs/excel-parser/plugins/xlsx/value-type-detection.d.ts.map +1 -0
  128. package/dist/cjs/excel-parser/plugins/xlsx/value-type-detection.js +407 -0
  129. package/dist/cjs/excel-parser/registry.d.ts +5 -0
  130. package/dist/cjs/excel-parser/registry.d.ts.map +1 -0
  131. package/dist/cjs/excel-parser/registry.js +21 -0
  132. package/dist/cjs/excel-parser/style-registry.d.ts +51 -0
  133. package/dist/cjs/excel-parser/style-registry.d.ts.map +1 -0
  134. package/dist/cjs/excel-parser/style-registry.js +175 -0
  135. package/dist/cjs/excel-parser/theme-default.d.ts +3 -0
  136. package/dist/cjs/excel-parser/theme-default.d.ts.map +1 -0
  137. package/dist/cjs/excel-parser/theme-default.js +19 -0
  138. package/dist/cjs/excel-parser/types.d.ts +365 -0
  139. package/dist/cjs/excel-parser/types.d.ts.map +1 -0
  140. package/dist/cjs/excel-parser/types.js +59 -0
  141. package/dist/cjs/excel-parser/utils.d.ts +6 -0
  142. package/dist/cjs/excel-parser/utils.d.ts.map +1 -0
  143. package/dist/cjs/excel-parser/utils.js +30 -0
  144. package/dist/cjs/excel-parser/workbook.d.ts +51 -0
  145. package/dist/cjs/excel-parser/workbook.d.ts.map +1 -0
  146. package/dist/cjs/excel-parser/workbook.js +317 -0
  147. package/dist/cjs/excel-parser/worker.d.ts +2 -0
  148. package/dist/cjs/excel-parser/worker.d.ts.map +1 -0
  149. package/dist/cjs/excel-parser/worker.js +1149 -0
  150. package/dist/cjs/excel-parser/zip-parser-streaming.d.ts +13 -0
  151. package/dist/cjs/excel-parser/zip-parser-streaming.d.ts.map +1 -0
  152. package/dist/cjs/excel-parser/zip-parser-streaming.js +200 -0
  153. package/dist/cjs/excel-parser/zip-parser.d.ts +11 -0
  154. package/dist/cjs/excel-parser/zip-parser.d.ts.map +1 -0
  155. package/dist/cjs/excel-parser/zip-parser.js +49 -0
  156. package/dist/cjs/exporter/invalid-data-validation.d.ts +19 -0
  157. package/dist/cjs/exporter/invalid-data-validation.d.ts.map +1 -0
  158. package/dist/cjs/exporter/invalid-data-validation.js +39 -0
  159. package/dist/cjs/exporter/ods/ods-export.d.ts +26 -0
  160. package/dist/cjs/exporter/ods/ods-export.d.ts.map +1 -0
  161. package/dist/cjs/exporter/ods/ods-export.js +3714 -0
  162. package/dist/cjs/exporter/ods/sparkline-builder.d.ts +33 -0
  163. package/dist/cjs/exporter/ods/sparkline-builder.d.ts.map +1 -0
  164. package/dist/cjs/exporter/ods/sparkline-builder.js +221 -0
  165. package/dist/cjs/exporter/xlsx/chart-builder.d.ts +3 -0
  166. package/dist/cjs/exporter/xlsx/chart-builder.d.ts.map +1 -0
  167. package/dist/cjs/exporter/xlsx/chart-builder.js +1901 -0
  168. package/dist/cjs/exporter/xlsx/chart-templates.d.ts +1781 -0
  169. package/dist/cjs/exporter/xlsx/chart-templates.d.ts.map +1 -0
  170. package/dist/cjs/exporter/xlsx/chart-templates.js +1798 -0
  171. package/dist/cjs/exporter/xlsx/future-functions.d.ts +10 -0
  172. package/dist/cjs/exporter/xlsx/future-functions.d.ts.map +1 -0
  173. package/dist/cjs/exporter/xlsx/future-functions.js +264 -0
  174. package/dist/cjs/exporter/xlsx/pivot-builder.d.ts +58 -0
  175. package/dist/cjs/exporter/xlsx/pivot-builder.d.ts.map +1 -0
  176. package/dist/cjs/exporter/xlsx/pivot-builder.js +277 -0
  177. package/dist/cjs/exporter/xlsx/power-query-builder.d.ts +26 -0
  178. package/dist/cjs/exporter/xlsx/power-query-builder.d.ts.map +1 -0
  179. package/dist/cjs/exporter/xlsx/power-query-builder.js +306 -0
  180. package/dist/cjs/exporter/xlsx/slicer-builder.d.ts +11 -0
  181. package/dist/cjs/exporter/xlsx/slicer-builder.d.ts.map +1 -0
  182. package/dist/cjs/exporter/xlsx/slicer-builder.js +87 -0
  183. package/dist/cjs/exporter/xlsx/sparkline-builder.d.ts +61 -0
  184. package/dist/cjs/exporter/xlsx/sparkline-builder.d.ts.map +1 -0
  185. package/dist/cjs/exporter/xlsx/sparkline-builder.js +489 -0
  186. package/dist/cjs/exporter/xlsx/style-builder.d.ts +93 -0
  187. package/dist/cjs/exporter/xlsx/style-builder.d.ts.map +1 -0
  188. package/dist/cjs/exporter/xlsx/style-builder.js +813 -0
  189. package/dist/cjs/exporter/xlsx/threaded-comments-builder.d.ts +58 -0
  190. package/dist/cjs/exporter/xlsx/threaded-comments-builder.d.ts.map +1 -0
  191. package/dist/cjs/exporter/xlsx/threaded-comments-builder.js +189 -0
  192. package/dist/cjs/exporter/xlsx/xlsx-export.d.ts +121 -0
  193. package/dist/cjs/exporter/xlsx/xlsx-export.d.ts.map +1 -0
  194. package/dist/cjs/exporter/xlsx/xlsx-export.js +4596 -0
  195. package/dist/cjs/helpers/theme-xml-generator.d.ts +8 -0
  196. package/dist/cjs/helpers/theme-xml-generator.d.ts.map +1 -0
  197. package/dist/cjs/helpers/theme-xml-generator.js +33 -0
  198. package/dist/cjs/helpers.d.ts +34 -0
  199. package/dist/cjs/helpers.d.ts.map +1 -0
  200. package/dist/cjs/helpers.js +189 -0
  201. package/dist/cjs/index.d.ts +16 -0
  202. package/dist/cjs/index.d.ts.map +1 -0
  203. package/dist/cjs/index.js +15 -0
  204. package/dist/cjs/indexed-colors.d.ts +2 -0
  205. package/dist/cjs/indexed-colors.d.ts.map +1 -0
  206. package/dist/cjs/indexed-colors.js +75 -0
  207. package/dist/cjs/ods-export.d.ts +24 -0
  208. package/dist/cjs/ods-export.d.ts.map +1 -0
  209. package/dist/cjs/ods-export.js +23 -0
  210. package/dist/cjs/parse.d.ts +24 -0
  211. package/dist/cjs/parse.d.ts.map +1 -0
  212. package/dist/cjs/parse.js +68 -0
  213. package/dist/cjs/power-query.d.ts +41 -0
  214. package/dist/cjs/power-query.d.ts.map +1 -0
  215. package/dist/cjs/power-query.js +22 -0
  216. package/dist/cjs/server.d.ts +9 -0
  217. package/dist/cjs/server.d.ts.map +1 -0
  218. package/dist/cjs/server.js +8 -0
  219. package/dist/cjs/theme1.d.ts +3 -0
  220. package/dist/cjs/theme1.d.ts.map +1 -0
  221. package/dist/cjs/theme1.js +2 -0
  222. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -0
  223. package/dist/cjs/types.d.ts +14 -0
  224. package/dist/cjs/types.d.ts.map +1 -0
  225. package/dist/cjs/types.js +14 -0
  226. package/dist/cjs/vitest.config.d.ts +3 -0
  227. package/dist/cjs/vitest.config.d.ts.map +1 -0
  228. package/dist/cjs/vitest.config.js +16 -0
  229. package/dist/esm/autofilter-condition.d.ts +43 -0
  230. package/dist/esm/autofilter-condition.d.ts.map +1 -0
  231. package/dist/esm/autofilter-condition.js +145 -0
  232. package/dist/esm/csv-export.d.ts +49 -0
  233. package/dist/esm/csv-export.d.ts.map +1 -0
  234. package/dist/esm/csv-export.js +126 -0
  235. package/dist/esm/csv-import-worker.d.ts +16 -0
  236. package/dist/esm/csv-import-worker.d.ts.map +1 -0
  237. package/dist/esm/csv-import-worker.js +60 -0
  238. package/dist/esm/csv-import.d.ts +38 -0
  239. package/dist/esm/csv-import.d.ts.map +1 -0
  240. package/dist/esm/csv-import.js +132 -0
  241. package/dist/esm/csv-parser/helpers.d.ts +14 -0
  242. package/dist/esm/csv-parser/helpers.d.ts.map +1 -0
  243. package/dist/esm/csv-parser/helpers.js +0 -0
  244. package/dist/esm/csv-parser/types.d.ts +66 -0
  245. package/dist/esm/csv-parser/types.d.ts.map +1 -0
  246. package/dist/esm/csv-parser/types.js +14 -0
  247. package/dist/esm/csv-parser/worker.d.ts +2 -0
  248. package/dist/esm/csv-parser/worker.d.ts.map +1 -0
  249. package/dist/esm/csv-parser/worker.js +154 -0
  250. package/dist/esm/excel-export.d.ts +11 -0
  251. package/dist/esm/excel-export.d.ts.map +1 -0
  252. package/dist/esm/excel-export.js +13 -0
  253. package/dist/esm/excel-import-session.d.ts +51 -0
  254. package/dist/esm/excel-import-session.d.ts.map +1 -0
  255. package/dist/esm/excel-import-session.js +255 -0
  256. package/dist/esm/excel-import-worker.d.ts +7 -0
  257. package/dist/esm/excel-import-worker.d.ts.map +1 -0
  258. package/dist/esm/excel-import-worker.js +116 -0
  259. package/dist/esm/excel-parser/builtin-numfmts.d.ts +24 -0
  260. package/dist/esm/excel-parser/builtin-numfmts.d.ts.map +1 -0
  261. package/dist/esm/excel-parser/builtin-numfmts.js +59 -0
  262. package/dist/esm/excel-parser/cfb-decryptor.d.ts +53 -0
  263. package/dist/esm/excel-parser/cfb-decryptor.d.ts.map +1 -0
  264. package/dist/esm/excel-parser/cfb-decryptor.js +493 -0
  265. package/dist/esm/excel-parser/cfb-encryptor.d.ts +23 -0
  266. package/dist/esm/excel-parser/cfb-encryptor.d.ts.map +1 -0
  267. package/dist/esm/excel-parser/cfb-encryptor.js +181 -0
  268. package/dist/esm/excel-parser/dv-cell-stamp.d.ts +29 -0
  269. package/dist/esm/excel-parser/dv-cell-stamp.d.ts.map +1 -0
  270. package/dist/esm/excel-parser/dv-cell-stamp.js +155 -0
  271. package/dist/esm/excel-parser/helpers.d.ts +28 -0
  272. package/dist/esm/excel-parser/helpers.d.ts.map +1 -0
  273. package/dist/esm/excel-parser/helpers.js +160 -0
  274. package/dist/esm/excel-parser/interface.d.ts +179 -0
  275. package/dist/esm/excel-parser/interface.d.ts.map +1 -0
  276. package/dist/esm/excel-parser/interface.js +1 -0
  277. package/dist/esm/excel-parser/plugins/base/index.d.ts +31 -0
  278. package/dist/esm/excel-parser/plugins/base/index.d.ts.map +1 -0
  279. package/dist/esm/excel-parser/plugins/base/index.js +64 -0
  280. package/dist/esm/excel-parser/plugins/ods/conditional-formatting.d.ts +16 -0
  281. package/dist/esm/excel-parser/plugins/ods/conditional-formatting.d.ts.map +1 -0
  282. package/dist/esm/excel-parser/plugins/ods/conditional-formatting.js +405 -0
  283. package/dist/esm/excel-parser/plugins/ods/data-validations.d.ts +15 -0
  284. package/dist/esm/excel-parser/plugins/ods/data-validations.d.ts.map +1 -0
  285. package/dist/esm/excel-parser/plugins/ods/data-validations.js +331 -0
  286. package/dist/esm/excel-parser/plugins/ods/formula.d.ts +8 -0
  287. package/dist/esm/excel-parser/plugins/ods/formula.d.ts.map +1 -0
  288. package/dist/esm/excel-parser/plugins/ods/formula.js +82 -0
  289. package/dist/esm/excel-parser/plugins/ods/index.d.ts +122 -0
  290. package/dist/esm/excel-parser/plugins/ods/index.d.ts.map +1 -0
  291. package/dist/esm/excel-parser/plugins/ods/index.js +2896 -0
  292. package/dist/esm/excel-parser/plugins/ods/sparklines.d.ts +25 -0
  293. package/dist/esm/excel-parser/plugins/ods/sparklines.d.ts.map +1 -0
  294. package/dist/esm/excel-parser/plugins/ods/sparklines.js +188 -0
  295. package/dist/esm/excel-parser/plugins/ods/styles.d.ts +60 -0
  296. package/dist/esm/excel-parser/plugins/ods/styles.d.ts.map +1 -0
  297. package/dist/esm/excel-parser/plugins/ods/styles.js +732 -0
  298. package/dist/esm/excel-parser/plugins/ods/types.d.ts +7 -0
  299. package/dist/esm/excel-parser/plugins/ods/types.d.ts.map +1 -0
  300. package/dist/esm/excel-parser/plugins/ods/types.js +1 -0
  301. package/dist/esm/excel-parser/plugins/xls/index.d.ts +5 -0
  302. package/dist/esm/excel-parser/plugins/xls/index.d.ts.map +1 -0
  303. package/dist/esm/excel-parser/plugins/xls/index.js +7 -0
  304. package/dist/esm/excel-parser/plugins/xlsb/biff-record-reader.d.ts +13 -0
  305. package/dist/esm/excel-parser/plugins/xlsb/biff-record-reader.d.ts.map +1 -0
  306. package/dist/esm/excel-parser/plugins/xlsb/biff-record-reader.js +48 -0
  307. package/dist/esm/excel-parser/plugins/xlsb/index.d.ts +117 -0
  308. package/dist/esm/excel-parser/plugins/xlsb/index.d.ts.map +1 -0
  309. package/dist/esm/excel-parser/plugins/xlsb/index.js +2339 -0
  310. package/dist/esm/excel-parser/plugins/xlsb/rgce-parser.d.ts +18 -0
  311. package/dist/esm/excel-parser/plugins/xlsb/rgce-parser.d.ts.map +1 -0
  312. package/dist/esm/excel-parser/plugins/xlsb/rgce-parser.js +522 -0
  313. package/dist/esm/excel-parser/plugins/xlsm/index.d.ts +5 -0
  314. package/dist/esm/excel-parser/plugins/xlsm/index.d.ts.map +1 -0
  315. package/dist/esm/excel-parser/plugins/xlsm/index.js +6 -0
  316. package/dist/esm/excel-parser/plugins/xlsx/charts.d.ts +60 -0
  317. package/dist/esm/excel-parser/plugins/xlsx/charts.d.ts.map +1 -0
  318. package/dist/esm/excel-parser/plugins/xlsx/charts.js +2036 -0
  319. package/dist/esm/excel-parser/plugins/xlsx/conditional-formatting.d.ts +18 -0
  320. package/dist/esm/excel-parser/plugins/xlsx/conditional-formatting.d.ts.map +1 -0
  321. package/dist/esm/excel-parser/plugins/xlsx/conditional-formatting.js +621 -0
  322. package/dist/esm/excel-parser/plugins/xlsx/data-validations.d.ts +4 -0
  323. package/dist/esm/excel-parser/plugins/xlsx/data-validations.d.ts.map +1 -0
  324. package/dist/esm/excel-parser/plugins/xlsx/data-validations.js +493 -0
  325. package/dist/esm/excel-parser/plugins/xlsx/drawing.d.ts +39 -0
  326. package/dist/esm/excel-parser/plugins/xlsx/drawing.d.ts.map +1 -0
  327. package/dist/esm/excel-parser/plugins/xlsx/drawing.js +905 -0
  328. package/dist/esm/excel-parser/plugins/xlsx/index.d.ts +320 -0
  329. package/dist/esm/excel-parser/plugins/xlsx/index.d.ts.map +1 -0
  330. package/dist/esm/excel-parser/plugins/xlsx/index.js +4654 -0
  331. package/dist/esm/excel-parser/plugins/xlsx/numfmt.d.ts +2 -0
  332. package/dist/esm/excel-parser/plugins/xlsx/numfmt.d.ts.map +1 -0
  333. package/dist/esm/excel-parser/plugins/xlsx/numfmt.js +3 -0
  334. package/dist/esm/excel-parser/plugins/xlsx/pivots.d.ts +40 -0
  335. package/dist/esm/excel-parser/plugins/xlsx/pivots.d.ts.map +1 -0
  336. package/dist/esm/excel-parser/plugins/xlsx/pivots.js +254 -0
  337. package/dist/esm/excel-parser/plugins/xlsx/relationships.d.ts +8 -0
  338. package/dist/esm/excel-parser/plugins/xlsx/relationships.d.ts.map +1 -0
  339. package/dist/esm/excel-parser/plugins/xlsx/relationships.js +13 -0
  340. package/dist/esm/excel-parser/plugins/xlsx/sheet-views.d.ts +26 -0
  341. package/dist/esm/excel-parser/plugins/xlsx/sheet-views.d.ts.map +1 -0
  342. package/dist/esm/excel-parser/plugins/xlsx/sheet-views.js +64 -0
  343. package/dist/esm/excel-parser/plugins/xlsx/styles.d.ts +44 -0
  344. package/dist/esm/excel-parser/plugins/xlsx/styles.d.ts.map +1 -0
  345. package/dist/esm/excel-parser/plugins/xlsx/styles.js +1365 -0
  346. package/dist/esm/excel-parser/plugins/xlsx/theme.d.ts +50 -0
  347. package/dist/esm/excel-parser/plugins/xlsx/theme.d.ts.map +1 -0
  348. package/dist/esm/excel-parser/plugins/xlsx/theme.js +127 -0
  349. package/dist/esm/excel-parser/plugins/xlsx/threaded-comments.d.ts +47 -0
  350. package/dist/esm/excel-parser/plugins/xlsx/threaded-comments.d.ts.map +1 -0
  351. package/dist/esm/excel-parser/plugins/xlsx/threaded-comments.js +103 -0
  352. package/dist/esm/excel-parser/plugins/xlsx/value-type-detection.d.ts +44 -0
  353. package/dist/esm/excel-parser/plugins/xlsx/value-type-detection.d.ts.map +1 -0
  354. package/dist/esm/excel-parser/plugins/xlsx/value-type-detection.js +399 -0
  355. package/dist/esm/excel-parser/registry.d.ts +5 -0
  356. package/dist/esm/excel-parser/registry.d.ts.map +1 -0
  357. package/dist/esm/excel-parser/registry.js +20 -0
  358. package/dist/esm/excel-parser/style-registry.d.ts +51 -0
  359. package/dist/esm/excel-parser/style-registry.d.ts.map +1 -0
  360. package/dist/esm/excel-parser/style-registry.js +163 -0
  361. package/dist/esm/excel-parser/theme-default.d.ts +3 -0
  362. package/dist/esm/excel-parser/theme-default.d.ts.map +1 -0
  363. package/dist/esm/excel-parser/theme-default.js +19 -0
  364. package/dist/esm/excel-parser/types.d.ts +365 -0
  365. package/dist/esm/excel-parser/types.d.ts.map +1 -0
  366. package/dist/esm/excel-parser/types.js +59 -0
  367. package/dist/esm/excel-parser/utils.d.ts +6 -0
  368. package/dist/esm/excel-parser/utils.d.ts.map +1 -0
  369. package/dist/esm/excel-parser/utils.js +25 -0
  370. package/dist/esm/excel-parser/workbook.d.ts +51 -0
  371. package/dist/esm/excel-parser/workbook.d.ts.map +1 -0
  372. package/dist/esm/excel-parser/workbook.js +192 -0
  373. package/dist/esm/excel-parser/worker.d.ts +2 -0
  374. package/dist/esm/excel-parser/worker.d.ts.map +1 -0
  375. package/dist/esm/excel-parser/worker.js +862 -0
  376. package/dist/esm/excel-parser/zip-parser-streaming.d.ts +13 -0
  377. package/dist/esm/excel-parser/zip-parser-streaming.d.ts.map +1 -0
  378. package/dist/esm/excel-parser/zip-parser-streaming.js +119 -0
  379. package/dist/esm/excel-parser/zip-parser.d.ts +11 -0
  380. package/dist/esm/excel-parser/zip-parser.d.ts.map +1 -0
  381. package/dist/esm/excel-parser/zip-parser.js +43 -0
  382. package/dist/esm/exporter/invalid-data-validation.d.ts +19 -0
  383. package/dist/esm/exporter/invalid-data-validation.d.ts.map +1 -0
  384. package/dist/esm/exporter/invalid-data-validation.js +37 -0
  385. package/dist/esm/exporter/ods/ods-export.d.ts +26 -0
  386. package/dist/esm/exporter/ods/ods-export.d.ts.map +1 -0
  387. package/dist/esm/exporter/ods/ods-export.js +3238 -0
  388. package/dist/esm/exporter/ods/sparkline-builder.d.ts +33 -0
  389. package/dist/esm/exporter/ods/sparkline-builder.d.ts.map +1 -0
  390. package/dist/esm/exporter/ods/sparkline-builder.js +165 -0
  391. package/dist/esm/exporter/xlsx/chart-builder.d.ts +3 -0
  392. package/dist/esm/exporter/xlsx/chart-builder.d.ts.map +1 -0
  393. package/dist/esm/exporter/xlsx/chart-builder.js +1805 -0
  394. package/dist/esm/exporter/xlsx/chart-templates.d.ts +1781 -0
  395. package/dist/esm/exporter/xlsx/chart-templates.d.ts.map +1 -0
  396. package/dist/esm/exporter/xlsx/chart-templates.js +1798 -0
  397. package/dist/esm/exporter/xlsx/future-functions.d.ts +10 -0
  398. package/dist/esm/exporter/xlsx/future-functions.d.ts.map +1 -0
  399. package/dist/esm/exporter/xlsx/future-functions.js +264 -0
  400. package/dist/esm/exporter/xlsx/pivot-builder.d.ts +58 -0
  401. package/dist/esm/exporter/xlsx/pivot-builder.d.ts.map +1 -0
  402. package/dist/esm/exporter/xlsx/pivot-builder.js +230 -0
  403. package/dist/esm/exporter/xlsx/power-query-builder.d.ts +26 -0
  404. package/dist/esm/exporter/xlsx/power-query-builder.d.ts.map +1 -0
  405. package/dist/esm/exporter/xlsx/power-query-builder.js +257 -0
  406. package/dist/esm/exporter/xlsx/slicer-builder.d.ts +11 -0
  407. package/dist/esm/exporter/xlsx/slicer-builder.d.ts.map +1 -0
  408. package/dist/esm/exporter/xlsx/slicer-builder.js +84 -0
  409. package/dist/esm/exporter/xlsx/sparkline-builder.d.ts +61 -0
  410. package/dist/esm/exporter/xlsx/sparkline-builder.d.ts.map +1 -0
  411. package/dist/esm/exporter/xlsx/sparkline-builder.js +437 -0
  412. package/dist/esm/exporter/xlsx/style-builder.d.ts +93 -0
  413. package/dist/esm/exporter/xlsx/style-builder.d.ts.map +1 -0
  414. package/dist/esm/exporter/xlsx/style-builder.js +795 -0
  415. package/dist/esm/exporter/xlsx/threaded-comments-builder.d.ts +58 -0
  416. package/dist/esm/exporter/xlsx/threaded-comments-builder.d.ts.map +1 -0
  417. package/dist/esm/exporter/xlsx/threaded-comments-builder.js +175 -0
  418. package/dist/esm/exporter/xlsx/xlsx-export.d.ts +121 -0
  419. package/dist/esm/exporter/xlsx/xlsx-export.d.ts.map +1 -0
  420. package/dist/esm/exporter/xlsx/xlsx-export.js +4062 -0
  421. package/dist/esm/helpers/theme-xml-generator.d.ts +8 -0
  422. package/dist/esm/helpers/theme-xml-generator.d.ts.map +1 -0
  423. package/dist/esm/helpers/theme-xml-generator.js +33 -0
  424. package/dist/esm/helpers.d.ts +34 -0
  425. package/dist/esm/helpers.d.ts.map +1 -0
  426. package/dist/esm/helpers.js +182 -0
  427. package/dist/esm/index.d.ts +16 -0
  428. package/dist/esm/index.d.ts.map +1 -0
  429. package/dist/esm/index.js +15 -0
  430. package/dist/esm/indexed-colors.d.ts +2 -0
  431. package/dist/esm/indexed-colors.d.ts.map +1 -0
  432. package/dist/esm/indexed-colors.js +75 -0
  433. package/dist/esm/ods-export.d.ts +24 -0
  434. package/dist/esm/ods-export.d.ts.map +1 -0
  435. package/dist/esm/ods-export.js +12 -0
  436. package/dist/esm/parse.d.ts +24 -0
  437. package/dist/esm/parse.d.ts.map +1 -0
  438. package/dist/esm/parse.js +55 -0
  439. package/dist/esm/power-query.d.ts +41 -0
  440. package/dist/esm/power-query.d.ts.map +1 -0
  441. package/dist/esm/power-query.js +19 -0
  442. package/dist/esm/server.d.ts +9 -0
  443. package/dist/esm/server.d.ts.map +1 -0
  444. package/dist/esm/server.js +8 -0
  445. package/dist/esm/theme1.d.ts +3 -0
  446. package/dist/esm/theme1.d.ts.map +1 -0
  447. package/dist/esm/theme1.js +2 -0
  448. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -0
  449. package/dist/esm/types.d.ts +14 -0
  450. package/dist/esm/types.d.ts.map +1 -0
  451. package/dist/esm/types.js +14 -0
  452. package/dist/esm/vitest.config.d.ts +3 -0
  453. package/dist/esm/vitest.config.d.ts.map +1 -0
  454. package/dist/esm/vitest.config.js +16 -0
  455. package/package.json +62 -0
  456. package/xlsx.d.ts +52 -0
@@ -0,0 +1,1149 @@
1
+ import { __assign, __asyncValues, __awaiter, __generator, __read, __values } from "tslib";
2
+ import { canonicalizeRichSharedString, contentHash } from "@rowsncolumns/utils";
3
+ import { CFBDecryptor, detectCfbContainerKind, LEGACY_XLS_UNSUPPORTED_MESSAGE, } from "./cfb-decryptor";
4
+ import { readExcelFile } from "./helpers";
5
+ import { RequestType, ResponseType } from "./types";
6
+ import { delay } from "./utils";
7
+ import { WorkBook } from "./workbook";
8
+ var workbook = new WorkBook();
9
+ var queuedRowAcks = [];
10
+ var pendingRowAck = null;
11
+ // Shared-string hash mapping. Cells emitted by the plugin layer reference the
12
+ // source SST by numeric index (`ss: "5"`). The worker rewrites those refs to
13
+ // stable content-hash ids before posting to the host so the wire format
14
+ // matches the CSV worker and the host's Map keys are session-stable.
15
+ var sharedStringHashIds = [];
16
+ var sharedStringHashByValue = new Map();
17
+ var sharedStringNextHashIndex = 0;
18
+ var resetSharedStringHashState = function () {
19
+ sharedStringHashIds = [];
20
+ sharedStringHashByValue = new Map();
21
+ sharedStringNextHashIndex = 0;
22
+ };
23
+ var ensureSharedStringHashIds = function (sst, richRuns) {
24
+ var _a;
25
+ if (!sst)
26
+ return;
27
+ for (var i = sharedStringNextHashIndex; i < sst.length; i += 1) {
28
+ var value = (_a = sst[i]) !== null && _a !== void 0 ? _a : "";
29
+ var runs = richRuns === null || richRuns === void 0 ? void 0 : richRuns.get(i);
30
+ // Plain entries hash text. Rich entries hash the canonical (text + runs)
31
+ // form so two SST slots with the same text but different runs get
32
+ // different ids (the bug was both collapsing to contentHash(text)), and
33
+ // a plain "abc" never collides with a rich `{ text: "abc", runs }`.
34
+ var hashInput = runs && runs.length > 0
35
+ ? canonicalizeRichSharedString(value, runs)
36
+ : value;
37
+ var id = contentHash(hashInput);
38
+ var suffix = 0;
39
+ while (sharedStringHashByValue.has(id) &&
40
+ sharedStringHashByValue.get(id) !== hashInput) {
41
+ suffix += 1;
42
+ id = contentHash("".concat(hashInput, " ").concat(suffix));
43
+ }
44
+ if (!sharedStringHashByValue.has(id)) {
45
+ sharedStringHashByValue.set(id, hashInput);
46
+ }
47
+ sharedStringHashIds.push(id);
48
+ }
49
+ sharedStringNextHashIndex = sst.length;
50
+ };
51
+ var remapRowCells = function (rows) {
52
+ var e_1, _a, e_2, _b;
53
+ if (!rows)
54
+ return;
55
+ try {
56
+ for (var rows_1 = __values(rows), rows_1_1 = rows_1.next(); !rows_1_1.done; rows_1_1 = rows_1.next()) {
57
+ var row = rows_1_1.value;
58
+ var values = row === null || row === void 0 ? void 0 : row.values;
59
+ if (!values)
60
+ continue;
61
+ try {
62
+ for (var values_1 = (e_2 = void 0, __values(values)), values_1_1 = values_1.next(); !values_1_1.done; values_1_1 = values_1.next()) {
63
+ var cell = values_1_1.value;
64
+ if (cell && typeof cell.ss === "string") {
65
+ var idx = Number(cell.ss);
66
+ if (Number.isInteger(idx) &&
67
+ idx >= 0 &&
68
+ idx < sharedStringHashIds.length) {
69
+ cell.ss = sharedStringHashIds[idx];
70
+ }
71
+ }
72
+ }
73
+ }
74
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
75
+ finally {
76
+ try {
77
+ if (values_1_1 && !values_1_1.done && (_b = values_1.return)) _b.call(values_1);
78
+ }
79
+ finally { if (e_2) throw e_2.error; }
80
+ }
81
+ }
82
+ }
83
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
84
+ finally {
85
+ try {
86
+ if (rows_1_1 && !rows_1_1.done && (_a = rows_1.return)) _a.call(rows_1);
87
+ }
88
+ finally { if (e_1) throw e_1.error; }
89
+ }
90
+ };
91
+ var buildSstValue = function (text, runs) {
92
+ if (runs && runs.length > 0) {
93
+ return { text: text !== null && text !== void 0 ? text : "", runs: runs };
94
+ }
95
+ return text !== null && text !== void 0 ? text : "";
96
+ };
97
+ var buildSstEntries = function (sst, richRuns) {
98
+ if (!sst)
99
+ return [];
100
+ ensureSharedStringHashIds(sst, richRuns);
101
+ var entries = new Array(sst.length);
102
+ for (var i = 0; i < sst.length; i += 1) {
103
+ entries[i] = [sharedStringHashIds[i], buildSstValue(sst[i], richRuns === null || richRuns === void 0 ? void 0 : richRuns.get(i))];
104
+ }
105
+ return entries;
106
+ };
107
+ var buildSstSlice = function (sst, start, richRuns) {
108
+ ensureSharedStringHashIds(sst, richRuns);
109
+ var out = [];
110
+ for (var i = start; i < sst.length; i += 1) {
111
+ out.push([sharedStringHashIds[i], buildSstValue(sst[i], richRuns === null || richRuns === void 0 ? void 0 : richRuns.get(i))]);
112
+ }
113
+ return out;
114
+ };
115
+ // Store file for password retry
116
+ var currentFile = null;
117
+ var currentFileName = null;
118
+ var currentMinRowCount;
119
+ var currentMinColumnCount;
120
+ var isIncorrectPasswordError = function (error) {
121
+ var message = error.message.toLowerCase();
122
+ return (message.includes("wrong password") ||
123
+ message.includes("invalid password") ||
124
+ message.includes("bad password") ||
125
+ message.includes("incorrect password"));
126
+ };
127
+ var isEncryptedArchiveError = function (error) {
128
+ var message = error.message.toLowerCase();
129
+ return (message.includes("encrypted") ||
130
+ message.includes("decrypt") ||
131
+ message.includes("password required") ||
132
+ message.includes("unsupported_ooxml_encryption") ||
133
+ message.includes("end of central directory"));
134
+ };
135
+ var CFB_SIGNATURE = [0xd0, 0xcf, 0x11, 0xe0, 0xa1, 0xb1, 0x1a, 0xe1];
136
+ var isCFBFile = function (source) { return __awaiter(void 0, void 0, void 0, function () {
137
+ var header, buffer;
138
+ return __generator(this, function (_a) {
139
+ switch (_a.label) {
140
+ case 0:
141
+ if (!(source instanceof File)) return [3 /*break*/, 2];
142
+ return [4 /*yield*/, source.slice(0, CFB_SIGNATURE.length).arrayBuffer()];
143
+ case 1:
144
+ buffer = _a.sent();
145
+ header = new Uint8Array(buffer);
146
+ return [3 /*break*/, 3];
147
+ case 2:
148
+ header = new Uint8Array(source, 0, CFB_SIGNATURE.length);
149
+ _a.label = 3;
150
+ case 3:
151
+ if (header.length < CFB_SIGNATURE.length) {
152
+ return [2 /*return*/, false];
153
+ }
154
+ return [2 /*return*/, CFB_SIGNATURE.every(function (value, index) { return header[index] === value; })];
155
+ }
156
+ });
157
+ }); };
158
+ var isSameAck = function (a, b) {
159
+ var _a, _b;
160
+ return a.sheetId === b.sheetId &&
161
+ a.chunkIndex === b.chunkIndex &&
162
+ ((_a = a.requestId) !== null && _a !== void 0 ? _a : null) === ((_b = b.requestId) !== null && _b !== void 0 ? _b : null);
163
+ };
164
+ var resolveRowAck = function (ack) {
165
+ if (pendingRowAck && isSameAck(pendingRowAck.key, ack)) {
166
+ var resolve = pendingRowAck.resolve;
167
+ pendingRowAck = null;
168
+ resolve();
169
+ return;
170
+ }
171
+ queuedRowAcks.push(ack);
172
+ };
173
+ var waitForRowAck = function (key) { return __awaiter(void 0, void 0, void 0, function () {
174
+ var queuedIndex;
175
+ return __generator(this, function (_a) {
176
+ switch (_a.label) {
177
+ case 0:
178
+ queuedIndex = queuedRowAcks.findIndex(function (ack) { return isSameAck(ack, key); });
179
+ if (queuedIndex >= 0) {
180
+ queuedRowAcks.splice(queuedIndex, 1);
181
+ return [2 /*return*/];
182
+ }
183
+ return [4 /*yield*/, new Promise(function (resolve) {
184
+ pendingRowAck = { key: key, resolve: resolve };
185
+ })];
186
+ case 1:
187
+ _a.sent();
188
+ return [2 /*return*/];
189
+ }
190
+ });
191
+ }); };
192
+ /** Unblock a stream stuck waiting for an ack that will never arrive. */
193
+ var releaseRowAckForRequest = function (requestId) {
194
+ if (pendingRowAck &&
195
+ (requestId === undefined || pendingRowAck.key.requestId === requestId)) {
196
+ var resolve = pendingRowAck.resolve;
197
+ pendingRowAck = null;
198
+ resolve();
199
+ }
200
+ };
201
+ var session = null;
202
+ var disposeSession = function (s) {
203
+ var e_3, _a;
204
+ try {
205
+ for (var _b = __values(s.activeStreams.keys()), _c = _b.next(); !_c.done; _c = _b.next()) {
206
+ var requestId = _c.value;
207
+ s.cancelledRequests.add(requestId);
208
+ releaseRowAckForRequest(requestId);
209
+ }
210
+ }
211
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
212
+ finally {
213
+ try {
214
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
215
+ }
216
+ finally { if (e_3) throw e_3.error; }
217
+ }
218
+ s.workbook.dispose();
219
+ if (session === s) {
220
+ session = null;
221
+ }
222
+ };
223
+ var postOpenWorkbookComplete = function (s) { return __awaiter(void 0, void 0, void 0, function () {
224
+ var _a, _b;
225
+ var _c;
226
+ return __generator(this, function (_d) {
227
+ switch (_d.label) {
228
+ case 0:
229
+ _b = (_a = self).postMessage;
230
+ _c = {
231
+ responseType: ResponseType.OPEN_WORKBOOK_COMPLETE,
232
+ generation: s.generation
233
+ };
234
+ return [4 /*yield*/, s.workbook.getSheetCatalog()];
235
+ case 1:
236
+ _b.apply(_a, [(_c.catalog = _d.sent(),
237
+ _c.theme = s.workbook.getTheme(),
238
+ _c.fonts = s.workbook.getFonts(),
239
+ _c.namedRanges = s.workbook.getNamedRanges(),
240
+ _c.requiresRecalc = s.workbook.requiresRecalc(),
241
+ _c.iterativeCalculationOptions = s.workbook.getIterativeCalculationOptions(),
242
+ _c.use1904 = s.workbook.getUse1904Epoch(),
243
+ _c)]);
244
+ return [2 /*return*/];
245
+ }
246
+ });
247
+ }); };
248
+ /**
249
+ * Shared strings newly referenced by this chunk, collected BEFORE
250
+ * `remapRowCells` rewrites `cell.ss` from source-index strings to
251
+ * content-hash ids. Only entries whose id hasn't been posted for this
252
+ * generation are included — the full SST never crosses the boundary.
253
+ */
254
+ var collectChunkSharedStrings = function (s, rows) {
255
+ var e_4, _a, e_5, _b;
256
+ var _c;
257
+ var sst = s.workbook.sharedStrings;
258
+ if (!sst || !rows)
259
+ return undefined;
260
+ ensureSharedStringHashIds(sst, s.workbook.richSharedStringRuns);
261
+ var entries = [];
262
+ try {
263
+ for (var rows_2 = __values(rows), rows_2_1 = rows_2.next(); !rows_2_1.done; rows_2_1 = rows_2.next()) {
264
+ var row = rows_2_1.value;
265
+ var values = row === null || row === void 0 ? void 0 : row.values;
266
+ if (!values)
267
+ continue;
268
+ try {
269
+ for (var values_2 = (e_5 = void 0, __values(values)), values_2_1 = values_2.next(); !values_2_1.done; values_2_1 = values_2.next()) {
270
+ var cell = values_2_1.value;
271
+ if (!cell || typeof cell.ss !== "string")
272
+ continue;
273
+ var idx = Number(cell.ss);
274
+ if (!Number.isInteger(idx) ||
275
+ idx < 0 ||
276
+ idx >= sharedStringHashIds.length) {
277
+ continue;
278
+ }
279
+ var id = sharedStringHashIds[idx];
280
+ if (s.sentSharedStringIds.has(id))
281
+ continue;
282
+ s.sentSharedStringIds.add(id);
283
+ entries.push([
284
+ id,
285
+ buildSstValue(sst[idx], (_c = s.workbook.richSharedStringRuns) === null || _c === void 0 ? void 0 : _c.get(idx)),
286
+ ]);
287
+ }
288
+ }
289
+ catch (e_5_1) { e_5 = { error: e_5_1 }; }
290
+ finally {
291
+ try {
292
+ if (values_2_1 && !values_2_1.done && (_b = values_2.return)) _b.call(values_2);
293
+ }
294
+ finally { if (e_5) throw e_5.error; }
295
+ }
296
+ }
297
+ }
298
+ catch (e_4_1) { e_4 = { error: e_4_1 }; }
299
+ finally {
300
+ try {
301
+ if (rows_2_1 && !rows_2_1.done && (_a = rows_2.return)) _a.call(rows_2);
302
+ }
303
+ finally { if (e_4) throw e_4.error; }
304
+ }
305
+ return entries.length ? entries : undefined;
306
+ };
307
+ var runLoadSheet = function (s, msg) { return __awaiter(void 0, void 0, void 0, function () {
308
+ var requestId, sheetId, isStale, options, enableBackpressure, wb, postProgress, _a, sheet, tables, _b, _c, _d, result, sharedStringsChunk, e_6_1, conditionalFormatting, dataValidations, commentThreads, error_1;
309
+ var _e, e_6, _f, _g;
310
+ var _h, _j;
311
+ return __generator(this, function (_k) {
312
+ switch (_k.label) {
313
+ case 0:
314
+ requestId = msg.requestId, sheetId = msg.sheetId;
315
+ isStale = function () {
316
+ return session !== s ||
317
+ s.generation !== msg.generation ||
318
+ s.cancelledRequests.has(requestId);
319
+ };
320
+ if (isStale()) {
321
+ return [2 /*return*/];
322
+ }
323
+ options = (_h = msg.options) !== null && _h !== void 0 ? _h : {};
324
+ enableBackpressure = (_j = options.enableBackpressure) !== null && _j !== void 0 ? _j : false;
325
+ wb = s.workbook;
326
+ _k.label = 1;
327
+ case 1:
328
+ _k.trys.push([1, 21, 22, 23]);
329
+ postProgress = function (phase, sheetTitle) {
330
+ self.postMessage({
331
+ responseType: ResponseType.IMPORT_PROGRESS,
332
+ generation: s.generation,
333
+ phase: phase,
334
+ sheetTitle: sheetTitle,
335
+ });
336
+ };
337
+ postProgress("sheet-metadata");
338
+ return [4 /*yield*/, wb.getSheet(sheetId, s.minRowCount, s.minColumnCount)];
339
+ case 2:
340
+ _a = __read.apply(void 0, [_k.sent(), 2]), sheet = _a[0], tables = _a[1];
341
+ if (isStale()) {
342
+ return [2 /*return*/];
343
+ }
344
+ _k.label = 3;
345
+ case 3:
346
+ _k.trys.push([3, 11, 12, 17]);
347
+ _b = true, _c = __asyncValues(wb.processSheetDataForSheet({
348
+ sheetId: sheetId,
349
+ chunkSize: options.chunkSize,
350
+ enableCellXfsRegistry: options.enableCellXfsRegistry,
351
+ enableSharedStrings: options.enableSharedStrings,
352
+ onPhase: postProgress,
353
+ }));
354
+ _k.label = 4;
355
+ case 4: return [4 /*yield*/, _c.next()];
356
+ case 5:
357
+ if (!(_d = _k.sent(), _e = _d.done, !_e)) return [3 /*break*/, 10];
358
+ _g = _d.value;
359
+ _b = false;
360
+ result = _g;
361
+ if (isStale()) {
362
+ return [2 /*return*/];
363
+ }
364
+ sharedStringsChunk = options.enableSharedStrings === false
365
+ ? undefined
366
+ : collectChunkSharedStrings(s, result.rows);
367
+ remapRowCells(result.rows);
368
+ self.postMessage(__assign(__assign({ responseType: ResponseType.SHEET_CHUNK, generation: s.generation, requestId: requestId }, result), { sharedStringsChunk: sharedStringsChunk }));
369
+ if (!enableBackpressure) return [3 /*break*/, 7];
370
+ return [4 /*yield*/, waitForRowAck({
371
+ sheetId: result.sheetId,
372
+ chunkIndex: result.chunkIndex,
373
+ requestId: requestId,
374
+ })];
375
+ case 6:
376
+ _k.sent();
377
+ _k.label = 7;
378
+ case 7: return [4 /*yield*/, delay()];
379
+ case 8:
380
+ _k.sent();
381
+ _k.label = 9;
382
+ case 9:
383
+ _b = true;
384
+ return [3 /*break*/, 4];
385
+ case 10: return [3 /*break*/, 17];
386
+ case 11:
387
+ e_6_1 = _k.sent();
388
+ e_6 = { error: e_6_1 };
389
+ return [3 /*break*/, 17];
390
+ case 12:
391
+ _k.trys.push([12, , 15, 16]);
392
+ if (!(!_b && !_e && (_f = _c.return))) return [3 /*break*/, 14];
393
+ return [4 /*yield*/, _f.call(_c)];
394
+ case 13:
395
+ _k.sent();
396
+ _k.label = 14;
397
+ case 14: return [3 /*break*/, 16];
398
+ case 15:
399
+ if (e_6) throw e_6.error;
400
+ return [7 /*endfinally*/];
401
+ case 16: return [7 /*endfinally*/];
402
+ case 17:
403
+ if (isStale()) {
404
+ return [2 /*return*/];
405
+ }
406
+ postProgress("conditional-formatting", sheet.title);
407
+ return [4 /*yield*/, wb.getConditionalFormatting(sheetId)];
408
+ case 18:
409
+ conditionalFormatting = _k.sent();
410
+ postProgress("data-validations", sheet.title);
411
+ return [4 /*yield*/, wb.getDataValidations(sheetId)];
412
+ case 19:
413
+ dataValidations = _k.sent();
414
+ postProgress("comment-threads", sheet.title);
415
+ return [4 /*yield*/, wb.getCommentThreads(sheetId)];
416
+ case 20:
417
+ commentThreads = _k.sent();
418
+ if (isStale()) {
419
+ return [2 /*return*/];
420
+ }
421
+ self.postMessage({
422
+ responseType: ResponseType.SHEET_COMPLETE,
423
+ generation: s.generation,
424
+ requestId: requestId,
425
+ sheet: sheet,
426
+ tables: tables,
427
+ conditionalFormatting: conditionalFormatting,
428
+ dataValidations: dataValidations,
429
+ commentThreads: commentThreads,
430
+ cellXfs: wb.getCellXfs(),
431
+ });
432
+ return [3 /*break*/, 23];
433
+ case 21:
434
+ error_1 = _k.sent();
435
+ if (!isStale()) {
436
+ console.trace(error_1);
437
+ self.postMessage({
438
+ responseType: ResponseType.ERROR,
439
+ generation: s.generation,
440
+ requestId: requestId,
441
+ error: error_1 instanceof Error ? error_1.message : String(error_1),
442
+ });
443
+ }
444
+ return [3 /*break*/, 23];
445
+ case 22:
446
+ s.activeStreams.delete(requestId);
447
+ s.cancelledRequests.delete(requestId);
448
+ if (session === s) {
449
+ wb.releaseSheetCaches(sheetId);
450
+ }
451
+ return [7 /*endfinally*/];
452
+ case 23: return [2 /*return*/];
453
+ }
454
+ });
455
+ }); };
456
+ var openSessionWorkbook = function (s, password) { return __awaiter(void 0, void 0, void 0, function () {
457
+ var buffer, _a, decryptedBuffer, decryptError_1, loadError_1;
458
+ return __generator(this, function (_b) {
459
+ switch (_b.label) {
460
+ case 0:
461
+ if (!(s.file instanceof File)) return [3 /*break*/, 1];
462
+ _a = s.file;
463
+ return [3 /*break*/, 3];
464
+ case 1: return [4 /*yield*/, readExcelFile(s.file)];
465
+ case 2:
466
+ _a = _b.sent();
467
+ _b.label = 3;
468
+ case 3:
469
+ buffer = _a;
470
+ return [4 /*yield*/, isCFBFile(buffer)];
471
+ case 4:
472
+ if (!_b.sent()) return [3 /*break*/, 12];
473
+ return [4 /*yield*/, detectCfbContainerKind(buffer)];
474
+ case 5:
475
+ if ((_b.sent()) === "legacy-xls") {
476
+ self.postMessage({
477
+ responseType: ResponseType.ERROR,
478
+ generation: s.generation,
479
+ error: LEGACY_XLS_UNSUPPORTED_MESSAGE,
480
+ });
481
+ return [2 /*return*/];
482
+ }
483
+ if (!password) {
484
+ s.pendingPassword = true;
485
+ self.postMessage({
486
+ responseType: ResponseType.PASSWORD_REQUIRED,
487
+ generation: s.generation,
488
+ message: "This file uses Office encryption and requires a password.",
489
+ });
490
+ return [2 /*return*/];
491
+ }
492
+ decryptedBuffer = void 0;
493
+ _b.label = 6;
494
+ case 6:
495
+ _b.trys.push([6, 8, , 9]);
496
+ return [4 /*yield*/, CFBDecryptor.decrypt(buffer, password)];
497
+ case 7:
498
+ decryptedBuffer = _b.sent();
499
+ return [3 /*break*/, 9];
500
+ case 8:
501
+ decryptError_1 = _b.sent();
502
+ if (decryptError_1 instanceof Error &&
503
+ isIncorrectPasswordError(decryptError_1)) {
504
+ s.pendingPassword = true;
505
+ self.postMessage({
506
+ responseType: ResponseType.PASSWORD_REQUIRED,
507
+ generation: s.generation,
508
+ message: "Incorrect password. Please try again.",
509
+ });
510
+ return [2 /*return*/];
511
+ }
512
+ throw decryptError_1;
513
+ case 9:
514
+ resetSharedStringHashState();
515
+ s.sentSharedStringIds.clear();
516
+ return [4 /*yield*/, s.workbook.load(decryptedBuffer, s.fileName)];
517
+ case 10:
518
+ _b.sent();
519
+ s.pendingPassword = false;
520
+ return [4 /*yield*/, postOpenWorkbookComplete(s)];
521
+ case 11:
522
+ _b.sent();
523
+ return [2 /*return*/];
524
+ case 12:
525
+ resetSharedStringHashState();
526
+ s.sentSharedStringIds.clear();
527
+ _b.label = 13;
528
+ case 13:
529
+ _b.trys.push([13, 15, , 16]);
530
+ return [4 /*yield*/, s.workbook.load(buffer, s.fileName, password)];
531
+ case 14:
532
+ _b.sent();
533
+ return [3 /*break*/, 16];
534
+ case 15:
535
+ loadError_1 = _b.sent();
536
+ if (loadError_1 instanceof Error) {
537
+ if (loadError_1.message === "PASSWORD_REQUIRED" ||
538
+ (password && isIncorrectPasswordError(loadError_1))) {
539
+ s.pendingPassword = true;
540
+ self.postMessage({
541
+ responseType: ResponseType.PASSWORD_REQUIRED,
542
+ generation: s.generation,
543
+ message: password
544
+ ? "Incorrect password. Please try again."
545
+ : "This file is password protected. Please enter the password.",
546
+ });
547
+ return [2 /*return*/];
548
+ }
549
+ if (loadError_1.message === "UNSUPPORTED_OOXML_ENCRYPTION") {
550
+ self.postMessage({
551
+ responseType: ResponseType.ERROR,
552
+ generation: s.generation,
553
+ error: "This XLSX file uses Office encryption that is not supported yet, so it cannot be opened even with the correct password.",
554
+ });
555
+ return [2 /*return*/];
556
+ }
557
+ }
558
+ throw loadError_1;
559
+ case 16:
560
+ s.pendingPassword = false;
561
+ return [4 /*yield*/, postOpenWorkbookComplete(s)];
562
+ case 17:
563
+ _b.sent();
564
+ return [2 /*return*/];
565
+ }
566
+ });
567
+ }); };
568
+ // Handle messages from the main thread
569
+ self.onmessage = function (e) { return __awaiter(void 0, void 0, void 0, function () {
570
+ var requestType, _a, generation, newSession, error_2, msg_1, s_1, s, s, buffer, _b, loadError_2, _c, sheets, tables, err_1, enableBackpressure, lastSharedStringsLength, postProgress, _d, _e, _f, result, sharedStringsChunk, currentSharedStrings, e_7_1, drawings, charts, slicers, pivotTables, e_8, externalLinks, commentThreads, conditionalFormatting, dataValidations, s, password_1, error_3, password, buffer, _g, isCFB, decryptedBuffer, decryptError_2, loadError_3, _h, sheets, tables, err_2, error_4;
571
+ var _j, e_7, _k, _l;
572
+ var _m, _o, _p, _q;
573
+ return __generator(this, function (_r) {
574
+ switch (_r.label) {
575
+ case 0:
576
+ requestType = e.data.requestType;
577
+ _r.label = 1;
578
+ case 1:
579
+ _r.trys.push([1, 79, , 80]);
580
+ // Guard against undefined requestType
581
+ if (!requestType) {
582
+ console.error("Received message with undefined requestType:", e.data);
583
+ return [2 /*return*/];
584
+ }
585
+ if (requestType === RequestType.ACK_ROW_DATA) {
586
+ resolveRowAck({
587
+ sheetId: e.data.sheetId,
588
+ chunkIndex: e.data.chunkIndex,
589
+ requestId: e.data.requestId,
590
+ });
591
+ return [2 /*return*/];
592
+ }
593
+ _a = requestType;
594
+ switch (_a) {
595
+ case RequestType.OPEN_WORKBOOK: return [3 /*break*/, 2];
596
+ case RequestType.LOAD_SHEET: return [3 /*break*/, 7];
597
+ case RequestType.CANCEL_REQUEST: return [3 /*break*/, 8];
598
+ case RequestType.DISPOSE_WORKBOOK: return [3 /*break*/, 9];
599
+ case RequestType.PARSE_EXCEL: return [3 /*break*/, 10];
600
+ case RequestType.GET_SHEET_DATA: return [3 /*break*/, 25];
601
+ case RequestType.PROVIDE_PASSWORD: return [3 /*break*/, 52];
602
+ }
603
+ return [3 /*break*/, 77];
604
+ case 2:
605
+ generation = e.data.generation;
606
+ if (session) {
607
+ disposeSession(session);
608
+ }
609
+ newSession = {
610
+ generation: generation,
611
+ workbook: new WorkBook(),
612
+ file: e.data.file,
613
+ fileName: e.data.file instanceof File ? e.data.file.name : "unknown.xlsx",
614
+ minRowCount: e.data.minRowCount,
615
+ minColumnCount: e.data.minColumnCount,
616
+ sentSharedStringIds: new Set(),
617
+ cancelledRequests: new Set(),
618
+ activeStreams: new Map(),
619
+ pendingPassword: false,
620
+ queue: Promise.resolve(),
621
+ };
622
+ session = newSession;
623
+ _r.label = 3;
624
+ case 3:
625
+ _r.trys.push([3, 5, , 6]);
626
+ return [4 /*yield*/, openSessionWorkbook(newSession)];
627
+ case 4:
628
+ _r.sent();
629
+ return [3 /*break*/, 6];
630
+ case 5:
631
+ error_2 = _r.sent();
632
+ console.trace(error_2);
633
+ self.postMessage({
634
+ responseType: ResponseType.ERROR,
635
+ generation: generation,
636
+ error: error_2 instanceof Error ? error_2.message : String(error_2),
637
+ });
638
+ return [3 /*break*/, 6];
639
+ case 6: return [3 /*break*/, 78];
640
+ case 7:
641
+ {
642
+ msg_1 = e.data;
643
+ s_1 = session;
644
+ if (!s_1 || s_1.generation !== msg_1.generation) {
645
+ // Stale request from a previous generation — ignore.
646
+ return [3 /*break*/, 78];
647
+ }
648
+ s_1.activeStreams.set(msg_1.requestId, { sheetId: msg_1.sheetId });
649
+ // Serialize streams so two LOAD_SHEETs never interleave chunks.
650
+ s_1.queue = s_1.queue.then(function () { return runLoadSheet(s_1, msg_1); });
651
+ return [3 /*break*/, 78];
652
+ }
653
+ _r.label = 8;
654
+ case 8:
655
+ {
656
+ s = session;
657
+ if (!s || s.generation !== e.data.generation) {
658
+ return [3 /*break*/, 78];
659
+ }
660
+ s.cancelledRequests.add(e.data.requestId);
661
+ releaseRowAckForRequest(e.data.requestId);
662
+ return [3 /*break*/, 78];
663
+ }
664
+ _r.label = 9;
665
+ case 9:
666
+ {
667
+ s = session;
668
+ if (!s || s.generation !== e.data.generation) {
669
+ return [3 /*break*/, 78];
670
+ }
671
+ disposeSession(s);
672
+ return [3 /*break*/, 78];
673
+ }
674
+ _r.label = 10;
675
+ case 10:
676
+ currentFile = e.data.file;
677
+ currentMinRowCount = e.data.minRowCount;
678
+ currentMinColumnCount = e.data.minColumnCount;
679
+ if (!(e.data.file instanceof File)) return [3 /*break*/, 11];
680
+ _b = e.data.file;
681
+ return [3 /*break*/, 13];
682
+ case 11: return [4 /*yield*/, readExcelFile(e.data.file)];
683
+ case 12:
684
+ _b = _r.sent();
685
+ _r.label = 13;
686
+ case 13:
687
+ buffer = _b;
688
+ currentFileName =
689
+ e.data.file instanceof File ? e.data.file.name : "unknown.xlsx";
690
+ return [4 /*yield*/, isCFBFile(buffer)];
691
+ case 14:
692
+ if (!_r.sent()) return [3 /*break*/, 16];
693
+ return [4 /*yield*/, detectCfbContainerKind(buffer)];
694
+ case 15:
695
+ if ((_r.sent()) === "legacy-xls") {
696
+ self.postMessage({
697
+ responseType: ResponseType.ERROR,
698
+ error: LEGACY_XLS_UNSUPPORTED_MESSAGE,
699
+ });
700
+ return [2 /*return*/];
701
+ }
702
+ self.postMessage({
703
+ responseType: ResponseType.PASSWORD_REQUIRED,
704
+ message: "This file uses Office encryption and requires a password.",
705
+ });
706
+ return [2 /*return*/];
707
+ case 16:
708
+ // Load workbook (fresh state — clear stale hash mappings from prior import)
709
+ resetSharedStringHashState();
710
+ _r.label = 17;
711
+ case 17:
712
+ _r.trys.push([17, 19, , 20]);
713
+ return [4 /*yield*/, workbook.load(buffer, currentFileName)];
714
+ case 18:
715
+ _r.sent();
716
+ return [3 /*break*/, 20];
717
+ case 19:
718
+ loadError_2 = _r.sent();
719
+ if (loadError_2 instanceof Error &&
720
+ loadError_2.message === "PASSWORD_REQUIRED") {
721
+ self.postMessage({
722
+ responseType: ResponseType.PASSWORD_REQUIRED,
723
+ message: "This file is password protected. Please enter the password.",
724
+ });
725
+ return [2 /*return*/];
726
+ }
727
+ if (loadError_2 instanceof Error &&
728
+ loadError_2.message === "UNSUPPORTED_OOXML_ENCRYPTION") {
729
+ self.postMessage({
730
+ responseType: ResponseType.ERROR,
731
+ error: "This XLSX file uses Office encryption that is not supported yet, so it cannot be opened even with the correct password.",
732
+ });
733
+ return [2 /*return*/];
734
+ }
735
+ throw loadError_2;
736
+ case 20:
737
+ // Send the result back
738
+ self.postMessage({
739
+ responseType: ResponseType.PARSE_EXCEL_SUCCESS,
740
+ requiresRecalc: workbook.requiresRecalc(),
741
+ iterativeCalculationOptions: workbook.getIterativeCalculationOptions(),
742
+ use1904: workbook.getUse1904Epoch(),
743
+ });
744
+ // Pass theme back
745
+ self.postMessage({
746
+ responseType: ResponseType.GET_THEME_SUCCESS,
747
+ theme: workbook.getTheme(),
748
+ });
749
+ _r.label = 21;
750
+ case 21:
751
+ _r.trys.push([21, 23, , 24]);
752
+ self.postMessage({
753
+ responseType: ResponseType.BEGIN_GET_SHEETS,
754
+ totalSheets: workbook.getSheetCount(),
755
+ });
756
+ return [4 /*yield*/, workbook.getSheets(e.data.minRowCount, e.data.minColumnCount)];
757
+ case 22:
758
+ _c = __read.apply(void 0, [_r.sent(), 2]), sheets = _c[0], tables = _c[1];
759
+ self.postMessage({
760
+ responseType: ResponseType.GET_SHEETS_SUCCESS,
761
+ sheets: sheets,
762
+ });
763
+ self.postMessage({
764
+ responseType: ResponseType.GET_TABLES_SUCCESS,
765
+ tables: tables,
766
+ });
767
+ // Preload fonts
768
+ self.postMessage({
769
+ responseType: ResponseType.GET_FONTS_SUCCESS,
770
+ fonts: workbook.getFonts(),
771
+ });
772
+ // named ranges
773
+ self.postMessage({
774
+ responseType: ResponseType.GET_NAMEDRANGES_SUCCESS,
775
+ namedRanges: workbook.getNamedRanges(),
776
+ });
777
+ // shared strings (emit as [hashId, value][] so cells and ids stay
778
+ // self-consistent across the worker→host boundary).
779
+ self.postMessage({
780
+ responseType: ResponseType.GET_SHARED_STRINGS_SUCCESS,
781
+ sharedStrings: buildSstEntries(workbook.sharedStrings, workbook.richSharedStringRuns),
782
+ });
783
+ return [3 /*break*/, 24];
784
+ case 23:
785
+ err_1 = _r.sent();
786
+ console.error(err_1);
787
+ return [3 /*break*/, 24];
788
+ case 24: return [3 /*break*/, 78];
789
+ case 25:
790
+ enableBackpressure = (_m = e.data.enableBackpressure) !== null && _m !== void 0 ? _m : false;
791
+ lastSharedStringsLength = (_p = (_o = workbook.sharedStrings) === null || _o === void 0 ? void 0 : _o.length) !== null && _p !== void 0 ? _p : 0;
792
+ // Make sure hash ids exist for any strings loaded before this request
793
+ // (e.g. XLSX populates the full SST upfront).
794
+ ensureSharedStringHashIds(workbook.sharedStrings, workbook.richSharedStringRuns);
795
+ postProgress = function (phase, sheetTitle) {
796
+ self.postMessage({
797
+ responseType: ResponseType.IMPORT_PROGRESS,
798
+ phase: phase,
799
+ sheetTitle: sheetTitle,
800
+ });
801
+ };
802
+ _r.label = 26;
803
+ case 26:
804
+ _r.trys.push([26, 34, 35, 40]);
805
+ _d = true, _e = __asyncValues(workbook.processSheetData(e.data.pageSize, e.data.enableCellXfsRegistry, e.data.enableSharedStrings, postProgress));
806
+ _r.label = 27;
807
+ case 27: return [4 /*yield*/, _e.next()];
808
+ case 28:
809
+ if (!(_f = _r.sent(), _j = _f.done, !_j)) return [3 /*break*/, 33];
810
+ _l = _f.value;
811
+ _d = false;
812
+ result = _l;
813
+ sharedStringsChunk = void 0;
814
+ if (e.data.enableSharedStrings) {
815
+ currentSharedStrings = (_q = workbook.sharedStrings) !== null && _q !== void 0 ? _q : [];
816
+ if (currentSharedStrings.length > lastSharedStringsLength) {
817
+ sharedStringsChunk = buildSstSlice(currentSharedStrings, lastSharedStringsLength, workbook.richSharedStringRuns);
818
+ lastSharedStringsLength = currentSharedStrings.length;
819
+ }
820
+ else {
821
+ // Ensure hash ids stay in sync even when no new strings appeared
822
+ ensureSharedStringHashIds(currentSharedStrings, workbook.richSharedStringRuns);
823
+ }
824
+ }
825
+ // Rewrite cell.ss from source-index strings to content-hash ids so
826
+ // cells the host sees agree with the chunk + final SST it receives.
827
+ remapRowCells(result.rows);
828
+ self.postMessage(__assign(__assign({ responseType: ResponseType.ROW_DATA_CHUNK }, result), { sharedStringsChunk: sharedStringsChunk }));
829
+ if (!enableBackpressure) return [3 /*break*/, 30];
830
+ return [4 /*yield*/, waitForRowAck({
831
+ sheetId: result.sheetId,
832
+ chunkIndex: result.chunkIndex,
833
+ })];
834
+ case 29:
835
+ _r.sent();
836
+ _r.label = 30;
837
+ case 30: return [4 /*yield*/, delay()];
838
+ case 31:
839
+ _r.sent();
840
+ _r.label = 32;
841
+ case 32:
842
+ _d = true;
843
+ return [3 /*break*/, 27];
844
+ case 33: return [3 /*break*/, 40];
845
+ case 34:
846
+ e_7_1 = _r.sent();
847
+ e_7 = { error: e_7_1 };
848
+ return [3 /*break*/, 40];
849
+ case 35:
850
+ _r.trys.push([35, , 38, 39]);
851
+ if (!(!_d && !_j && (_k = _e.return))) return [3 /*break*/, 37];
852
+ return [4 /*yield*/, _k.call(_e)];
853
+ case 36:
854
+ _r.sent();
855
+ _r.label = 37;
856
+ case 37: return [3 /*break*/, 39];
857
+ case 38:
858
+ if (e_7) throw e_7.error;
859
+ return [7 /*endfinally*/];
860
+ case 39: return [7 /*endfinally*/];
861
+ case 40:
862
+ self.postMessage({
863
+ responseType: ResponseType.GET_SHEET_DATA_SUCCESS,
864
+ });
865
+ // Send cell format registry
866
+ self.postMessage({
867
+ responseType: ResponseType.CELL_XFS,
868
+ cellXfs: workbook.getCellXfs(),
869
+ });
870
+ // Shared strings — final SST as [id, value][]
871
+ self.postMessage({
872
+ responseType: ResponseType.GET_SHARED_STRINGS_SUCCESS,
873
+ sharedStrings: buildSstEntries(workbook.sharedStrings, workbook.richSharedStringRuns),
874
+ });
875
+ // Process drawing
876
+ postProgress("drawings");
877
+ return [4 /*yield*/, workbook.getDrawings()];
878
+ case 41:
879
+ drawings = _r.sent();
880
+ self.postMessage({
881
+ responseType: ResponseType.GET_DRAWINGS_SUCCESS,
882
+ drawings: drawings,
883
+ });
884
+ // Charts
885
+ postProgress("charts");
886
+ return [4 /*yield*/, workbook.getCharts()];
887
+ case 42:
888
+ charts = _r.sent();
889
+ self.postMessage({
890
+ responseType: ResponseType.GET_CHARTS_SUCCESS,
891
+ charts: charts,
892
+ });
893
+ return [4 /*yield*/, workbook.getSlicers()];
894
+ case 43:
895
+ slicers = _r.sent();
896
+ self.postMessage({
897
+ responseType: ResponseType.GET_SLICERS_SUCCESS,
898
+ slicers: slicers,
899
+ });
900
+ // Pivot tables (Phase D1 — import path)
901
+ postProgress("pivot-tables");
902
+ _r.label = 44;
903
+ case 44:
904
+ _r.trys.push([44, 46, , 47]);
905
+ return [4 /*yield*/, workbook.getPivotTables()];
906
+ case 45:
907
+ pivotTables = _r.sent();
908
+ self.postMessage({
909
+ responseType: ResponseType.GET_PIVOT_TABLES_SUCCESS,
910
+ pivotTables: pivotTables,
911
+ });
912
+ return [3 /*break*/, 47];
913
+ case 46:
914
+ e_8 = _r.sent();
915
+ // Pivot parsing is best-effort — never block the rest of
916
+ // the import on a single malformed pivot. Worker emits an
917
+ // empty list so the host can clear any stale pivots.
918
+ self.postMessage({
919
+ responseType: ResponseType.GET_PIVOT_TABLES_SUCCESS,
920
+ pivotTables: [],
921
+ });
922
+ // eslint-disable-next-line no-console
923
+ console.warn("[excel-parser] pivot table import failed:", e_8);
924
+ return [3 /*break*/, 47];
925
+ case 47: return [4 /*yield*/, workbook.getExternalLinks()];
926
+ case 48:
927
+ externalLinks = _r.sent();
928
+ self.postMessage({
929
+ responseType: ResponseType.GET_EXTERNAL_LINKS_SUCCESS,
930
+ externalLinks: externalLinks,
931
+ });
932
+ // Threaded comments (anchor cells already carry `commentThreadId`
933
+ // from the row chunks; this delivers the thread contents).
934
+ postProgress("comment-threads");
935
+ return [4 /*yield*/, workbook.getCommentThreads()];
936
+ case 49:
937
+ commentThreads = _r.sent();
938
+ self.postMessage({
939
+ responseType: ResponseType.GET_COMMENT_THREADS_SUCCESS,
940
+ commentThreads: commentThreads,
941
+ });
942
+ // Start conditional formatting
943
+ self.postMessage({
944
+ responseType: ResponseType.GET_CONDITIONAL_FORMATTING,
945
+ });
946
+ return [4 /*yield*/, workbook.getConditionalFormatting()];
947
+ case 50:
948
+ conditionalFormatting = _r.sent();
949
+ self.postMessage({
950
+ responseType: ResponseType.GET_CONDITIONAL_FORMATTING_SUCCESS,
951
+ conditionalFormatting: conditionalFormatting,
952
+ });
953
+ // Start data validation
954
+ self.postMessage({
955
+ responseType: ResponseType.GET_DATAVALIDATION,
956
+ });
957
+ return [4 /*yield*/, workbook.getDataValidations()];
958
+ case 51:
959
+ dataValidations = _r.sent();
960
+ // data validations ranges
961
+ self.postMessage({
962
+ responseType: ResponseType.GET_DATAVALIDATION_SUCCESS,
963
+ dataValidations: dataValidations,
964
+ });
965
+ // // Send end
966
+ self.postMessage({
967
+ responseType: ResponseType.PARSE_EXCEL_COMPLETE,
968
+ });
969
+ workbook.dispose();
970
+ return [3 /*break*/, 78];
971
+ case 52:
972
+ if (!(session === null || session === void 0 ? void 0 : session.pendingPassword)) return [3 /*break*/, 57];
973
+ s = session;
974
+ password_1 = e.data.password;
975
+ if (!password_1 || password_1.trim() === "") {
976
+ self.postMessage({
977
+ responseType: ResponseType.PASSWORD_REQUIRED,
978
+ generation: s.generation,
979
+ message: "Password cannot be empty. Please enter a password.",
980
+ });
981
+ return [2 /*return*/];
982
+ }
983
+ _r.label = 53;
984
+ case 53:
985
+ _r.trys.push([53, 55, , 56]);
986
+ return [4 /*yield*/, openSessionWorkbook(s, password_1)];
987
+ case 54:
988
+ _r.sent();
989
+ return [3 /*break*/, 56];
990
+ case 55:
991
+ error_3 = _r.sent();
992
+ console.trace(error_3);
993
+ self.postMessage({
994
+ responseType: ResponseType.ERROR,
995
+ generation: s.generation,
996
+ error: error_3 instanceof Error && isEncryptedArchiveError(error_3)
997
+ ? "Unable to decrypt this file with the provided password. The file may use an unsupported encryption format."
998
+ : error_3 instanceof Error
999
+ ? error_3.message
1000
+ : String(error_3),
1001
+ });
1002
+ return [3 /*break*/, 56];
1003
+ case 56: return [2 /*return*/];
1004
+ case 57:
1005
+ if (!currentFile || !currentFileName) {
1006
+ throw new Error("No file loaded to retry with password");
1007
+ }
1008
+ password = e.data.password;
1009
+ if (!password || password.trim() === "") {
1010
+ console.warn("Empty password provided");
1011
+ self.postMessage({
1012
+ responseType: ResponseType.PASSWORD_REQUIRED,
1013
+ message: "Password cannot be empty. Please enter a password.",
1014
+ });
1015
+ return [2 /*return*/];
1016
+ }
1017
+ if (!(currentFile instanceof File)) return [3 /*break*/, 58];
1018
+ _g = currentFile;
1019
+ return [3 /*break*/, 60];
1020
+ case 58: return [4 /*yield*/, readExcelFile(currentFile)];
1021
+ case 59:
1022
+ _g = _r.sent();
1023
+ _r.label = 60;
1024
+ case 60:
1025
+ buffer = _g;
1026
+ return [4 /*yield*/, isCFBFile(buffer)];
1027
+ case 61:
1028
+ isCFB = _r.sent();
1029
+ // Fresh hash state for this load attempt.
1030
+ resetSharedStringHashState();
1031
+ _r.label = 62;
1032
+ case 62:
1033
+ _r.trys.push([62, 71, , 72]);
1034
+ if (!isCFB) return [3 /*break*/, 68];
1035
+ _r.label = 63;
1036
+ case 63:
1037
+ _r.trys.push([63, 66, , 67]);
1038
+ return [4 /*yield*/, CFBDecryptor.decrypt(buffer, password)];
1039
+ case 64:
1040
+ decryptedBuffer = _r.sent();
1041
+ // Load the decrypted file (no password needed now)
1042
+ return [4 /*yield*/, workbook.load(decryptedBuffer, currentFileName)];
1043
+ case 65:
1044
+ // Load the decrypted file (no password needed now)
1045
+ _r.sent();
1046
+ return [3 /*break*/, 67];
1047
+ case 66:
1048
+ decryptError_2 = _r.sent();
1049
+ console.error("CFB decryption error:", decryptError_2);
1050
+ if (decryptError_2 instanceof Error && isIncorrectPasswordError(decryptError_2)) {
1051
+ self.postMessage({
1052
+ responseType: ResponseType.PASSWORD_REQUIRED,
1053
+ message: "Incorrect password. Please try again.",
1054
+ });
1055
+ return [2 /*return*/];
1056
+ }
1057
+ // Re-throw with more context
1058
+ if (decryptError_2 instanceof Error) {
1059
+ throw new Error("CFB decryption failed: ".concat(decryptError_2.message));
1060
+ }
1061
+ throw decryptError_2;
1062
+ case 67: return [3 /*break*/, 70];
1063
+ case 68:
1064
+ // ZIP-encrypted file - pass password to workbook
1065
+ return [4 /*yield*/, workbook.load(buffer, currentFileName, password)];
1066
+ case 69:
1067
+ // ZIP-encrypted file - pass password to workbook
1068
+ _r.sent();
1069
+ _r.label = 70;
1070
+ case 70: return [3 /*break*/, 72];
1071
+ case 71:
1072
+ loadError_3 = _r.sent();
1073
+ if (loadError_3 instanceof Error && isIncorrectPasswordError(loadError_3)) {
1074
+ self.postMessage({
1075
+ responseType: ResponseType.PASSWORD_REQUIRED,
1076
+ message: "Incorrect password. Please try again.",
1077
+ });
1078
+ return [2 /*return*/];
1079
+ }
1080
+ if (loadError_3 instanceof Error && isEncryptedArchiveError(loadError_3)) {
1081
+ self.postMessage({
1082
+ responseType: ResponseType.ERROR,
1083
+ error: "Unable to decrypt this file with the provided password. The file may use an unsupported encryption format.",
1084
+ });
1085
+ return [2 /*return*/];
1086
+ }
1087
+ throw loadError_3;
1088
+ case 72:
1089
+ // If successful, continue with normal parsing flow
1090
+ self.postMessage({
1091
+ responseType: ResponseType.PARSE_EXCEL_SUCCESS,
1092
+ requiresRecalc: workbook.requiresRecalc(),
1093
+ iterativeCalculationOptions: workbook.getIterativeCalculationOptions(),
1094
+ });
1095
+ self.postMessage({
1096
+ responseType: ResponseType.GET_THEME_SUCCESS,
1097
+ theme: workbook.getTheme(),
1098
+ });
1099
+ _r.label = 73;
1100
+ case 73:
1101
+ _r.trys.push([73, 75, , 76]);
1102
+ self.postMessage({
1103
+ responseType: ResponseType.BEGIN_GET_SHEETS,
1104
+ totalSheets: workbook.getSheetCount(),
1105
+ });
1106
+ return [4 /*yield*/, workbook.getSheets(currentMinRowCount, currentMinColumnCount)];
1107
+ case 74:
1108
+ _h = __read.apply(void 0, [_r.sent(), 2]), sheets = _h[0], tables = _h[1];
1109
+ self.postMessage({
1110
+ responseType: ResponseType.GET_SHEETS_SUCCESS,
1111
+ sheets: sheets,
1112
+ });
1113
+ self.postMessage({
1114
+ responseType: ResponseType.GET_TABLES_SUCCESS,
1115
+ tables: tables,
1116
+ });
1117
+ self.postMessage({
1118
+ responseType: ResponseType.GET_FONTS_SUCCESS,
1119
+ fonts: workbook.getFonts(),
1120
+ });
1121
+ self.postMessage({
1122
+ responseType: ResponseType.GET_NAMEDRANGES_SUCCESS,
1123
+ namedRanges: workbook.getNamedRanges(),
1124
+ });
1125
+ self.postMessage({
1126
+ responseType: ResponseType.GET_SHARED_STRINGS_SUCCESS,
1127
+ sharedStrings: buildSstEntries(workbook.sharedStrings, workbook.richSharedStringRuns),
1128
+ });
1129
+ return [3 /*break*/, 76];
1130
+ case 75:
1131
+ err_2 = _r.sent();
1132
+ console.error(err_2);
1133
+ return [3 /*break*/, 76];
1134
+ case 76: return [3 /*break*/, 78];
1135
+ case 77: throw new Error("Unknown action: ".concat(requestType));
1136
+ case 78: return [3 /*break*/, 80];
1137
+ case 79:
1138
+ error_4 = _r.sent();
1139
+ console.trace(error_4);
1140
+ // Send back the error
1141
+ self.postMessage({
1142
+ responseType: ResponseType.ERROR,
1143
+ error: error_4 instanceof Error ? error_4.message : String(error_4),
1144
+ });
1145
+ return [3 /*break*/, 80];
1146
+ case 80: return [2 /*return*/];
1147
+ }
1148
+ });
1149
+ }); };