@cj-tech-master/excelts 5.0.6 → 5.1.0

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 (273) hide show
  1. package/dist/browser/index.browser.d.ts +1 -1
  2. package/dist/browser/index.d.ts +1 -1
  3. package/dist/browser/modules/archive/unzip/stream.base.js +19 -19
  4. package/dist/browser/modules/archive/unzip/stream.browser.js +3 -3
  5. package/dist/browser/modules/csv/csv-core.js +6 -3
  6. package/dist/browser/modules/csv/csv.browser.js +2 -2
  7. package/dist/browser/modules/csv/csv.js +1 -1
  8. package/dist/browser/modules/excel/anchor.js +4 -4
  9. package/dist/browser/modules/excel/cell.js +5 -5
  10. package/dist/browser/modules/excel/column.js +4 -4
  11. package/dist/browser/modules/excel/defined-names.js +1 -1
  12. package/dist/browser/modules/excel/form-control.js +1 -1
  13. package/dist/browser/modules/excel/pivot-table.d.ts +168 -17
  14. package/dist/browser/modules/excel/pivot-table.js +278 -70
  15. package/dist/browser/modules/excel/row.js +4 -4
  16. package/dist/browser/modules/excel/stream/workbook-reader.browser.js +4 -4
  17. package/dist/browser/modules/excel/stream/workbook-writer.browser.js +4 -4
  18. package/dist/browser/modules/excel/stream/worksheet-reader.js +1 -1
  19. package/dist/browser/modules/excel/stream/worksheet-writer.js +4 -4
  20. package/dist/browser/modules/excel/table.js +2 -2
  21. package/dist/browser/modules/excel/types.d.ts +0 -4
  22. package/dist/browser/modules/excel/utils/cell-format.js +3 -3
  23. package/dist/browser/modules/excel/utils/shared-formula.js +1 -1
  24. package/dist/browser/modules/excel/utils/stream-buf.js +2 -2
  25. package/dist/browser/modules/excel/utils/string-buf.js +1 -1
  26. package/dist/browser/modules/excel/workbook.d.ts +0 -2
  27. package/dist/browser/modules/excel/workbook.js +4 -5
  28. package/dist/browser/modules/excel/worksheet.js +9 -9
  29. package/dist/browser/modules/excel/xlsx/xform/base-xform.d.ts +5 -5
  30. package/dist/browser/modules/excel/xlsx/xform/base-xform.js +1 -1
  31. package/dist/browser/modules/excel/xlsx/xform/book/defined-name-xform.js +2 -2
  32. package/dist/browser/modules/excel/xlsx/xform/book/workbook-view-xform.js +4 -4
  33. package/dist/browser/modules/excel/xlsx/xform/book/workbook-xform.js +16 -4
  34. package/dist/browser/modules/excel/xlsx/xform/comment/comment-xform.d.ts +1 -2
  35. package/dist/browser/modules/excel/xlsx/xform/comment/comments-xform.d.ts +1 -2
  36. package/dist/browser/modules/excel/xlsx/xform/comment/style/vml-position-xform.d.ts +3 -4
  37. package/dist/browser/modules/excel/xlsx/xform/comment/style/vml-position-xform.js +1 -1
  38. package/dist/browser/modules/excel/xlsx/xform/comment/style/vml-protection-xform.js +1 -1
  39. package/dist/browser/modules/excel/xlsx/xform/comment/vml-client-data-xform.d.ts +1 -2
  40. package/dist/browser/modules/excel/xlsx/xform/comment/vml-notes-xform.d.ts +1 -2
  41. package/dist/browser/modules/excel/xlsx/xform/comment/vml-shape-xform.js +1 -1
  42. package/dist/browser/modules/excel/xlsx/xform/comment/vml-textbox-xform.d.ts +1 -2
  43. package/dist/browser/modules/excel/xlsx/xform/comment/vml-textbox-xform.js +1 -1
  44. package/dist/browser/modules/excel/xlsx/xform/composite-xform.d.ts +1 -1
  45. package/dist/browser/modules/excel/xlsx/xform/core/app-xform.js +1 -1
  46. package/dist/browser/modules/excel/xlsx/xform/core/content-types-xform.js +24 -11
  47. package/dist/browser/modules/excel/xlsx/xform/drawing/base-cell-anchor-xform.js +1 -1
  48. package/dist/browser/modules/excel/xlsx/xform/drawing/blip-xform.d.ts +1 -2
  49. package/dist/browser/modules/excel/xlsx/xform/drawing/cell-position-xform.d.ts +1 -2
  50. package/dist/browser/modules/excel/xlsx/xform/drawing/ctrl-prop-xform.d.ts +1 -2
  51. package/dist/browser/modules/excel/xlsx/xform/drawing/drawing-xform.d.ts +1 -2
  52. package/dist/browser/modules/excel/xlsx/xform/drawing/ext-xform.d.ts +1 -2
  53. package/dist/browser/modules/excel/xlsx/xform/drawing/ext-xform.js +2 -2
  54. package/dist/browser/modules/excel/xlsx/xform/drawing/one-cell-anchor-xform.js +1 -1
  55. package/dist/browser/modules/excel/xlsx/xform/drawing/two-cell-anchor-xform.js +1 -1
  56. package/dist/browser/modules/excel/xlsx/xform/drawing/vml-drawing-xform.d.ts +1 -2
  57. package/dist/browser/modules/excel/xlsx/xform/list-xform.d.ts +1 -2
  58. package/dist/browser/modules/excel/xlsx/xform/list-xform.js +3 -3
  59. package/dist/browser/modules/excel/xlsx/xform/pivot-table/cache-field-xform.d.ts +5 -15
  60. package/dist/browser/modules/excel/xlsx/xform/pivot-table/cache-field-xform.js +134 -52
  61. package/dist/browser/modules/excel/xlsx/xform/pivot-table/cache-field.d.ts +14 -15
  62. package/dist/browser/modules/excel/xlsx/xform/pivot-table/cache-field.js +244 -70
  63. package/dist/browser/modules/excel/xlsx/xform/pivot-table/pivot-cache-definition-xform.d.ts +13 -29
  64. package/dist/browser/modules/excel/xlsx/xform/pivot-table/pivot-cache-definition-xform.js +213 -37
  65. package/dist/browser/modules/excel/xlsx/xform/pivot-table/pivot-cache-records-xform.d.ts +7 -34
  66. package/dist/browser/modules/excel/xlsx/xform/pivot-table/pivot-cache-records-xform.js +143 -41
  67. package/dist/browser/modules/excel/xlsx/xform/pivot-table/pivot-table-xform.d.ts +101 -27
  68. package/dist/browser/modules/excel/xlsx/xform/pivot-table/pivot-table-xform.js +793 -408
  69. package/dist/browser/modules/excel/xlsx/xform/pivot-table/raw-xml-collector.d.ts +78 -0
  70. package/dist/browser/modules/excel/xlsx/xform/pivot-table/raw-xml-collector.js +149 -0
  71. package/dist/browser/modules/excel/xlsx/xform/sheet/cell-xform.js +1 -1
  72. package/dist/browser/modules/excel/xlsx/xform/sheet/cf/cf-rule-xform.js +1 -1
  73. package/dist/browser/modules/excel/xlsx/xform/sheet/cf/conditional-formattings-xform.js +1 -1
  74. package/dist/browser/modules/excel/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js +1 -1
  75. package/dist/browser/modules/excel/xlsx/xform/sheet/col-xform.js +3 -3
  76. package/dist/browser/modules/excel/xlsx/xform/sheet/data-validations-xform.js +3 -3
  77. package/dist/browser/modules/excel/xlsx/xform/sheet/header-footer-xform.js +6 -6
  78. package/dist/browser/modules/excel/xlsx/xform/sheet/page-setup-xform.js +11 -11
  79. package/dist/browser/modules/excel/xlsx/xform/sheet/row-xform.d.ts +1 -2
  80. package/dist/browser/modules/excel/xlsx/xform/sheet/sheet-format-properties-xform.js +3 -3
  81. package/dist/browser/modules/excel/xlsx/xform/sheet/sheet-view-xform.d.ts +1 -2
  82. package/dist/browser/modules/excel/xlsx/xform/sheet/sheet-view-xform.js +10 -10
  83. package/dist/browser/modules/excel/xlsx/xform/sheet/worksheet-xform.js +12 -12
  84. package/dist/browser/modules/excel/xlsx/xform/strings/phonetic-text-xform.js +2 -2
  85. package/dist/browser/modules/excel/xlsx/xform/style/color-xform.js +1 -1
  86. package/dist/browser/modules/excel/xlsx/xform/style/style-xform.js +5 -5
  87. package/dist/browser/modules/excel/xlsx/xform/table/auto-filter-xform.d.ts +1 -2
  88. package/dist/browser/modules/excel/xlsx/xform/table/custom-filter-xform.d.ts +1 -2
  89. package/dist/browser/modules/excel/xlsx/xform/table/filter-column-xform.d.ts +1 -2
  90. package/dist/browser/modules/excel/xlsx/xform/table/filter-xform.d.ts +1 -2
  91. package/dist/browser/modules/excel/xlsx/xform/table/table-column-xform.d.ts +1 -2
  92. package/dist/browser/modules/excel/xlsx/xform/table/table-style-info-xform.d.ts +1 -2
  93. package/dist/browser/modules/excel/xlsx/xform/table/table-xform.d.ts +1 -2
  94. package/dist/browser/modules/excel/xlsx/xlsx.browser.d.ts +5 -2
  95. package/dist/browser/modules/excel/xlsx/xlsx.browser.js +88 -54
  96. package/dist/browser/utils/env.d.ts +0 -5
  97. package/dist/browser/utils/env.js +0 -7
  98. package/dist/browser/utils/utils.base.d.ts +8 -13
  99. package/dist/browser/utils/utils.base.js +40 -47
  100. package/dist/browser/utils/utils.browser.d.ts +1 -1
  101. package/dist/browser/utils/utils.browser.js +1 -1
  102. package/dist/browser/utils/utils.d.ts +1 -1
  103. package/dist/browser/utils/utils.js +1 -1
  104. package/dist/cjs/modules/archive/unzip/stream.base.js +19 -19
  105. package/dist/cjs/modules/archive/unzip/stream.browser.js +3 -3
  106. package/dist/cjs/modules/csv/csv-core.js +6 -3
  107. package/dist/cjs/modules/csv/csv.browser.js +2 -2
  108. package/dist/cjs/modules/csv/csv.js +1 -1
  109. package/dist/cjs/modules/excel/anchor.js +4 -4
  110. package/dist/cjs/modules/excel/cell.js +5 -5
  111. package/dist/cjs/modules/excel/column.js +4 -4
  112. package/dist/cjs/modules/excel/defined-names.js +1 -1
  113. package/dist/cjs/modules/excel/form-control.js +1 -1
  114. package/dist/cjs/modules/excel/pivot-table.js +280 -70
  115. package/dist/cjs/modules/excel/row.js +4 -4
  116. package/dist/cjs/modules/excel/stream/workbook-reader.browser.js +4 -4
  117. package/dist/cjs/modules/excel/stream/workbook-writer.browser.js +4 -4
  118. package/dist/cjs/modules/excel/stream/worksheet-reader.js +1 -1
  119. package/dist/cjs/modules/excel/stream/worksheet-writer.js +4 -4
  120. package/dist/cjs/modules/excel/table.js +2 -2
  121. package/dist/cjs/modules/excel/utils/cell-format.js +3 -3
  122. package/dist/cjs/modules/excel/utils/shared-formula.js +1 -1
  123. package/dist/cjs/modules/excel/utils/stream-buf.js +2 -2
  124. package/dist/cjs/modules/excel/utils/string-buf.js +1 -1
  125. package/dist/cjs/modules/excel/workbook.js +4 -5
  126. package/dist/cjs/modules/excel/worksheet.js +9 -9
  127. package/dist/cjs/modules/excel/xlsx/xform/base-xform.js +1 -1
  128. package/dist/cjs/modules/excel/xlsx/xform/book/defined-name-xform.js +2 -2
  129. package/dist/cjs/modules/excel/xlsx/xform/book/workbook-view-xform.js +4 -4
  130. package/dist/cjs/modules/excel/xlsx/xform/book/workbook-xform.js +16 -4
  131. package/dist/cjs/modules/excel/xlsx/xform/comment/style/vml-position-xform.js +1 -1
  132. package/dist/cjs/modules/excel/xlsx/xform/comment/style/vml-protection-xform.js +1 -1
  133. package/dist/cjs/modules/excel/xlsx/xform/comment/vml-shape-xform.js +1 -1
  134. package/dist/cjs/modules/excel/xlsx/xform/comment/vml-textbox-xform.js +1 -1
  135. package/dist/cjs/modules/excel/xlsx/xform/core/app-xform.js +1 -1
  136. package/dist/cjs/modules/excel/xlsx/xform/core/content-types-xform.js +24 -11
  137. package/dist/cjs/modules/excel/xlsx/xform/drawing/base-cell-anchor-xform.js +1 -1
  138. package/dist/cjs/modules/excel/xlsx/xform/drawing/ext-xform.js +2 -2
  139. package/dist/cjs/modules/excel/xlsx/xform/drawing/one-cell-anchor-xform.js +1 -1
  140. package/dist/cjs/modules/excel/xlsx/xform/drawing/two-cell-anchor-xform.js +1 -1
  141. package/dist/cjs/modules/excel/xlsx/xform/list-xform.js +3 -3
  142. package/dist/cjs/modules/excel/xlsx/xform/pivot-table/cache-field-xform.js +133 -51
  143. package/dist/cjs/modules/excel/xlsx/xform/pivot-table/cache-field.js +245 -71
  144. package/dist/cjs/modules/excel/xlsx/xform/pivot-table/pivot-cache-definition-xform.js +212 -36
  145. package/dist/cjs/modules/excel/xlsx/xform/pivot-table/pivot-cache-records-xform.js +142 -40
  146. package/dist/cjs/modules/excel/xlsx/xform/pivot-table/pivot-table-xform.js +793 -408
  147. package/dist/cjs/modules/excel/xlsx/xform/pivot-table/raw-xml-collector.js +153 -0
  148. package/dist/cjs/modules/excel/xlsx/xform/sheet/cell-xform.js +1 -1
  149. package/dist/cjs/modules/excel/xlsx/xform/sheet/cf/cf-rule-xform.js +1 -1
  150. package/dist/cjs/modules/excel/xlsx/xform/sheet/cf/conditional-formattings-xform.js +1 -1
  151. package/dist/cjs/modules/excel/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js +1 -1
  152. package/dist/cjs/modules/excel/xlsx/xform/sheet/col-xform.js +3 -3
  153. package/dist/cjs/modules/excel/xlsx/xform/sheet/data-validations-xform.js +3 -3
  154. package/dist/cjs/modules/excel/xlsx/xform/sheet/header-footer-xform.js +6 -6
  155. package/dist/cjs/modules/excel/xlsx/xform/sheet/page-setup-xform.js +11 -11
  156. package/dist/cjs/modules/excel/xlsx/xform/sheet/sheet-format-properties-xform.js +3 -3
  157. package/dist/cjs/modules/excel/xlsx/xform/sheet/sheet-view-xform.js +10 -10
  158. package/dist/cjs/modules/excel/xlsx/xform/sheet/worksheet-xform.js +12 -12
  159. package/dist/cjs/modules/excel/xlsx/xform/strings/phonetic-text-xform.js +2 -2
  160. package/dist/cjs/modules/excel/xlsx/xform/style/color-xform.js +1 -1
  161. package/dist/cjs/modules/excel/xlsx/xform/style/style-xform.js +5 -5
  162. package/dist/cjs/modules/excel/xlsx/xlsx.browser.js +88 -54
  163. package/dist/cjs/utils/env.js +0 -8
  164. package/dist/cjs/utils/utils.base.js +41 -54
  165. package/dist/cjs/utils/utils.browser.js +2 -7
  166. package/dist/cjs/utils/utils.js +2 -7
  167. package/dist/esm/modules/archive/unzip/stream.base.js +19 -19
  168. package/dist/esm/modules/archive/unzip/stream.browser.js +3 -3
  169. package/dist/esm/modules/csv/csv-core.js +6 -3
  170. package/dist/esm/modules/csv/csv.browser.js +2 -2
  171. package/dist/esm/modules/csv/csv.js +1 -1
  172. package/dist/esm/modules/excel/anchor.js +4 -4
  173. package/dist/esm/modules/excel/cell.js +5 -5
  174. package/dist/esm/modules/excel/column.js +4 -4
  175. package/dist/esm/modules/excel/defined-names.js +1 -1
  176. package/dist/esm/modules/excel/form-control.js +1 -1
  177. package/dist/esm/modules/excel/pivot-table.js +278 -70
  178. package/dist/esm/modules/excel/row.js +4 -4
  179. package/dist/esm/modules/excel/stream/workbook-reader.browser.js +4 -4
  180. package/dist/esm/modules/excel/stream/workbook-writer.browser.js +4 -4
  181. package/dist/esm/modules/excel/stream/worksheet-reader.js +1 -1
  182. package/dist/esm/modules/excel/stream/worksheet-writer.js +4 -4
  183. package/dist/esm/modules/excel/table.js +2 -2
  184. package/dist/esm/modules/excel/utils/cell-format.js +3 -3
  185. package/dist/esm/modules/excel/utils/shared-formula.js +1 -1
  186. package/dist/esm/modules/excel/utils/stream-buf.js +2 -2
  187. package/dist/esm/modules/excel/utils/string-buf.js +1 -1
  188. package/dist/esm/modules/excel/workbook.js +4 -5
  189. package/dist/esm/modules/excel/worksheet.js +9 -9
  190. package/dist/esm/modules/excel/xlsx/xform/base-xform.js +1 -1
  191. package/dist/esm/modules/excel/xlsx/xform/book/defined-name-xform.js +2 -2
  192. package/dist/esm/modules/excel/xlsx/xform/book/workbook-view-xform.js +4 -4
  193. package/dist/esm/modules/excel/xlsx/xform/book/workbook-xform.js +16 -4
  194. package/dist/esm/modules/excel/xlsx/xform/comment/style/vml-position-xform.js +1 -1
  195. package/dist/esm/modules/excel/xlsx/xform/comment/style/vml-protection-xform.js +1 -1
  196. package/dist/esm/modules/excel/xlsx/xform/comment/vml-shape-xform.js +1 -1
  197. package/dist/esm/modules/excel/xlsx/xform/comment/vml-textbox-xform.js +1 -1
  198. package/dist/esm/modules/excel/xlsx/xform/core/app-xform.js +1 -1
  199. package/dist/esm/modules/excel/xlsx/xform/core/content-types-xform.js +24 -11
  200. package/dist/esm/modules/excel/xlsx/xform/drawing/base-cell-anchor-xform.js +1 -1
  201. package/dist/esm/modules/excel/xlsx/xform/drawing/ext-xform.js +2 -2
  202. package/dist/esm/modules/excel/xlsx/xform/drawing/one-cell-anchor-xform.js +1 -1
  203. package/dist/esm/modules/excel/xlsx/xform/drawing/two-cell-anchor-xform.js +1 -1
  204. package/dist/esm/modules/excel/xlsx/xform/list-xform.js +3 -3
  205. package/dist/esm/modules/excel/xlsx/xform/pivot-table/cache-field-xform.js +134 -52
  206. package/dist/esm/modules/excel/xlsx/xform/pivot-table/cache-field.js +244 -70
  207. package/dist/esm/modules/excel/xlsx/xform/pivot-table/pivot-cache-definition-xform.js +213 -37
  208. package/dist/esm/modules/excel/xlsx/xform/pivot-table/pivot-cache-records-xform.js +143 -41
  209. package/dist/esm/modules/excel/xlsx/xform/pivot-table/pivot-table-xform.js +793 -408
  210. package/dist/esm/modules/excel/xlsx/xform/pivot-table/raw-xml-collector.js +149 -0
  211. package/dist/esm/modules/excel/xlsx/xform/sheet/cell-xform.js +1 -1
  212. package/dist/esm/modules/excel/xlsx/xform/sheet/cf/cf-rule-xform.js +1 -1
  213. package/dist/esm/modules/excel/xlsx/xform/sheet/cf/conditional-formattings-xform.js +1 -1
  214. package/dist/esm/modules/excel/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js +1 -1
  215. package/dist/esm/modules/excel/xlsx/xform/sheet/col-xform.js +3 -3
  216. package/dist/esm/modules/excel/xlsx/xform/sheet/data-validations-xform.js +3 -3
  217. package/dist/esm/modules/excel/xlsx/xform/sheet/header-footer-xform.js +6 -6
  218. package/dist/esm/modules/excel/xlsx/xform/sheet/page-setup-xform.js +11 -11
  219. package/dist/esm/modules/excel/xlsx/xform/sheet/sheet-format-properties-xform.js +3 -3
  220. package/dist/esm/modules/excel/xlsx/xform/sheet/sheet-view-xform.js +10 -10
  221. package/dist/esm/modules/excel/xlsx/xform/sheet/worksheet-xform.js +12 -12
  222. package/dist/esm/modules/excel/xlsx/xform/strings/phonetic-text-xform.js +2 -2
  223. package/dist/esm/modules/excel/xlsx/xform/style/color-xform.js +1 -1
  224. package/dist/esm/modules/excel/xlsx/xform/style/style-xform.js +5 -5
  225. package/dist/esm/modules/excel/xlsx/xlsx.browser.js +88 -54
  226. package/dist/esm/utils/env.js +0 -7
  227. package/dist/esm/utils/utils.base.js +40 -47
  228. package/dist/esm/utils/utils.browser.js +1 -1
  229. package/dist/esm/utils/utils.js +1 -1
  230. package/dist/iife/excelts.iife.js +1553 -718
  231. package/dist/iife/excelts.iife.js.map +1 -1
  232. package/dist/iife/excelts.iife.min.js +36 -105
  233. package/dist/types/index.browser.d.ts +1 -1
  234. package/dist/types/index.d.ts +1 -1
  235. package/dist/types/modules/excel/pivot-table.d.ts +168 -17
  236. package/dist/types/modules/excel/types.d.ts +0 -4
  237. package/dist/types/modules/excel/workbook.d.ts +0 -2
  238. package/dist/types/modules/excel/xlsx/xform/base-xform.d.ts +5 -5
  239. package/dist/types/modules/excel/xlsx/xform/comment/comment-xform.d.ts +1 -2
  240. package/dist/types/modules/excel/xlsx/xform/comment/comments-xform.d.ts +1 -2
  241. package/dist/types/modules/excel/xlsx/xform/comment/style/vml-position-xform.d.ts +3 -4
  242. package/dist/types/modules/excel/xlsx/xform/comment/vml-client-data-xform.d.ts +1 -2
  243. package/dist/types/modules/excel/xlsx/xform/comment/vml-notes-xform.d.ts +1 -2
  244. package/dist/types/modules/excel/xlsx/xform/comment/vml-textbox-xform.d.ts +1 -2
  245. package/dist/types/modules/excel/xlsx/xform/composite-xform.d.ts +1 -1
  246. package/dist/types/modules/excel/xlsx/xform/drawing/blip-xform.d.ts +1 -2
  247. package/dist/types/modules/excel/xlsx/xform/drawing/cell-position-xform.d.ts +1 -2
  248. package/dist/types/modules/excel/xlsx/xform/drawing/ctrl-prop-xform.d.ts +1 -2
  249. package/dist/types/modules/excel/xlsx/xform/drawing/drawing-xform.d.ts +1 -2
  250. package/dist/types/modules/excel/xlsx/xform/drawing/ext-xform.d.ts +1 -2
  251. package/dist/types/modules/excel/xlsx/xform/drawing/vml-drawing-xform.d.ts +1 -2
  252. package/dist/types/modules/excel/xlsx/xform/list-xform.d.ts +1 -2
  253. package/dist/types/modules/excel/xlsx/xform/pivot-table/cache-field-xform.d.ts +5 -15
  254. package/dist/types/modules/excel/xlsx/xform/pivot-table/cache-field.d.ts +14 -15
  255. package/dist/types/modules/excel/xlsx/xform/pivot-table/pivot-cache-definition-xform.d.ts +13 -29
  256. package/dist/types/modules/excel/xlsx/xform/pivot-table/pivot-cache-records-xform.d.ts +7 -34
  257. package/dist/types/modules/excel/xlsx/xform/pivot-table/pivot-table-xform.d.ts +101 -27
  258. package/dist/types/modules/excel/xlsx/xform/pivot-table/raw-xml-collector.d.ts +78 -0
  259. package/dist/types/modules/excel/xlsx/xform/sheet/row-xform.d.ts +1 -2
  260. package/dist/types/modules/excel/xlsx/xform/sheet/sheet-view-xform.d.ts +1 -2
  261. package/dist/types/modules/excel/xlsx/xform/table/auto-filter-xform.d.ts +1 -2
  262. package/dist/types/modules/excel/xlsx/xform/table/custom-filter-xform.d.ts +1 -2
  263. package/dist/types/modules/excel/xlsx/xform/table/filter-column-xform.d.ts +1 -2
  264. package/dist/types/modules/excel/xlsx/xform/table/filter-xform.d.ts +1 -2
  265. package/dist/types/modules/excel/xlsx/xform/table/table-column-xform.d.ts +1 -2
  266. package/dist/types/modules/excel/xlsx/xform/table/table-style-info-xform.d.ts +1 -2
  267. package/dist/types/modules/excel/xlsx/xform/table/table-xform.d.ts +1 -2
  268. package/dist/types/modules/excel/xlsx/xlsx.browser.d.ts +5 -2
  269. package/dist/types/utils/env.d.ts +0 -5
  270. package/dist/types/utils/utils.base.d.ts +8 -13
  271. package/dist/types/utils/utils.browser.d.ts +1 -1
  272. package/dist/types/utils/utils.d.ts +1 -1
  273. package/package.json +1 -1
