@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,255 @@
1
+ import { RequestType, ResponseType } from "./excel-parser/types";
2
+ // Hosts whose bundlers can't resolve the `new URL(...)` worker specifier
3
+ // (e.g. turbopack) can supply their own worker constructors here — same
4
+ // global and same `excel` slot as `createExcelImportWorker`.
5
+ const createWorkerInstance = () => globalThis.__ATHENA_TOOLKIT_WORKER_FACTORIES?.excel?.() ??
6
+ new Worker(new URL("@rowsncolumns/toolkit/worker", import.meta.url), {
7
+ type: "module",
8
+ });
9
+ // The watchdog covers workbook opening only (the worker-never-loaded
10
+ // failure mode). A resident session is expected to sit idle between sheet
11
+ // loads, and a streaming sheet can legitimately pause on host-side
12
+ // consumption, so prolonged silence is not an error outside open().
13
+ const WORKER_OPEN_TIMEOUT_MS = 20000;
14
+ const abortError = () => {
15
+ const error = new Error("The sheet load was aborted");
16
+ error.name = "AbortError";
17
+ return error;
18
+ };
19
+ /**
20
+ * Typed client for the session import worker protocol (issue #336). Opens
21
+ * a workbook once, keeps it resident worker-side, and streams individual
22
+ * sheets on demand with automatic requestId allocation, chunk
23
+ * acknowledgement backpressure, cancellation, and generation management.
24
+ */
25
+ export const createExcelImportSession = (file, options) => {
26
+ const worker = createWorkerInstance();
27
+ let generation = 0;
28
+ let requestCounter = 0;
29
+ let disposed = false;
30
+ let pendingOpen = null;
31
+ const streams = new Map();
32
+ let openWatchdog = null;
33
+ const clearOpenWatchdog = () => {
34
+ if (openWatchdog !== null) {
35
+ clearTimeout(openWatchdog);
36
+ openWatchdog = null;
37
+ }
38
+ };
39
+ const failEverything = (error) => {
40
+ clearOpenWatchdog();
41
+ if (pendingOpen) {
42
+ const { reject } = pendingOpen;
43
+ pendingOpen = null;
44
+ reject(error);
45
+ }
46
+ for (const state of streams.values()) {
47
+ state.failed = error;
48
+ state.waiter?.();
49
+ }
50
+ };
51
+ const settleOpen = (result) => {
52
+ if (!pendingOpen) {
53
+ return;
54
+ }
55
+ clearOpenWatchdog();
56
+ const { resolve } = pendingOpen;
57
+ pendingOpen = null;
58
+ resolve(result);
59
+ };
60
+ worker.onmessage = (e) => {
61
+ const data = e?.data;
62
+ if (!data?.responseType) {
63
+ return;
64
+ }
65
+ const messageGeneration = data.generation;
66
+ if (messageGeneration !== undefined && messageGeneration !== generation) {
67
+ return;
68
+ }
69
+ switch (data.responseType) {
70
+ case ResponseType.OPEN_WORKBOOK_COMPLETE: {
71
+ const { responseType: _rt, generation: _g, ...rest } = data;
72
+ settleOpen({ status: "open", ...rest });
73
+ break;
74
+ }
75
+ case ResponseType.PASSWORD_REQUIRED: {
76
+ settleOpen({ status: "password-required", message: data.message });
77
+ break;
78
+ }
79
+ case ResponseType.SHEET_CHUNK:
80
+ case ResponseType.SHEET_COMPLETE: {
81
+ const state = streams.get(data.requestId);
82
+ if (state) {
83
+ state.queue.push(data);
84
+ state.waiter?.();
85
+ }
86
+ break;
87
+ }
88
+ case ResponseType.ERROR: {
89
+ const error = new Error(data.error ?? "Excel import worker error");
90
+ const requestId = data.requestId;
91
+ if (requestId !== undefined) {
92
+ const state = streams.get(requestId);
93
+ if (state) {
94
+ state.failed = error;
95
+ state.waiter?.();
96
+ }
97
+ break;
98
+ }
99
+ if (pendingOpen) {
100
+ clearOpenWatchdog();
101
+ const { reject } = pendingOpen;
102
+ pendingOpen = null;
103
+ reject(error);
104
+ }
105
+ break;
106
+ }
107
+ default:
108
+ // IMPORT_PROGRESS and other liveness messages need no routing.
109
+ break;
110
+ }
111
+ };
112
+ worker.onerror = (error) => {
113
+ failEverything(error instanceof ErrorEvent && error.message
114
+ ? new Error(error.message)
115
+ : new Error("Worker failed to load or crashed. Check worker URL resolution and browser console/network logs."));
116
+ };
117
+ worker.onmessageerror = () => {
118
+ failEverything(new Error("Worker could not deserialize a message (onmessageerror). It likely failed to load. Check the browser console/network logs."));
119
+ };
120
+ const awaitOpenResult = (send) => new Promise((resolve, reject) => {
121
+ if (disposed) {
122
+ reject(new Error("The import session has been disposed"));
123
+ return;
124
+ }
125
+ if (pendingOpen) {
126
+ pendingOpen.reject(new Error("Superseded by a newer open()"));
127
+ }
128
+ pendingOpen = { generation, resolve, reject };
129
+ send();
130
+ clearOpenWatchdog();
131
+ openWatchdog = setTimeout(() => {
132
+ failEverything(new Error("Worker failed to load or stalled (no response). Check worker URL resolution and browser console/network logs."));
133
+ }, WORKER_OPEN_TIMEOUT_MS);
134
+ });
135
+ const open = () => {
136
+ generation += 1;
137
+ // Streams from the previous generation will never see another message.
138
+ const superseded = new Error("Superseded by a newer open()");
139
+ for (const state of streams.values()) {
140
+ state.failed = superseded;
141
+ state.waiter?.();
142
+ }
143
+ return awaitOpenResult(() => {
144
+ worker.postMessage({
145
+ requestType: RequestType.OPEN_WORKBOOK,
146
+ generation,
147
+ file,
148
+ minRowCount: options?.minRowCount,
149
+ minColumnCount: options?.minColumnCount,
150
+ });
151
+ });
152
+ };
153
+ const providePassword = (password) => awaitOpenResult(() => {
154
+ worker.postMessage({
155
+ requestType: RequestType.PROVIDE_PASSWORD,
156
+ password,
157
+ });
158
+ });
159
+ async function* loadSheet(sheetId, loadOptions) {
160
+ if (disposed) {
161
+ throw new Error("The import session has been disposed");
162
+ }
163
+ if (generation === 0) {
164
+ throw new Error("open() must resolve before loading sheets");
165
+ }
166
+ const signal = loadOptions?.signal;
167
+ if (signal?.aborted) {
168
+ throw abortError();
169
+ }
170
+ requestCounter += 1;
171
+ const requestId = `req-${requestCounter}`;
172
+ const requestGeneration = generation;
173
+ const state = { queue: [], waiter: null, failed: null };
174
+ streams.set(requestId, state);
175
+ let done = false;
176
+ const cancel = () => {
177
+ if (done || disposed) {
178
+ return;
179
+ }
180
+ worker.postMessage({
181
+ requestType: RequestType.CANCEL_REQUEST,
182
+ generation: requestGeneration,
183
+ requestId,
184
+ });
185
+ };
186
+ const onAbort = () => {
187
+ cancel();
188
+ state.failed = abortError();
189
+ state.waiter?.();
190
+ };
191
+ signal?.addEventListener("abort", onAbort, { once: true });
192
+ try {
193
+ worker.postMessage({
194
+ requestType: RequestType.LOAD_SHEET,
195
+ generation: requestGeneration,
196
+ requestId,
197
+ sheetId,
198
+ options: {
199
+ chunkSize: loadOptions?.chunkSize,
200
+ enableCellXfsRegistry: loadOptions?.enableCellXfsRegistry,
201
+ enableSharedStrings: loadOptions?.enableSharedStrings,
202
+ enableBackpressure: true,
203
+ },
204
+ });
205
+ for (;;) {
206
+ if (state.failed) {
207
+ throw state.failed;
208
+ }
209
+ const message = state.queue.shift();
210
+ if (!message) {
211
+ await new Promise((resolve) => {
212
+ state.waiter = resolve;
213
+ });
214
+ state.waiter = null;
215
+ continue;
216
+ }
217
+ if (message.responseType === ResponseType.SHEET_COMPLETE) {
218
+ done = true;
219
+ const { responseType: _rt, generation: _g, requestId: _r, ...rest } = message;
220
+ return rest;
221
+ }
222
+ const { responseType: _rt, generation: _g, requestId: _r, ...chunk } = message;
223
+ yield chunk;
224
+ // The host consumed the chunk (the generator resumed) — release the
225
+ // worker's backpressure gate.
226
+ worker.postMessage({
227
+ requestType: RequestType.ACK_ROW_DATA,
228
+ sheetId: chunk.sheetId,
229
+ chunkIndex: chunk.chunkIndex,
230
+ requestId,
231
+ });
232
+ }
233
+ }
234
+ finally {
235
+ signal?.removeEventListener("abort", onAbort);
236
+ streams.delete(requestId);
237
+ // Early generator termination (break / .return()) leaves the worker
238
+ // stream running — stop it.
239
+ cancel();
240
+ }
241
+ }
242
+ const dispose = () => {
243
+ if (disposed) {
244
+ return;
245
+ }
246
+ disposed = true;
247
+ worker.postMessage({
248
+ requestType: RequestType.DISPOSE_WORKBOOK,
249
+ generation,
250
+ });
251
+ failEverything(new Error("The import session has been disposed"));
252
+ worker.terminate();
253
+ };
254
+ return { open, providePassword, loadSheet, dispose };
255
+ };
@@ -0,0 +1,7 @@
1
+ import { Observable } from "rxjs";
2
+ import type { WorkerResponse } from "./excel-parser/types";
3
+ export declare const createExcelImportWorker: (file: File | ArrayBuffer, minRowCount?: number, minColumnCount?: number) => {
4
+ observable: Observable<WorkerResponse>;
5
+ sendMessage: (message: any) => void;
6
+ };
7
+ //# sourceMappingURL=excel-import-worker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"excel-import-worker.d.ts","sourceRoot":"","sources":["../../excel-import-worker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAW,MAAM,MAAM,CAAC;AAE3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAuC3D,eAAO,MAAM,uBAAuB,GAClC,MAAM,IAAI,GAAG,WAAW,EACxB,cAAc,MAAM,EACpB,iBAAiB,MAAM;;2BAyGO,GAAG;CASlC,CAAC"}
@@ -0,0 +1,116 @@
1
+ import { Observable, Subject } from "rxjs";
2
+ import { RequestType, ResponseType } from "./excel-parser/types";
3
+ const getWorkerErrorMessage = (error) => {
4
+ if (error instanceof ErrorEvent) {
5
+ const parts = [error.message || "Worker runtime error"];
6
+ if (error.filename) {
7
+ const line = error.lineno ? `:${error.lineno}` : "";
8
+ const col = error.colno ? `:${error.colno}` : "";
9
+ parts.push(`(${error.filename}${line}${col})`);
10
+ }
11
+ return parts.join(" ");
12
+ }
13
+ // Some browsers emit a plain Event for worker load failures.
14
+ return "Worker failed to load or crashed. Check worker URL resolution and browser console/network logs.";
15
+ };
16
+ const getWorkerFactories = () => globalThis.__ATHENA_TOOLKIT_WORKER_FACTORIES;
17
+ // A module worker that fails to load/instantiate (e.g. a transient chunk fetch
18
+ // failure on the first import of a session) can emit neither `onmessage` nor
19
+ // `onerror` in some browsers, so the import promise would hang forever (the
20
+ // "Parsing XLSX" loader never clears). The watchdog converts prolonged silence
21
+ // into the normal ERROR path so callers can recover instead of spinning.
22
+ const WORKER_INACTIVITY_TIMEOUT_MS = 20000;
23
+ export const createExcelImportWorker = (file, minRowCount, minColumnCount) => {
24
+ const worker = getWorkerFactories()?.excel?.() ??
25
+ new Worker(new URL("@rowsncolumns/toolkit/worker", import.meta.url), {
26
+ type: "module",
27
+ });
28
+ // Create a subject to emit worker events
29
+ const subject = new Subject();
30
+ // Watchdog state: once settled (terminal event or failure) we stop watching.
31
+ let settled = false;
32
+ let watchdogTimer = null;
33
+ const clearWatchdog = () => {
34
+ if (watchdogTimer !== null) {
35
+ clearTimeout(watchdogTimer);
36
+ watchdogTimer = null;
37
+ }
38
+ };
39
+ const failWorker = (message) => {
40
+ if (settled) {
41
+ return;
42
+ }
43
+ settled = true;
44
+ clearWatchdog();
45
+ subject.next({
46
+ responseType: ResponseType.ERROR,
47
+ error: message,
48
+ });
49
+ subject.complete();
50
+ worker.terminate();
51
+ };
52
+ const armWatchdog = () => {
53
+ if (settled) {
54
+ return;
55
+ }
56
+ clearWatchdog();
57
+ watchdogTimer = setTimeout(() => {
58
+ failWorker("Worker failed to load or stalled (no response). Check worker URL resolution and browser console/network logs.");
59
+ }, WORKER_INACTIVITY_TIMEOUT_MS);
60
+ };
61
+ // Handle worker messages
62
+ worker.onmessage = (e) => {
63
+ if (settled) {
64
+ return;
65
+ }
66
+ const responseType = e?.data?.responseType;
67
+ if (responseType === ResponseType.PARSE_EXCEL_COMPLETE ||
68
+ responseType === ResponseType.ERROR) {
69
+ // Terminal event from the worker — stop watching.
70
+ settled = true;
71
+ clearWatchdog();
72
+ }
73
+ else {
74
+ // A healthy import streams messages continuously; reset the inactivity
75
+ // timer so only a real stall (or a worker that never starts) trips it.
76
+ armWatchdog();
77
+ }
78
+ subject.next(e.data);
79
+ };
80
+ // Handle worker errors
81
+ worker.onerror = (error) => {
82
+ failWorker(getWorkerErrorMessage(error));
83
+ };
84
+ // Some browsers surface a failed module instantiation via onmessageerror.
85
+ worker.onmessageerror = () => {
86
+ failWorker("Worker could not deserialize a message (onmessageerror). It likely failed to load. Check the browser console/network logs.");
87
+ };
88
+ // Initiate the parsing process
89
+ worker.postMessage({
90
+ requestType: RequestType.PARSE_EXCEL,
91
+ file,
92
+ minRowCount,
93
+ minColumnCount,
94
+ });
95
+ // Start watching as soon as parsing is kicked off.
96
+ armWatchdog();
97
+ // Create an observable that completes and cleans up when unsubscribed
98
+ const observable = new Observable((observer) => {
99
+ const subscription = subject.subscribe(observer);
100
+ // Clean up function that runs when unsubscribed
101
+ return () => {
102
+ clearWatchdog();
103
+ subscription.unsubscribe();
104
+ worker.terminate();
105
+ };
106
+ });
107
+ // Create a function to send messages to the worker
108
+ const sendMessage = (message) => {
109
+ worker.postMessage(message);
110
+ };
111
+ // Return both the observable and the send function
112
+ return {
113
+ observable,
114
+ sendMessage,
115
+ };
116
+ };
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Canonical Excel built-in number-format dictionary (numFmtId 0–49) per
3
+ * ECMA-376 §18.8.30. Single source of truth shared by both the importer
4
+ * (`excel-parser/plugins/xlsx`) and the exporter (`exporter/xlsx`) so a
5
+ * built-in numFmt survives round-trips through our data layer.
6
+ *
7
+ * IDs 23–36 are reserved / locale-specific and intentionally omitted —
8
+ * Excel substitutes them per locale on render; we don't materialize them.
9
+ *
10
+ * Currency patterns (5–8) and accounting patterns (41–44) use the quoted
11
+ * `"$"` literal form, which is what Excel's own writer emits in xlsx
12
+ * files. Pattern 47 is `mmss.0` (no colon) per ECMA-376 — Excel writes
13
+ * this without a colon despite some third-party tools using `mm:ss.0`.
14
+ */
15
+ export type BuiltinNumFmtEntry = readonly [id: number, pattern: string];
16
+ export declare const BUILTIN_NUMFMTS: readonly BuiltinNumFmtEntry[];
17
+ /** Map: numFmtId → pattern. Used by the importer. */
18
+ export declare const BUILTIN_NUMFMT_BY_ID: ReadonlyMap<number, string>;
19
+ /**
20
+ * Map: pattern → numFmtId. Used by the exporter to emit a built-in
21
+ * reference instead of registering a custom numFmt.
22
+ */
23
+ export declare const BUILTIN_NUMFMT_BY_PATTERN: ReadonlyMap<string, number>;
24
+ //# sourceMappingURL=builtin-numfmts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builtin-numfmts.d.ts","sourceRoot":"","sources":["../../../excel-parser/builtin-numfmts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,MAAM,MAAM,kBAAkB,GAAG,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAExE,eAAO,MAAM,eAAe,EAAE,SAAS,kBAAkB,EAqCxD,CAAC;AAEF,qDAAqD;AACrD,eAAO,MAAM,oBAAoB,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAE5D,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,yBAAyB,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAEjE,CAAC"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Canonical Excel built-in number-format dictionary (numFmtId 0–49) per
3
+ * ECMA-376 §18.8.30. Single source of truth shared by both the importer
4
+ * (`excel-parser/plugins/xlsx`) and the exporter (`exporter/xlsx`) so a
5
+ * built-in numFmt survives round-trips through our data layer.
6
+ *
7
+ * IDs 23–36 are reserved / locale-specific and intentionally omitted —
8
+ * Excel substitutes them per locale on render; we don't materialize them.
9
+ *
10
+ * Currency patterns (5–8) and accounting patterns (41–44) use the quoted
11
+ * `"$"` literal form, which is what Excel's own writer emits in xlsx
12
+ * files. Pattern 47 is `mmss.0` (no colon) per ECMA-376 — Excel writes
13
+ * this without a colon despite some third-party tools using `mm:ss.0`.
14
+ */
15
+ export const BUILTIN_NUMFMTS = [
16
+ [0, "General"],
17
+ [1, "0"],
18
+ [2, "0.00"],
19
+ [3, "#,##0"],
20
+ [4, "#,##0.00"],
21
+ [5, '"$"#,##0_);("$"#,##0)'],
22
+ [6, '"$"#,##0_);[Red]("$"#,##0)'],
23
+ [7, '"$"#,##0.00_);("$"#,##0.00)'],
24
+ [8, '"$"#,##0.00_);[Red]("$"#,##0.00)'],
25
+ [9, "0%"],
26
+ [10, "0.00%"],
27
+ [11, "0.00E+00"],
28
+ [12, "# ?/?"],
29
+ [13, "# ??/??"],
30
+ [14, "m/d/yyyy"],
31
+ [15, "d-mmm-yy"],
32
+ [16, "d-mmm"],
33
+ [17, "mmm-yy"],
34
+ [18, "h:mm AM/PM"],
35
+ [19, "h:mm:ss AM/PM"],
36
+ [20, "h:mm"],
37
+ [21, "h:mm:ss"],
38
+ [22, "m/d/yyyy h:mm"],
39
+ [37, "#,##0_);(#,##0)"],
40
+ [38, "#,##0_);[Red](#,##0)"],
41
+ [39, "#,##0.00_);(#,##0.00)"],
42
+ [40, "#,##0.00_);[Red](#,##0.00)"],
43
+ [41, '_(* #,##0_);_(* (#,##0);_(* "-"_);_(@_)'],
44
+ [42, '_("$"* #,##0_);_("$"* (#,##0);_("$"* "-"_);_(@_)'],
45
+ [43, '_(* #,##0.00_);_(* (#,##0.00);_(* "-"??_);_(@_)'],
46
+ [44, '_("$"* #,##0.00_);_("$"* (#,##0.00);_("$"* "-"??_);_(@_)'],
47
+ [45, "mm:ss"],
48
+ [46, "[h]:mm:ss"],
49
+ [47, "mmss.0"],
50
+ [48, "##0.0E+0"],
51
+ [49, "@"],
52
+ ];
53
+ /** Map: numFmtId → pattern. Used by the importer. */
54
+ export const BUILTIN_NUMFMT_BY_ID = new Map(BUILTIN_NUMFMTS);
55
+ /**
56
+ * Map: pattern → numFmtId. Used by the exporter to emit a built-in
57
+ * reference instead of registering a custom numFmt.
58
+ */
59
+ export const BUILTIN_NUMFMT_BY_PATTERN = new Map(BUILTIN_NUMFMTS.map(([id, pattern]) => [pattern, id]));
@@ -0,0 +1,53 @@
1
+ /**
2
+ * What a CFB (Compound File Binary) container actually holds. Both encrypted
3
+ * OOXML workbooks and legacy BIFF `.xls` workbooks share the same CFB magic
4
+ * bytes, so the outer signature alone cannot distinguish them.
5
+ */
6
+ export type CfbContainerKind = "encrypted-ooxml" | "legacy-xls" | "unknown";
7
+ export declare const LEGACY_XLS_UNSUPPORTED_MESSAGE = "This file is a legacy Excel 97-2003 (.xls) workbook, which is not supported. Please open it in Excel and save it as .xlsx, then try again.";
8
+ /**
9
+ * Inspects a CFB container's directory to decide whether it is an
10
+ * Office-encrypted OOXML package (`EncryptionInfo` stream present) or an
11
+ * unencrypted legacy BIFF `.xls` workbook (`Workbook`/`Book` stream present
12
+ * without `EncryptionInfo`). Returns "unknown" for anything else, including
13
+ * containers that fail to parse — callers should fall back to their existing
14
+ * behavior in that case.
15
+ */
16
+ export declare const detectCfbContainerKind: (source: File | ArrayBuffer) => Promise<CfbContainerKind>;
17
+ export declare class CFBDecryptor {
18
+ /**
19
+ * Decrypts a CFB-encrypted XLSX file
20
+ * @param source The encrypted file or array buffer
21
+ * @param password The password to decrypt with
22
+ * @returns The decrypted XLSX data as ArrayBuffer
23
+ */
24
+ static decrypt(source: File | ArrayBuffer, password: string): Promise<ArrayBuffer>;
25
+ private static decryptAgile;
26
+ private static getEncryptionInfoContent;
27
+ private static decryptStandardFamily;
28
+ /** Standard key derivation (MS-OFFCRYPTO §2.3.4.7): iterated SHA1 then the X1‖X2 final block. */
29
+ private static standardKey;
30
+ private static decryptStandardPackage;
31
+ /** RC4 CryptoAPI key derivation (MS-OFFCRYPTO §2.3.5.2). */
32
+ private static rc4CryptoApiKey;
33
+ private static decryptRc4Package;
34
+ /** AES-ECB block decrypt (no padding). Trailing sub-block bytes are ignored. */
35
+ private static aesEcbDecrypt;
36
+ /** RC4 stream cipher (KSA + PRGA). Symmetric — the same op encrypts and decrypts. */
37
+ private static rc4;
38
+ private static le32;
39
+ private static bytesEqual;
40
+ private static parseEncryptionInfo;
41
+ private static parseAgileEncryptionXml;
42
+ private static deriveKey;
43
+ private static decryptEncryptedKey;
44
+ private static verifyPassword;
45
+ private static getEncryptedPackage;
46
+ private static decryptPackage;
47
+ private static decryptAESNoPadding;
48
+ private static deriveAgileBlockKey;
49
+ private static hash;
50
+ private static stringToUtf16LE;
51
+ private static concatArrays;
52
+ }
53
+ //# sourceMappingURL=cfb-decryptor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cfb-decryptor.d.ts","sourceRoot":"","sources":["../../../excel-parser/cfb-decryptor.ts"],"names":[],"mappings":"AAqCA;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GAAG,iBAAiB,GAAG,YAAY,GAAG,SAAS,CAAC;AAE5E,eAAO,MAAM,8BAA8B,+IACmG,CAAC;AAE/I;;;;;;;GAOG;AACH,eAAO,MAAM,sBAAsB,GACjC,QAAQ,IAAI,GAAG,WAAW,KACzB,OAAO,CAAC,gBAAgB,CAiB1B,CAAC;AAEF,qBAAa,YAAY;IACvB;;;;;OAKG;WACU,OAAO,CAClB,MAAM,EAAE,IAAI,GAAG,WAAW,EAC1B,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,WAAW,CAAC;IAiCvB,OAAO,CAAC,MAAM,CAAC,YAAY;IA6B3B,OAAO,CAAC,MAAM,CAAC,wBAAwB;IAiBvC,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAsEpC,iGAAiG;IACjG,OAAO,CAAC,MAAM,CAAC,WAAW;IAyB1B,OAAO,CAAC,MAAM,CAAC,sBAAsB;IAiBrC,4DAA4D;IAC5D,OAAO,CAAC,MAAM,CAAC,eAAe;IAmB9B,OAAO,CAAC,MAAM,CAAC,iBAAiB;IA4BhC,gFAAgF;IAChF,OAAO,CAAC,MAAM,CAAC,aAAa;IAM5B,qFAAqF;IACrF,OAAO,CAAC,MAAM,CAAC,GAAG;IAwBlB,OAAO,CAAC,MAAM,CAAC,IAAI;IAMnB,OAAO,CAAC,MAAM,CAAC,UAAU;IAQzB,OAAO,CAAC,MAAM,CAAC,mBAAmB;IA4ClC,OAAO,CAAC,MAAM,CAAC,uBAAuB;IAoGtC,OAAO,CAAC,MAAM,CAAC,SAAS;IAuBxB,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAoBlC,OAAO,CAAC,MAAM,CAAC,cAAc;IAuD7B,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAclC,OAAO,CAAC,MAAM,CAAC,cAAc;IAwD7B,OAAO,CAAC,MAAM,CAAC,mBAAmB;IASlC,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAWlC,OAAO,CAAC,MAAM,CAAC,IAAI;IAenB,OAAO,CAAC,MAAM,CAAC,eAAe;IAU9B,OAAO,CAAC,MAAM,CAAC,YAAY;CAW5B"}