@@ -0,0 +1,153 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RawXmlCollector = void 0;
4
+ exports.serializeAttributes = serializeAttributes;
5
+ const utils_1 = require("../../../../../utils/utils.js");
6
+ /**
7
+ * Reusable utility for collecting raw XML fragments during SAX parsing.
8
+ *
9
+ * Many pivot-table xforms need to capture entire sub-trees (extLst, formats,
10
+ * conditionalFormats, filters, fieldGroup, unknown elements, …) as raw strings
11
+ * for roundtrip preservation. The pattern — `active` flag, `depth` counter,
12
+ * `buffer` of string fragments, plus identical `feedOpen` / `feedClose` /
13
+ * `feedText` logic — was previously copy-pasted across multiple files.
14
+ *
15
+ * Usage:
16
+ * ```ts
17
+ * const collector = new RawXmlCollector("extLst");
18
+ * // In parseOpen, when you see <extLst>:
19
+ * collector.start(); // opens with <extLst>
20
+ * // For every child open tag while active:
21
+ * collector.feedOpen(name, attributes);
22
+ * // For every text node while active:
23
+ * collector.feedText(text);
24
+ * // For every close tag while active:
25
+ * if (collector.feedClose(name)) { ... } // returns true when root tag closed
26
+ * // Retrieve result:
27
+ * collector.result; // joined XML string
28
+ * ```
29
+ */
30
+ class RawXmlCollector {
31
+ constructor(rootTag) {
32
+ /** Whether the collector is currently capturing. */
33
+ this.active = false;
34
+ /** Nesting depth *within* the root element (0 = direct children). */
35
+ this.depth = 0;
36
+ /** String fragments being accumulated. */
37
+ this.buffer = [];
38
+ /** Index of the last open-tag entry in the buffer (for self-closing collapse). */
39
+ this.lastOpenIndex = -1;
40
+ this.rootTag = rootTag;
41
+ }
42
+ // ---------------------------------------------------------------------------
43
+ // Lifecycle
44
+ // ---------------------------------------------------------------------------
45
+ /**
46
+ * Begin collecting. Pushes the opening root tag (with optional attributes)
47
+ * and resets depth.
48
+ *
49
+ * @param attributes - Attributes on the root element (may be undefined/null).
50
+ */
51
+ start(attributes) {
52
+ this.active = true;
53
+ this.depth = 0;
54
+ const attrsStr = serializeAttributes(attributes);
55
+ this.buffer = [`<${this.rootTag}${attrsStr ? " " + attrsStr : ""}>`];
56
+ }
57
+ /**
58
+ * Begin collecting with a dynamically determined root tag.
59
+ * Used for catch-all unknown element collectors where the tag name
60
+ * is not known at construction time.
61
+ */
62
+ startAs(rootTag, attributes) {
63
+ this.rootTag = rootTag;
64
+ this.start(attributes);
65
+ }
66
+ /**
67
+ * Reset the collector to its initial idle state.
68
+ */
69
+ reset() {
70
+ this.active = false;
71
+ this.depth = 0;
72
+ this.buffer.length = 0;
73
+ this.lastOpenIndex = -1;
74
+ }
75
+ // ---------------------------------------------------------------------------
76
+ // Feed methods — call these from parseOpen / parseText / parseClose
77
+ // ---------------------------------------------------------------------------
78
+ /**
79
+ * Feed an open-tag event. Must only be called while `active` is true.
80
+ */
81
+ feedOpen(name, attributes) {
82
+ const attrsStr = serializeAttributes(attributes);
83
+ this.buffer.push(`<${name}${attrsStr ? " " + attrsStr : ""}>`);
84
+ this.depth++;
85
+ this.lastOpenIndex = this.buffer.length - 1;
86
+ }
87
+ /**
88
+ * Feed a text-node event. Must only be called while `active` is true.
89
+ */
90
+ feedText(text) {
91
+ this.buffer.push((0, utils_1.xmlEncode)(text));
92
+ this.lastOpenIndex = -1;
93
+ }
94
+ /**
95
+ * Feed a close-tag event.
96
+ *
97
+ * @returns `true` when the **root** close tag has been received (collector
98
+ * deactivates itself and the result is ready). `false` for any
99
+ * nested close tag.
100
+ */
101
+ feedClose(name) {
102
+ if (name === this.rootTag && this.depth === 0) {
103
+ this.buffer.push(`</${name}>`);
104
+ this.active = false;
105
+ this.lastOpenIndex = -1;
106
+ return true;
107
+ }
108
+ // Guard against depth going negative (e.g. mismatched close tags)
109
+ if (this.depth > 0) {
110
+ this.depth--;
111
+ }
112
+ // Collapse self-closing: if the close tag matches the last open tag and
113
+ // nothing was written between them, rewrite `<tag ...>` → `<tag ... />`
114
+ if (this.lastOpenIndex >= 0 && this.lastOpenIndex === this.buffer.length - 1) {
115
+ const openTag = this.buffer[this.lastOpenIndex];
116
+ // openTag ends with ">" — replace with " />"
117
+ this.buffer[this.lastOpenIndex] = openTag.slice(0, -1) + " />";
118
+ this.lastOpenIndex = -1;
119
+ return false;
120
+ }
121
+ this.lastOpenIndex = -1;
122
+ this.buffer.push(`</${name}>`);
123
+ return false;
124
+ }
125
+ // ---------------------------------------------------------------------------
126
+ // Result
127
+ // ---------------------------------------------------------------------------
128
+ /** The collected XML string. Only meaningful after `feedClose` returns true. */
129
+ get result() {
130
+ return this.buffer.join("");
131
+ }
132
+ }
133
+ exports.RawXmlCollector = RawXmlCollector;
134
+ // ---------------------------------------------------------------------------
135
+ // Helpers
136
+ // ---------------------------------------------------------------------------
137
+ /**
138
+ * Serialize an attributes object to an XML attribute string.
139
+ * `null`, `undefined`, and empty objects produce an empty string.
140
+ */
141
+ function serializeAttributes(attributes) {
142
+ if (!attributes) {
143
+ return "";
144
+ }
145
+ const entries = Object.entries(attributes);
146
+ if (entries.length === 0) {
147
+ return "";
148
+ }
149
+ return entries
150
+ .filter(([, v]) => v != null)
151
+ .map(([k, v]) => `${k}="${(0, utils_1.xmlEncode)(String(v))}"`)
152
+ .join(" ");
153
+ }
@@ -382,7 +382,7 @@ class CellXform extends base_xform_1.BaseXform {
382
382
  return true;
383
383
  case "r":
384
384
  this.model.value = this.model.value || {};
385
- this.model.value.richText = this.model.value.richText || [];
385
+ this.model.value.richText = this.model.value.richText ?? [];
386
386
  this.model.value.richText.push(this.parser.model);
387
387
  this.parser = undefined;
388
388
  this.currentNode = undefined;
@@ -253,7 +253,7 @@ class CfRuleXform extends composite_xform_1.CompositeXform {
253
253
  break;
254
254
  case "formula":
255
255
  // except - formula is a string and appends to formulae
256
- this.model.formulae = this.model.formulae || [];
256
+ this.model.formulae = this.model.formulae ?? [];
257
257
  this.model.formulae.push(parser.model);
258
258
  break;
259
259
  }
@@ -16,7 +16,7 @@ class ConditionalFormattingsXform extends base_xform_1.BaseXform {
16
16
  }
17
17
  prepare(model, options) {
18
18
  // ensure each rule has a priority value
19
- let nextPriority = model.reduce((p, cf) => Math.max(p, ...cf.rules.map((rule) => rule.priority || 0)), 1);
19
+ let nextPriority = model.reduce((p, cf) => Math.max(p, ...cf.rules.map((rule) => rule.priority ?? 0)), 1);
20
20
  model.forEach((cf) => {
21
21
  cf.rules.forEach((rule) => {
22
22
  if (!rule.priority) {
@@ -64,7 +64,7 @@ class CfRuleExtXform extends composite_xform_1.CompositeXform {
64
64
  xmlStream.openNode(this.tag, {
65
65
  type: "iconSet",
66
66
  priority: model.priority,
67
- id: model.x14Id || `{${(0, uuid_1.uuidV4)()}}`
67
+ id: model.x14Id ?? `{${(0, uuid_1.uuidV4)()}}`
68
68
  });
69
69
  this.iconSetXform.render(xmlStream, model);
70
70
  xmlStream.closeNode();
@@ -41,9 +41,9 @@ class ColXform extends base_xform_1.BaseXform {
41
41
  parseOpen(node) {
42
42
  if (node.name === "col") {
43
43
  const model = (this.model = {
44
- min: parseInt(node.attributes.min || "0", 10),
45
- max: parseInt(node.attributes.max || "0", 10),
46
- width: node.attributes.width === undefined ? undefined : parseFloat(node.attributes.width || "0")
44
+ min: parseInt(node.attributes.min ?? "0", 10),
45
+ max: parseInt(node.attributes.max ?? "0", 10),
46
+ width: node.attributes.width === undefined ? undefined : parseFloat(node.attributes.width ?? "0")
47
47
  });
48
48
  if (node.attributes.style) {
49
49
  model.styleId = parseInt(node.attributes.style, 10);
@@ -162,7 +162,7 @@ class DataValidationsXform extends base_xform_1.BaseXform {
162
162
  xmlStream.addAttribute("error", value.error);
163
163
  }
164
164
  xmlStream.addAttribute("sqref", value.sqref);
165
- (value.formulae || []).forEach((formula, index) => {
165
+ (value.formulae ?? []).forEach((formula, index) => {
166
166
  xmlStream.openNode(`formula${index + 1}`);
167
167
  if (value.type === "date") {
168
168
  xmlStream.writeText((0, utils_1.dateToExcel)(new Date(formula)));
@@ -184,7 +184,7 @@ class DataValidationsXform extends base_xform_1.BaseXform {
184
184
  return true;
185
185
  case "dataValidation": {
186
186
  this._address = node.attributes.sqref;
187
- const dataValidation = { type: node.attributes.type || "any", formulae: [] };
187
+ const dataValidation = { type: node.attributes.type ?? "any", formulae: [] };
188
188
  if (node.attributes.type) {
189
189
  assignBool(dataValidation, node.attributes, "allowBlank");
190
190
  }
@@ -230,7 +230,7 @@ class DataValidationsXform extends base_xform_1.BaseXform {
230
230
  delete this._dataValidation.operator;
231
231
  }
232
232
  // The four known cases: 1. E4:L9 N4:U9 2.E4 L9 3. N4:U9 4. E4
233
- const list = this._address.split(/\s+/g) || [];
233
+ const list = this._address.split(/\s+/g);
234
234
  list.forEach((addr) => {
235
235
  if (addr.includes(":")) {
236
236
  // Store ranges directly to avoid expanding large (or many) validations.
@@ -88,22 +88,22 @@ class HeaderFooterXform extends base_xform_1.BaseXform {
88
88
  parseText(text) {
89
89
  switch (this.currentNode) {
90
90
  case "oddHeader":
91
- this.model.oddHeader = (this.model.oddHeader || "") + text;
91
+ this.model.oddHeader = (this.model.oddHeader ?? "") + text;
92
92
  break;
93
93
  case "oddFooter":
94
- this.model.oddFooter = (this.model.oddFooter || "") + text;
94
+ this.model.oddFooter = (this.model.oddFooter ?? "") + text;
95
95
  break;
96
96
  case "evenHeader":
97
- this.model.evenHeader = (this.model.evenHeader || "") + text;
97
+ this.model.evenHeader = (this.model.evenHeader ?? "") + text;
98
98
  break;
99
99
  case "evenFooter":
100
- this.model.evenFooter = (this.model.evenFooter || "") + text;
100
+ this.model.evenFooter = (this.model.evenFooter ?? "") + text;
101
101
  break;
102
102
  case "firstHeader":
103
- this.model.firstHeader = (this.model.firstHeader || "") + text;
103
+ this.model.firstHeader = (this.model.firstHeader ?? "") + text;
104
104
  break;
105
105
  case "firstFooter":
106
- this.model.firstFooter = (this.model.firstFooter || "") + text;
106
+ this.model.firstFooter = (this.model.firstFooter ?? "") + text;
107
107
  break;
108
108
  default:
109
109
  break;
@@ -84,21 +84,21 @@ class PageSetupXform extends base_xform_1.BaseXform {
84
84
  case this.tag:
85
85
  this.model = {
86
86
  paperSize: pageSizeToModel(node.attributes.paperSize),
87
- orientation: node.attributes.orientation || "portrait",
88
- horizontalDpi: parseInt(node.attributes.horizontalDpi || "4294967295", 10),
89
- verticalDpi: parseInt(node.attributes.verticalDpi || "4294967295", 10),
90
- pageOrder: node.attributes.pageOrder || "downThenOver",
87
+ orientation: node.attributes.orientation ?? "portrait",
88
+ horizontalDpi: parseInt(node.attributes.horizontalDpi ?? "4294967295", 10),
89
+ verticalDpi: parseInt(node.attributes.verticalDpi ?? "4294967295", 10),
90
+ pageOrder: node.attributes.pageOrder ?? "downThenOver",
91
91
  blackAndWhite: node.attributes.blackAndWhite === "1",
92
92
  draft: node.attributes.draft === "1",
93
- cellComments: node.attributes.cellComments || "None",
94
- errors: node.attributes.errors || "displayed",
95
- scale: parseInt(node.attributes.scale || "100", 10),
96
- fitToWidth: parseInt(node.attributes.fitToWidth || "1", 10),
97
- fitToHeight: parseInt(node.attributes.fitToHeight || "1", 10),
98
- firstPageNumber: parseInt(node.attributes.firstPageNumber || "1", 10),
93
+ cellComments: node.attributes.cellComments ?? "None",
94
+ errors: node.attributes.errors ?? "displayed",
95
+ scale: parseInt(node.attributes.scale ?? "100", 10),
96
+ fitToWidth: parseInt(node.attributes.fitToWidth ?? "1", 10),
97
+ fitToHeight: parseInt(node.attributes.fitToHeight ?? "1", 10),
98
+ firstPageNumber: parseInt(node.attributes.firstPageNumber ?? "1", 10),
99
99
  useFirstPageNumber: node.attributes.useFirstPageNumber === "1",
100
100
  usePrinterDefaults: node.attributes.usePrinterDefaults === "1",
101
- copies: parseInt(node.attributes.copies || "1", 10)
101
+ copies: parseInt(node.attributes.copies ?? "1", 10)
102
102
  };
103
103
  return true;
104
104
  default:
@@ -32,12 +32,12 @@ class SheetFormatPropertiesXform extends base_xform_1.BaseXform {
32
32
  parseOpen(node) {
33
33
  if (node.name === "sheetFormatPr") {
34
34
  this.model = {
35
- defaultRowHeight: parseFloat(node.attributes.defaultRowHeight || "0"),
35
+ defaultRowHeight: parseFloat(node.attributes.defaultRowHeight ?? "0"),
36
36
  dyDescent: node.attributes["x14ac:dyDescent"] !== undefined
37
37
  ? parseFloat(node.attributes["x14ac:dyDescent"])
38
38
  : undefined,
39
- outlineLevelRow: parseInt(node.attributes.outlineLevelRow || "0", 10),
40
- outlineLevelCol: parseInt(node.attributes.outlineLevelCol || "0", 10)
39
+ outlineLevelRow: parseInt(node.attributes.outlineLevelRow ?? "0", 10),
40
+ outlineLevelCol: parseInt(node.attributes.outlineLevelCol ?? "0", 10)
41
41
  };
42
42
  if (node.attributes.defaultColWidth) {
43
43
  this.model.defaultColWidth = parseFloat(node.attributes.defaultColWidth);
@@ -28,7 +28,7 @@ class SheetViewXform extends base_xform_1.BaseXform {
28
28
  if (model.tabSelected) {
29
29
  initialAttrs.tabSelected = "1";
30
30
  }
31
- initialAttrs.workbookViewId = model.workbookViewId || 0;
31
+ initialAttrs.workbookViewId = model.workbookViewId ?? 0;
32
32
  xmlStream.openNode("sheetView", initialAttrs);
33
33
  const add = function (name, value, included) {
34
34
  if (included) {
@@ -49,8 +49,8 @@ class SheetViewXform extends base_xform_1.BaseXform {
49
49
  let activePane;
50
50
  switch (model.state) {
51
51
  case "frozen":
52
- xSplit = model.xSplit || 0;
53
- ySplit = model.ySplit || 0;
52
+ xSplit = model.xSplit ?? 0;
53
+ ySplit = model.ySplit ?? 0;
54
54
  topLeftCell = model.topLeftCell || col_cache_1.colCache.getAddress(ySplit + 1, xSplit + 1).address;
55
55
  activePane =
56
56
  (model.xSplit && model.ySplit && "bottomRight") ||
@@ -108,8 +108,8 @@ class SheetViewXform extends base_xform_1.BaseXform {
108
108
  showRuler: !(node.attributes.showRuler === "0"),
109
109
  showRowColHeaders: !(node.attributes.showRowColHeaders === "0"),
110
110
  showGridLines: !(node.attributes.showGridLines === "0"),
111
- zoomScale: parseInt(node.attributes.zoomScale || "100", 10),
112
- zoomScaleNormal: parseInt(node.attributes.zoomScaleNormal || "100", 10),
111
+ zoomScale: parseInt(node.attributes.zoomScale ?? "100", 10),
112
+ zoomScaleNormal: parseInt(node.attributes.zoomScaleNormal ?? "100", 10),
113
113
  style: node.attributes.view
114
114
  };
115
115
  this.pane = undefined;
@@ -117,15 +117,15 @@ class SheetViewXform extends base_xform_1.BaseXform {
117
117
  return true;
118
118
  case "pane":
119
119
  this.pane = {
120
- xSplit: parseInt(node.attributes.xSplit || "0", 10),
121
- ySplit: parseInt(node.attributes.ySplit || "0", 10),
120
+ xSplit: parseInt(node.attributes.xSplit ?? "0", 10),
121
+ ySplit: parseInt(node.attributes.ySplit ?? "0", 10),
122
122
  topLeftCell: node.attributes.topLeftCell,
123
- activePane: node.attributes.activePane || "topLeft",
123
+ activePane: node.attributes.activePane ?? "topLeft",
124
124
  state: node.attributes.state
125
125
  };
126
126
  return true;
127
127
  case "selection": {
128
- const name = node.attributes.pane || "topLeft";
128
+ const name = node.attributes.pane ?? "topLeft";
129
129
  this.selections[name] = {
130
130
  pane: name,
131
131
  activeCell: node.attributes.activeCell
@@ -147,7 +147,7 @@ class SheetViewXform extends base_xform_1.BaseXform {
147
147
  workbookViewId: this.sheetView.workbookViewId,
148
148
  rightToLeft: this.sheetView.rightToLeft,
149
149
  tabSelected: this.sheetView.tabSelected,
150
- state: VIEW_STATES[this.pane.state] || "split", // split is default
150
+ state: VIEW_STATES[this.pane.state] ?? "split", // split is default
151
151
  xSplit: this.pane.xSplit,
152
152
  ySplit: this.pane.ySplit,
153
153
  topLeftCell: this.pane.topLeftCell,
@@ -88,7 +88,7 @@ class WorkSheetXform extends base_xform_1.BaseXform {
88
88
  constructor(options) {
89
89
  super();
90
90
  const { maxRows, maxCols, ignoreNodes } = options || {};
91
- this.ignoreNodes = ignoreNodes || [];
91
+ this.ignoreNodes = ignoreNodes ?? [];
92
92
  this.map = {
93
93
  sheetPr: new sheet_properties_xform_1.SheetPropertiesXform(),
94
94
  dimension: new dimension_xform_1.DimensionXform(),
@@ -296,7 +296,7 @@ class WorkSheetXform extends base_xform_1.BaseXform {
296
296
  });
297
297
  });
298
298
  // prepare pivot tables
299
- (model.pivotTables || []).forEach((pivotTable) => {
299
+ (model.pivotTables ?? []).forEach((pivotTable) => {
300
300
  rels.push({
301
301
  Id: nextRid(rels),
302
302
  Type: rel_type_1.RelType.PivotTable,
@@ -560,8 +560,8 @@ class WorkSheetXform extends base_xform_1.BaseXform {
560
560
  drawing: this.map.drawing.model,
561
561
  tables: this.map.tableParts.model,
562
562
  conditionalFormattings,
563
- rowBreaks: this.map.rowBreaks.model || [],
564
- colBreaks: this.map.colBreaks.model || []
563
+ rowBreaks: this.map.rowBreaks.model ?? [],
564
+ colBreaks: this.map.colBreaks.model ?? []
565
565
  };
566
566
  if (this.map.autoFilter.model) {
567
567
  this.model.autoFilter = this.map.autoFilter.model;
@@ -579,7 +579,7 @@ class WorkSheetXform extends base_xform_1.BaseXform {
579
579
  reconcile(model, options) {
580
580
  // options.merges = new Merges();
581
581
  // options.merges.reconcile(model.mergeCells, model.rows);
582
- const rels = (model.relationships || []).reduce((h, rel) => {
582
+ const rels = (model.relationships ?? []).reduce((h, rel) => {
583
583
  h[rel.Id] = rel;
584
584
  if (rel.Type === rel_type_1.RelType.Comments) {
585
585
  model.comments = options.comments[rel.Target].comments;
@@ -592,13 +592,13 @@ class WorkSheetXform extends base_xform_1.BaseXform {
592
592
  }
593
593
  return h;
594
594
  }, {});
595
- options.commentsMap = (model.comments || []).reduce((h, comment) => {
595
+ options.commentsMap = (model.comments ?? []).reduce((h, comment) => {
596
596
  if (comment.ref) {
597
597
  h[comment.ref] = comment;
598
598
  }
599
599
  return h;
600
600
  }, {});
601
- options.hyperlinkMap = (model.hyperlinks || []).reduce((h, hyperlink) => {
601
+ options.hyperlinkMap = (model.hyperlinks ?? []).reduce((h, hyperlink) => {
602
602
  if (hyperlink.rId) {
603
603
  h[hyperlink.address] = rels[hyperlink.rId].Target;
604
604
  }
@@ -606,9 +606,9 @@ class WorkSheetXform extends base_xform_1.BaseXform {
606
606
  }, {});
607
607
  options.formulae = {};
608
608
  // compact the rows and cells
609
- model.rows = (model.rows && model.rows.filter(Boolean)) || [];
609
+ model.rows = model.rows?.filter(Boolean) ?? [];
610
610
  model.rows.forEach(row => {
611
- row.cells = (row.cells && row.cells.filter(Boolean)) || [];
611
+ row.cells = row.cells?.filter(Boolean) ?? [];
612
612
  });
613
613
  this.map.cols.reconcile(model.cols, options);
614
614
  this.map.sheetData.reconcile(model.rows, options);
@@ -626,7 +626,7 @@ class WorkSheetXform extends base_xform_1.BaseXform {
626
626
  model.drawing = {
627
627
  ...drawing,
628
628
  name: drawingName,
629
- rels: options.drawingRels?.[drawingName] || drawing.rels || []
629
+ rels: options.drawingRels?.[drawingName] ?? drawing.rels ?? []
630
630
  };
631
631
  // Also extract images to model.media for backward compatibility
632
632
  drawing.anchors.forEach(anchor => {
@@ -654,14 +654,14 @@ class WorkSheetXform extends base_xform_1.BaseXform {
654
654
  });
655
655
  }
656
656
  }
657
- model.tables = (model.tables || []).map(tablePart => {
657
+ model.tables = (model.tables ?? []).map(tablePart => {
658
658
  const rel = rels[tablePart.rId];
659
659
  return options.tables[rel.Target];
660
660
  });
661
661
  // Link pivot tables from relationships to worksheet
662
662
  // This is needed so that when writing, the worksheet knows which pivot tables it contains
663
663
  model.pivotTables = [];
664
- (model.relationships || []).forEach(rel => {
664
+ (model.relationships ?? []).forEach(rel => {
665
665
  if (rel.Type === rel_type_1.RelType.PivotTable && options.pivotTables) {
666
666
  const pivotTable = options.pivotTables[rel.Target];
667
667
  if (pivotTable) {
@@ -17,8 +17,8 @@ class PhoneticTextXform extends base_xform_1.BaseXform {
17
17
  }
18
18
  render(xmlStream, model) {
19
19
  xmlStream.openNode(this.tag, {
20
- sb: model.sb || 0,
21
- eb: model.eb || 0
20
+ sb: model.sb ?? 0,
21
+ eb: model.eb ?? 0
22
22
  });
23
23
  if (model && Object.prototype.hasOwnProperty.call(model, "richText") && model.richText) {
24
24
  const { r } = this.map;
@@ -7,7 +7,7 @@ class ColorXform extends base_xform_1.BaseXform {
7
7
  constructor(name) {
8
8
  super();
9
9
  // this.name controls the xm node name
10
- this.name = name || "color";
10
+ this.name = name ?? "color";
11
11
  }
12
12
  get tag() {
13
13
  return this.name;
@@ -19,13 +19,13 @@ class StyleXform extends base_xform_1.BaseXform {
19
19
  }
20
20
  render(xmlStream, model) {
21
21
  xmlStream.openNode("xf", {
22
- numFmtId: model.numFmtId || 0,
23
- fontId: model.fontId || 0,
24
- fillId: model.fillId || 0,
25
- borderId: model.borderId || 0
22
+ numFmtId: model.numFmtId ?? 0,
23
+ fontId: model.fontId ?? 0,
24
+ fillId: model.fillId ?? 0,
25
+ borderId: model.borderId ?? 0
26
26
  });
27
27
  if (this.xfId) {
28
- xmlStream.addAttribute("xfId", model.xfId || 0);
28
+ xmlStream.addAttribute("xfId", model.xfId ?? 0);
29
29
  }
30
30
  if (model.applyNumberFormat || model.numFmtId) {
31
31
  xmlStream.addAttribute("applyNumberFormat", "1");