@lyit/exceljs 4.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 (543) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +3398 -0
  3. package/README_zh.md +2878 -0
  4. package/dist/LICENSE +22 -0
  5. package/dist/es5/csv/csv.js +182 -0
  6. package/dist/es5/csv/csv.js.map +1 -0
  7. package/dist/es5/csv/line-buffer.js +68 -0
  8. package/dist/es5/csv/line-buffer.js.map +1 -0
  9. package/dist/es5/csv/stream-converter.js +110 -0
  10. package/dist/es5/csv/stream-converter.js.map +1 -0
  11. package/dist/es5/doc/anchor.js +73 -0
  12. package/dist/es5/doc/anchor.js.map +1 -0
  13. package/dist/es5/doc/cell.js +960 -0
  14. package/dist/es5/doc/cell.js.map +1 -0
  15. package/dist/es5/doc/column.js +274 -0
  16. package/dist/es5/doc/column.js.map +1 -0
  17. package/dist/es5/doc/data-validations.js +18 -0
  18. package/dist/es5/doc/data-validations.js.map +1 -0
  19. package/dist/es5/doc/defined-names.js +173 -0
  20. package/dist/es5/doc/defined-names.js.map +1 -0
  21. package/dist/es5/doc/enums.js +49 -0
  22. package/dist/es5/doc/enums.js.map +1 -0
  23. package/dist/es5/doc/form-checkbox.js +342 -0
  24. package/dist/es5/doc/form-checkbox.js.map +1 -0
  25. package/dist/es5/doc/image.js +69 -0
  26. package/dist/es5/doc/image.js.map +1 -0
  27. package/dist/es5/doc/modelcontainer.js +16 -0
  28. package/dist/es5/doc/modelcontainer.js.map +1 -0
  29. package/dist/es5/doc/note.js +64 -0
  30. package/dist/es5/doc/note.js.map +1 -0
  31. package/dist/es5/doc/pivot-table.js +247 -0
  32. package/dist/es5/doc/pivot-table.js.map +1 -0
  33. package/dist/es5/doc/range.js +229 -0
  34. package/dist/es5/doc/range.js.map +1 -0
  35. package/dist/es5/doc/row.js +391 -0
  36. package/dist/es5/doc/row.js.map +1 -0
  37. package/dist/es5/doc/table.js +542 -0
  38. package/dist/es5/doc/table.js.map +1 -0
  39. package/dist/es5/doc/workbook.js +221 -0
  40. package/dist/es5/doc/workbook.js.map +1 -0
  41. package/dist/es5/doc/worksheet.js +996 -0
  42. package/dist/es5/doc/worksheet.js.map +1 -0
  43. package/dist/es5/exceljs.bare.js +14 -0
  44. package/dist/es5/exceljs.bare.js.map +1 -0
  45. package/dist/es5/exceljs.browser.js +36 -0
  46. package/dist/es5/exceljs.browser.js.map +1 -0
  47. package/dist/es5/exceljs.nodejs.js +15 -0
  48. package/dist/es5/exceljs.nodejs.js.map +1 -0
  49. package/dist/es5/index.js +15 -0
  50. package/dist/es5/stream/xlsx/hyperlink-reader.js +90 -0
  51. package/dist/es5/stream/xlsx/hyperlink-reader.js.map +1 -0
  52. package/dist/es5/stream/xlsx/sheet-comments-writer.js +94 -0
  53. package/dist/es5/stream/xlsx/sheet-comments-writer.js.map +1 -0
  54. package/dist/es5/stream/xlsx/sheet-rels-writer.js +94 -0
  55. package/dist/es5/stream/xlsx/sheet-rels-writer.js.map +1 -0
  56. package/dist/es5/stream/xlsx/workbook-reader.js +361 -0
  57. package/dist/es5/stream/xlsx/workbook-reader.js.map +1 -0
  58. package/dist/es5/stream/xlsx/workbook-writer.js +347 -0
  59. package/dist/es5/stream/xlsx/workbook-writer.js.map +1 -0
  60. package/dist/es5/stream/xlsx/worksheet-reader.js +392 -0
  61. package/dist/es5/stream/xlsx/worksheet-reader.js.map +1 -0
  62. package/dist/es5/stream/xlsx/worksheet-writer.js +652 -0
  63. package/dist/es5/stream/xlsx/worksheet-writer.js.map +1 -0
  64. package/dist/es5/utils/auto-drain.js +18 -0
  65. package/dist/es5/utils/auto-drain.js.map +1 -0
  66. package/dist/es5/utils/browser-buffer-decode.js +15 -0
  67. package/dist/es5/utils/browser-buffer-decode.js.map +1 -0
  68. package/dist/es5/utils/browser-buffer-encode.js +18 -0
  69. package/dist/es5/utils/browser-buffer-encode.js.map +1 -0
  70. package/dist/es5/utils/cell-matrix.js +149 -0
  71. package/dist/es5/utils/cell-matrix.js.map +1 -0
  72. package/dist/es5/utils/col-cache.js +258 -0
  73. package/dist/es5/utils/col-cache.js.map +1 -0
  74. package/dist/es5/utils/copy-style.js +43 -0
  75. package/dist/es5/utils/copy-style.js.map +1 -0
  76. package/dist/es5/utils/encryptor.js +58 -0
  77. package/dist/es5/utils/encryptor.js.map +1 -0
  78. package/dist/es5/utils/iterate-stream.js +46 -0
  79. package/dist/es5/utils/iterate-stream.js.map +1 -0
  80. package/dist/es5/utils/parse-sax.js +66 -0
  81. package/dist/es5/utils/parse-sax.js.map +1 -0
  82. package/dist/es5/utils/shared-formula.js +42 -0
  83. package/dist/es5/utils/shared-formula.js.map +1 -0
  84. package/dist/es5/utils/shared-strings.js +37 -0
  85. package/dist/es5/utils/shared-strings.js.map +1 -0
  86. package/dist/es5/utils/stream-base64.js +66 -0
  87. package/dist/es5/utils/stream-base64.js.map +1 -0
  88. package/dist/es5/utils/stream-buf.js +365 -0
  89. package/dist/es5/utils/stream-buf.js.map +1 -0
  90. package/dist/es5/utils/string-buf.js +73 -0
  91. package/dist/es5/utils/string-buf.js.map +1 -0
  92. package/dist/es5/utils/string-builder.js +32 -0
  93. package/dist/es5/utils/string-builder.js.map +1 -0
  94. package/dist/es5/utils/stuttered-pipe.js +61 -0
  95. package/dist/es5/utils/stuttered-pipe.js.map +1 -0
  96. package/dist/es5/utils/typed-stack.js +23 -0
  97. package/dist/es5/utils/typed-stack.js.map +1 -0
  98. package/dist/es5/utils/under-dash.js +168 -0
  99. package/dist/es5/utils/under-dash.js.map +1 -0
  100. package/dist/es5/utils/utils.js +205 -0
  101. package/dist/es5/utils/utils.js.map +1 -0
  102. package/dist/es5/utils/xml-stream.js +151 -0
  103. package/dist/es5/utils/xml-stream.js.map +1 -0
  104. package/dist/es5/utils/zip-stream.js +79 -0
  105. package/dist/es5/utils/zip-stream.js.map +1 -0
  106. package/dist/es5/xlsx/defaultnumformats.js +230 -0
  107. package/dist/es5/xlsx/defaultnumformats.js.map +1 -0
  108. package/dist/es5/xlsx/rel-type.js +22 -0
  109. package/dist/es5/xlsx/rel-type.js.map +1 -0
  110. package/dist/es5/xlsx/xform/base-xform.js +139 -0
  111. package/dist/es5/xlsx/xform/base-xform.js.map +1 -0
  112. package/dist/es5/xlsx/xform/book/defined-name-xform.js +85 -0
  113. package/dist/es5/xlsx/xform/book/defined-name-xform.js.map +1 -0
  114. package/dist/es5/xlsx/xform/book/sheet-xform.js +32 -0
  115. package/dist/es5/xlsx/xform/book/sheet-xform.js.map +1 -0
  116. package/dist/es5/xlsx/xform/book/workbook-calc-properties-xform.js +24 -0
  117. package/dist/es5/xlsx/xform/book/workbook-calc-properties-xform.js.map +1 -0
  118. package/dist/es5/xlsx/xform/book/workbook-pivot-cache-xform.js +27 -0
  119. package/dist/es5/xlsx/xform/book/workbook-pivot-cache-xform.js.map +1 -0
  120. package/dist/es5/xlsx/xform/book/workbook-properties-xform.js +27 -0
  121. package/dist/es5/xlsx/xform/book/workbook-properties-xform.js.map +1 -0
  122. package/dist/es5/xlsx/xform/book/workbook-view-xform.js +51 -0
  123. package/dist/es5/xlsx/xform/book/workbook-view-xform.js.map +1 -0
  124. package/dist/es5/xlsx/xform/book/workbook-xform.js +244 -0
  125. package/dist/es5/xlsx/xform/book/workbook-xform.js.map +1 -0
  126. package/dist/es5/xlsx/xform/comment/comment-xform.js +103 -0
  127. package/dist/es5/xlsx/xform/comment/comment-xform.js.map +1 -0
  128. package/dist/es5/xlsx/xform/comment/comments-xform.js +76 -0
  129. package/dist/es5/xlsx/xform/comment/comments-xform.js.map +1 -0
  130. package/dist/es5/xlsx/xform/comment/style/vml-position-xform.js +35 -0
  131. package/dist/es5/xlsx/xform/comment/style/vml-position-xform.js.map +1 -0
  132. package/dist/es5/xlsx/xform/comment/style/vml-protection-xform.js +32 -0
  133. package/dist/es5/xlsx/xform/comment/style/vml-protection-xform.js.map +1 -0
  134. package/dist/es5/xlsx/xform/comment/vml-anchor-xform.js +53 -0
  135. package/dist/es5/xlsx/xform/comment/vml-anchor-xform.js.map +1 -0
  136. package/dist/es5/xlsx/xform/comment/vml-client-data-xform.js +98 -0
  137. package/dist/es5/xlsx/xform/comment/vml-client-data-xform.js.map +1 -0
  138. package/dist/es5/xlsx/xform/comment/vml-notes-xform.js +235 -0
  139. package/dist/es5/xlsx/xform/comment/vml-notes-xform.js.map +1 -0
  140. package/dist/es5/xlsx/xform/comment/vml-shape-xform.js +93 -0
  141. package/dist/es5/xlsx/xform/comment/vml-shape-xform.js.map +1 -0
  142. package/dist/es5/xlsx/xform/comment/vml-textbox-xform.js +61 -0
  143. package/dist/es5/xlsx/xform/comment/vml-textbox-xform.js.map +1 -0
  144. package/dist/es5/xlsx/xform/composite-xform.js +51 -0
  145. package/dist/es5/xlsx/xform/composite-xform.js.map +1 -0
  146. package/dist/es5/xlsx/xform/core/app-heading-pairs-xform.js +30 -0
  147. package/dist/es5/xlsx/xform/core/app-heading-pairs-xform.js.map +1 -0
  148. package/dist/es5/xlsx/xform/core/app-titles-of-parts-xform.js +27 -0
  149. package/dist/es5/xlsx/xform/core/app-titles-of-parts-xform.js.map +1 -0
  150. package/dist/es5/xlsx/xform/core/app-xform.js +93 -0
  151. package/dist/es5/xlsx/xform/core/app-xform.js.map +1 -0
  152. package/dist/es5/xlsx/xform/core/content-types-xform.js +198 -0
  153. package/dist/es5/xlsx/xform/core/content-types-xform.js.map +1 -0
  154. package/dist/es5/xlsx/xform/core/core-xform.js +160 -0
  155. package/dist/es5/xlsx/xform/core/core-xform.js.map +1 -0
  156. package/dist/es5/xlsx/xform/core/relationship-xform.js +23 -0
  157. package/dist/es5/xlsx/xform/core/relationship-xform.js.map +1 -0
  158. package/dist/es5/xlsx/xform/core/relationships-xform.js +65 -0
  159. package/dist/es5/xlsx/xform/core/relationships-xform.js.map +1 -0
  160. package/dist/es5/xlsx/xform/drawing/base-cell-anchor-xform.js +47 -0
  161. package/dist/es5/xlsx/xform/drawing/base-cell-anchor-xform.js.map +1 -0
  162. package/dist/es5/xlsx/xform/drawing/blip-fill-xform.js +61 -0
  163. package/dist/es5/xlsx/xform/drawing/blip-fill-xform.js.map +1 -0
  164. package/dist/es5/xlsx/xform/drawing/blip-xform.js +39 -0
  165. package/dist/es5/xlsx/xform/drawing/blip-xform.js.map +1 -0
  166. package/dist/es5/xlsx/xform/drawing/c-nv-pic-pr-xform.js +35 -0
  167. package/dist/es5/xlsx/xform/drawing/c-nv-pic-pr-xform.js.map +1 -0
  168. package/dist/es5/xlsx/xform/drawing/c-nv-pr-xform.js +62 -0
  169. package/dist/es5/xlsx/xform/drawing/c-nv-pr-xform.js.map +1 -0
  170. package/dist/es5/xlsx/xform/drawing/cell-position-xform.js +82 -0
  171. package/dist/es5/xlsx/xform/drawing/cell-position-xform.js.map +1 -0
  172. package/dist/es5/xlsx/xform/drawing/ctrl-prop-xform.js +75 -0
  173. package/dist/es5/xlsx/xform/drawing/ctrl-prop-xform.js.map +1 -0
  174. package/dist/es5/xlsx/xform/drawing/drawing-xform.js +98 -0
  175. package/dist/es5/xlsx/xform/drawing/drawing-xform.js.map +1 -0
  176. package/dist/es5/xlsx/xform/drawing/ext-lst-xform.js +40 -0
  177. package/dist/es5/xlsx/xform/drawing/ext-lst-xform.js.map +1 -0
  178. package/dist/es5/xlsx/xform/drawing/ext-xform.js +38 -0
  179. package/dist/es5/xlsx/xform/drawing/ext-xform.js.map +1 -0
  180. package/dist/es5/xlsx/xform/drawing/hlink-click-xform.js +38 -0
  181. package/dist/es5/xlsx/xform/drawing/hlink-click-xform.js.map +1 -0
  182. package/dist/es5/xlsx/xform/drawing/nv-pic-pr-xform.js +59 -0
  183. package/dist/es5/xlsx/xform/drawing/nv-pic-pr-xform.js.map +1 -0
  184. package/dist/es5/xlsx/xform/drawing/one-cell-anchor-xform.js +63 -0
  185. package/dist/es5/xlsx/xform/drawing/one-cell-anchor-xform.js.map +1 -0
  186. package/dist/es5/xlsx/xform/drawing/pic-xform.js +67 -0
  187. package/dist/es5/xlsx/xform/drawing/pic-xform.js.map +1 -0
  188. package/dist/es5/xlsx/xform/drawing/sp-pr.js +30 -0
  189. package/dist/es5/xlsx/xform/drawing/sp-pr.js.map +1 -0
  190. package/dist/es5/xlsx/xform/drawing/two-cell-anchor-xform.js +62 -0
  191. package/dist/es5/xlsx/xform/drawing/two-cell-anchor-xform.js.map +1 -0
  192. package/dist/es5/xlsx/xform/list-xform.js +91 -0
  193. package/dist/es5/xlsx/xform/list-xform.js.map +1 -0
  194. package/dist/es5/xlsx/xform/pivot-table/cache-field.js +72 -0
  195. package/dist/es5/xlsx/xform/pivot-table/cache-field.js.map +1 -0
  196. package/dist/es5/xlsx/xform/pivot-table/pivot-cache-definition-xform.js +74 -0
  197. package/dist/es5/xlsx/xform/pivot-table/pivot-cache-definition-xform.js.map +1 -0
  198. package/dist/es5/xlsx/xform/pivot-table/pivot-cache-records-xform.js +100 -0
  199. package/dist/es5/xlsx/xform/pivot-table/pivot-cache-records-xform.js.map +1 -0
  200. package/dist/es5/xlsx/xform/pivot-table/pivot-table-xform.js +229 -0
  201. package/dist/es5/xlsx/xform/pivot-table/pivot-table-xform.js.map +1 -0
  202. package/dist/es5/xlsx/xform/sheet/auto-filter-xform.js +40 -0
  203. package/dist/es5/xlsx/xform/sheet/auto-filter-xform.js.map +1 -0
  204. package/dist/es5/xlsx/xform/sheet/cell-xform.js +450 -0
  205. package/dist/es5/xlsx/xform/sheet/cell-xform.js.map +1 -0
  206. package/dist/es5/xlsx/xform/sheet/cf/cf-rule-xform.js +282 -0
  207. package/dist/es5/xlsx/xform/sheet/cf/cf-rule-xform.js.map +1 -0
  208. package/dist/es5/xlsx/xform/sheet/cf/cfvo-xform.js +25 -0
  209. package/dist/es5/xlsx/xform/sheet/cf/cfvo-xform.js.map +1 -0
  210. package/dist/es5/xlsx/xform/sheet/cf/color-scale-xform.js +38 -0
  211. package/dist/es5/xlsx/xform/sheet/cf/color-scale-xform.js.map +1 -0
  212. package/dist/es5/xlsx/xform/sheet/cf/conditional-formatting-xform.js +45 -0
  213. package/dist/es5/xlsx/xform/sheet/cf/conditional-formatting-xform.js.map +1 -0
  214. package/dist/es5/xlsx/xform/sheet/cf/conditional-formattings-xform.js +77 -0
  215. package/dist/es5/xlsx/xform/sheet/cf/conditional-formattings-xform.js.map +1 -0
  216. package/dist/es5/xlsx/xform/sheet/cf/databar-xform.js +54 -0
  217. package/dist/es5/xlsx/xform/sheet/cf/databar-xform.js.map +1 -0
  218. package/dist/es5/xlsx/xform/sheet/cf/ext-lst-ref-xform.js +71 -0
  219. package/dist/es5/xlsx/xform/sheet/cf/ext-lst-ref-xform.js.map +1 -0
  220. package/dist/es5/xlsx/xform/sheet/cf/formula-xform.js +22 -0
  221. package/dist/es5/xlsx/xform/sheet/cf/formula-xform.js.map +1 -0
  222. package/dist/es5/xlsx/xform/sheet/cf/icon-set-xform.js +43 -0
  223. package/dist/es5/xlsx/xform/sheet/cf/icon-set-xform.js.map +1 -0
  224. package/dist/es5/xlsx/xform/sheet/cf-ext/cf-icon-ext-xform.js +28 -0
  225. package/dist/es5/xlsx/xform/sheet/cf-ext/cf-icon-ext-xform.js.map +1 -0
  226. package/dist/es5/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js +88 -0
  227. package/dist/es5/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js.map +1 -0
  228. package/dist/es5/xlsx/xform/sheet/cf-ext/cfvo-ext-xform.js +38 -0
  229. package/dist/es5/xlsx/xform/sheet/cf-ext/cfvo-ext-xform.js.map +1 -0
  230. package/dist/es5/xlsx/xform/sheet/cf-ext/conditional-formatting-ext-xform.js +52 -0
  231. package/dist/es5/xlsx/xform/sheet/cf-ext/conditional-formatting-ext-xform.js.map +1 -0
  232. package/dist/es5/xlsx/xform/sheet/cf-ext/conditional-formattings-ext-xform.js +43 -0
  233. package/dist/es5/xlsx/xform/sheet/cf-ext/conditional-formattings-ext-xform.js.map +1 -0
  234. package/dist/es5/xlsx/xform/sheet/cf-ext/databar-ext-xform.js +82 -0
  235. package/dist/es5/xlsx/xform/sheet/cf-ext/databar-ext-xform.js.map +1 -0
  236. package/dist/es5/xlsx/xform/sheet/cf-ext/f-ext-xform.js +22 -0
  237. package/dist/es5/xlsx/xform/sheet/cf-ext/f-ext-xform.js.map +1 -0
  238. package/dist/es5/xlsx/xform/sheet/cf-ext/icon-set-ext-xform.js +66 -0
  239. package/dist/es5/xlsx/xform/sheet/cf-ext/icon-set-ext-xform.js.map +1 -0
  240. package/dist/es5/xlsx/xform/sheet/cf-ext/sqref-ext-xform.js +22 -0
  241. package/dist/es5/xlsx/xform/sheet/cf-ext/sqref-ext-xform.js.map +1 -0
  242. package/dist/es5/xlsx/xform/sheet/col-xform.js +78 -0
  243. package/dist/es5/xlsx/xform/sheet/col-xform.js.map +1 -0
  244. package/dist/es5/xlsx/xform/sheet/data-validations-xform.js +247 -0
  245. package/dist/es5/xlsx/xform/sheet/data-validations-xform.js.map +1 -0
  246. package/dist/es5/xlsx/xform/sheet/dimension-xform.js +28 -0
  247. package/dist/es5/xlsx/xform/sheet/dimension-xform.js.map +1 -0
  248. package/dist/es5/xlsx/xform/sheet/drawing-xform.js +32 -0
  249. package/dist/es5/xlsx/xform/sheet/drawing-xform.js.map +1 -0
  250. package/dist/es5/xlsx/xform/sheet/ext-lst-xform.js +69 -0
  251. package/dist/es5/xlsx/xform/sheet/ext-lst-xform.js.map +1 -0
  252. package/dist/es5/xlsx/xform/sheet/header-footer-xform.js +126 -0
  253. package/dist/es5/xlsx/xform/sheet/header-footer-xform.js.map +1 -0
  254. package/dist/es5/xlsx/xform/sheet/hyperlink-xform.js +50 -0
  255. package/dist/es5/xlsx/xform/sheet/hyperlink-xform.js.map +1 -0
  256. package/dist/es5/xlsx/xform/sheet/merge-cell-xform.js +26 -0
  257. package/dist/es5/xlsx/xform/sheet/merge-cell-xform.js.map +1 -0
  258. package/dist/es5/xlsx/xform/sheet/merges.js +52 -0
  259. package/dist/es5/xlsx/xform/sheet/merges.js.map +1 -0
  260. package/dist/es5/xlsx/xform/sheet/outline-properties-xform.js +35 -0
  261. package/dist/es5/xlsx/xform/sheet/outline-properties-xform.js.map +1 -0
  262. package/dist/es5/xlsx/xform/sheet/page-breaks-xform.js +24 -0
  263. package/dist/es5/xlsx/xform/sheet/page-breaks-xform.js.map +1 -0
  264. package/dist/es5/xlsx/xform/sheet/page-margins-xform.js +46 -0
  265. package/dist/es5/xlsx/xform/sheet/page-margins-xform.js.map +1 -0
  266. package/dist/es5/xlsx/xform/sheet/page-setup-properties-xform.js +32 -0
  267. package/dist/es5/xlsx/xform/sheet/page-setup-properties-xform.js.map +1 -0
  268. package/dist/es5/xlsx/xform/sheet/page-setup-xform.js +99 -0
  269. package/dist/es5/xlsx/xform/sheet/page-setup-xform.js.map +1 -0
  270. package/dist/es5/xlsx/xform/sheet/picture-xform.js +32 -0
  271. package/dist/es5/xlsx/xform/sheet/picture-xform.js.map +1 -0
  272. package/dist/es5/xlsx/xform/sheet/print-options-xform.js +45 -0
  273. package/dist/es5/xlsx/xform/sheet/print-options-xform.js.map +1 -0
  274. package/dist/es5/xlsx/xform/sheet/row-breaks-xform.js +37 -0
  275. package/dist/es5/xlsx/xform/sheet/row-breaks-xform.js.map +1 -0
  276. package/dist/es5/xlsx/xform/sheet/row-xform.js +131 -0
  277. package/dist/es5/xlsx/xform/sheet/row-xform.js.map +1 -0
  278. package/dist/es5/xlsx/xform/sheet/sheet-format-properties-xform.js +63 -0
  279. package/dist/es5/xlsx/xform/sheet/sheet-format-properties-xform.js.map +1 -0
  280. package/dist/es5/xlsx/xform/sheet/sheet-properties-xform.js +83 -0
  281. package/dist/es5/xlsx/xform/sheet/sheet-properties-xform.js.map +1 -0
  282. package/dist/es5/xlsx/xform/sheet/sheet-protection-xform.js +84 -0
  283. package/dist/es5/xlsx/xform/sheet/sheet-protection-xform.js.map +1 -0
  284. package/dist/es5/xlsx/xform/sheet/sheet-view-xform.js +190 -0
  285. package/dist/es5/xlsx/xform/sheet/sheet-view-xform.js.map +1 -0
  286. package/dist/es5/xlsx/xform/sheet/table-part-xform.js +32 -0
  287. package/dist/es5/xlsx/xform/sheet/table-part-xform.js.map +1 -0
  288. package/dist/es5/xlsx/xform/sheet/worksheet-xform.js +622 -0
  289. package/dist/es5/xlsx/xform/sheet/worksheet-xform.js.map +1 -0
  290. package/dist/es5/xlsx/xform/simple/boolean-xform.js +27 -0
  291. package/dist/es5/xlsx/xform/simple/boolean-xform.js.map +1 -0
  292. package/dist/es5/xlsx/xform/simple/date-xform.js +58 -0
  293. package/dist/es5/xlsx/xform/simple/date-xform.js.map +1 -0
  294. package/dist/es5/xlsx/xform/simple/float-xform.js +47 -0
  295. package/dist/es5/xlsx/xform/simple/float-xform.js.map +1 -0
  296. package/dist/es5/xlsx/xform/simple/integer-xform.js +53 -0
  297. package/dist/es5/xlsx/xform/simple/integer-xform.js.map +1 -0
  298. package/dist/es5/xlsx/xform/simple/string-xform.js +47 -0
  299. package/dist/es5/xlsx/xform/simple/string-xform.js.map +1 -0
  300. package/dist/es5/xlsx/xform/static-xform.js +61 -0
  301. package/dist/es5/xlsx/xform/static-xform.js.map +1 -0
  302. package/dist/es5/xlsx/xform/strings/phonetic-text-xform.js +98 -0
  303. package/dist/es5/xlsx/xform/strings/phonetic-text-xform.js.map +1 -0
  304. package/dist/es5/xlsx/xform/strings/rich-text-xform.js +92 -0
  305. package/dist/es5/xlsx/xform/strings/rich-text-xform.js.map +1 -0
  306. package/dist/es5/xlsx/xform/strings/shared-string-xform.js +99 -0
  307. package/dist/es5/xlsx/xform/strings/shared-string-xform.js.map +1 -0
  308. package/dist/es5/xlsx/xform/strings/shared-strings-xform.js +116 -0
  309. package/dist/es5/xlsx/xform/strings/shared-strings-xform.js.map +1 -0
  310. package/dist/es5/xlsx/xform/strings/text-xform.js +39 -0
  311. package/dist/es5/xlsx/xform/strings/text-xform.js.map +1 -0
  312. package/dist/es5/xlsx/xform/style/alignment-xform.js +139 -0
  313. package/dist/es5/xlsx/xform/style/alignment-xform.js.map +1 -0
  314. package/dist/es5/xlsx/xform/style/border-xform.js +185 -0
  315. package/dist/es5/xlsx/xform/style/border-xform.js.map +1 -0
  316. package/dist/es5/xlsx/xform/style/color-xform.js +66 -0
  317. package/dist/es5/xlsx/xform/style/color-xform.js.map +1 -0
  318. package/dist/es5/xlsx/xform/style/dxf-xform.js +106 -0
  319. package/dist/es5/xlsx/xform/style/dxf-xform.js.map +1 -0
  320. package/dist/es5/xlsx/xform/style/fill-xform.js +307 -0
  321. package/dist/es5/xlsx/xform/style/fill-xform.js.map +1 -0
  322. package/dist/es5/xlsx/xform/style/font-xform.js +175 -0
  323. package/dist/es5/xlsx/xform/style/font-xform.js.map +1 -0
  324. package/dist/es5/xlsx/xform/style/numfmt-xform.js +58 -0
  325. package/dist/es5/xlsx/xform/style/numfmt-xform.js.map +1 -0
  326. package/dist/es5/xlsx/xform/style/protection-xform.js +53 -0
  327. package/dist/es5/xlsx/xform/style/protection-xform.js.map +1 -0
  328. package/dist/es5/xlsx/xform/style/style-xform.js +118 -0
  329. package/dist/es5/xlsx/xform/style/style-xform.js.map +1 -0
  330. package/dist/es5/xlsx/xform/style/styles-xform.js +611 -0
  331. package/dist/es5/xlsx/xform/style/styles-xform.js.map +1 -0
  332. package/dist/es5/xlsx/xform/style/underline-xform.js +46 -0
  333. package/dist/es5/xlsx/xform/style/underline-xform.js.map +1 -0
  334. package/dist/es5/xlsx/xform/table/auto-filter-xform.js +75 -0
  335. package/dist/es5/xlsx/xform/table/auto-filter-xform.js.map +1 -0
  336. package/dist/es5/xlsx/xform/table/custom-filter-xform.js +30 -0
  337. package/dist/es5/xlsx/xform/table/custom-filter-xform.js.map +1 -0
  338. package/dist/es5/xlsx/xform/table/filter-column-xform.js +92 -0
  339. package/dist/es5/xlsx/xform/table/filter-column-xform.js.map +1 -0
  340. package/dist/es5/xlsx/xform/table/filter-xform.js +28 -0
  341. package/dist/es5/xlsx/xform/table/filter-xform.js.map +1 -0
  342. package/dist/es5/xlsx/xform/table/table-column-xform.js +42 -0
  343. package/dist/es5/xlsx/xform/table/table-column-xform.js.map +1 -0
  344. package/dist/es5/xlsx/xform/table/table-style-info-xform.js +40 -0
  345. package/dist/es5/xlsx/xform/table/table-style-info-xform.js.map +1 -0
  346. package/dist/es5/xlsx/xform/table/table-xform.js +125 -0
  347. package/dist/es5/xlsx/xform/table/table-xform.js.map +1 -0
  348. package/dist/es5/xlsx/xlsx.js +1109 -0
  349. package/dist/es5/xlsx/xlsx.js.map +1 -0
  350. package/dist/es5/xlsx/xml/theme1.js +5 -0
  351. package/dist/es5/xlsx/xml/theme1.js.map +1 -0
  352. package/dist/exceljs.bare.js +65234 -0
  353. package/dist/exceljs.bare.js.map +889 -0
  354. package/dist/exceljs.bare.min.js +45 -0
  355. package/dist/exceljs.bare.min.js.map +1 -0
  356. package/dist/exceljs.js +69987 -0
  357. package/dist/exceljs.js.map +1211 -0
  358. package/dist/exceljs.min.js +45 -0
  359. package/dist/exceljs.min.js.map +1 -0
  360. package/excel.js +13 -0
  361. package/index.d.ts +2041 -0
  362. package/index.ts +2 -0
  363. package/lib/csv/csv.js +191 -0
  364. package/lib/csv/line-buffer.js +74 -0
  365. package/lib/csv/stream-converter.js +135 -0
  366. package/lib/doc/anchor.js +91 -0
  367. package/lib/doc/cell.js +1124 -0
  368. package/lib/doc/column.js +320 -0
  369. package/lib/doc/data/theme1.json +234 -0
  370. package/lib/doc/data-validations.js +19 -0
  371. package/lib/doc/defined-names.js +196 -0
  372. package/lib/doc/enums.js +48 -0
  373. package/lib/doc/form-checkbox.js +336 -0
  374. package/lib/doc/image.js +59 -0
  375. package/lib/doc/modelcontainer.js +18 -0
  376. package/lib/doc/note.js +65 -0
  377. package/lib/doc/pivot-table.js +239 -0
  378. package/lib/doc/range.js +257 -0
  379. package/lib/doc/row.js +424 -0
  380. package/lib/doc/table.js +559 -0
  381. package/lib/doc/workbook.js +240 -0
  382. package/lib/doc/worksheet.js +1041 -0
  383. package/lib/exceljs.bare.js +13 -0
  384. package/lib/exceljs.browser.js +36 -0
  385. package/lib/exceljs.nodejs.js +14 -0
  386. package/lib/stream/xlsx/hyperlink-reader.js +83 -0
  387. package/lib/stream/xlsx/sheet-comments-writer.js +121 -0
  388. package/lib/stream/xlsx/sheet-rels-writer.js +119 -0
  389. package/lib/stream/xlsx/workbook-reader.js +336 -0
  390. package/lib/stream/xlsx/workbook-writer.js +347 -0
  391. package/lib/stream/xlsx/worksheet-reader.js +374 -0
  392. package/lib/stream/xlsx/worksheet-writer.js +717 -0
  393. package/lib/utils/auto-drain.js +15 -0
  394. package/lib/utils/browser-buffer-decode.js +14 -0
  395. package/lib/utils/browser-buffer-encode.js +15 -0
  396. package/lib/utils/cell-matrix.js +165 -0
  397. package/lib/utils/col-cache.js +287 -0
  398. package/lib/utils/copy-style.js +43 -0
  399. package/lib/utils/encryptor.js +55 -0
  400. package/lib/utils/iterate-stream.js +48 -0
  401. package/lib/utils/parse-sax.js +43 -0
  402. package/lib/utils/shared-formula.js +44 -0
  403. package/lib/utils/shared-strings.js +42 -0
  404. package/lib/utils/stream-base64.js +72 -0
  405. package/lib/utils/stream-buf.js +387 -0
  406. package/lib/utils/string-buf.js +82 -0
  407. package/lib/utils/string-builder.js +35 -0
  408. package/lib/utils/stuttered-pipe.js +67 -0
  409. package/lib/utils/typed-stack.js +24 -0
  410. package/lib/utils/under-dash.js +184 -0
  411. package/lib/utils/utils.js +206 -0
  412. package/lib/utils/xml-stream.js +169 -0
  413. package/lib/utils/zip-stream.js +87 -0
  414. package/lib/xlsx/.rels +11 -0
  415. package/lib/xlsx/calcChain.xml +6 -0
  416. package/lib/xlsx/core.xml +7 -0
  417. package/lib/xlsx/defaultnumformats.js +153 -0
  418. package/lib/xlsx/rel-type.js +27 -0
  419. package/lib/xlsx/styles.xml +41 -0
  420. package/lib/xlsx/workbook.xml +16 -0
  421. package/lib/xlsx/xform/base-xform.js +145 -0
  422. package/lib/xlsx/xform/book/defined-name-xform.js +91 -0
  423. package/lib/xlsx/xform/book/sheet-xform.js +34 -0
  424. package/lib/xlsx/xform/book/workbook-calc-properties-xform.js +26 -0
  425. package/lib/xlsx/xform/book/workbook-pivot-cache-xform.js +29 -0
  426. package/lib/xlsx/xform/book/workbook-properties-xform.js +29 -0
  427. package/lib/xlsx/xform/book/workbook-view-xform.js +53 -0
  428. package/lib/xlsx/xform/book/workbook-xform.js +265 -0
  429. package/lib/xlsx/xform/comment/comment-xform.js +105 -0
  430. package/lib/xlsx/xform/comment/comments-xform.js +82 -0
  431. package/lib/xlsx/xform/comment/style/vml-position-xform.js +39 -0
  432. package/lib/xlsx/xform/comment/style/vml-protection-xform.js +36 -0
  433. package/lib/xlsx/xform/comment/vml-anchor-xform.js +60 -0
  434. package/lib/xlsx/xform/comment/vml-client-data-xform.js +92 -0
  435. package/lib/xlsx/xform/comment/vml-notes-xform.js +217 -0
  436. package/lib/xlsx/xform/comment/vml-shape-xform.js +95 -0
  437. package/lib/xlsx/xform/comment/vml-textbox-xform.js +64 -0
  438. package/lib/xlsx/xform/composite-xform.js +56 -0
  439. package/lib/xlsx/xform/core/app-heading-pairs-xform.js +32 -0
  440. package/lib/xlsx/xform/core/app-titles-of-parts-xform.js +28 -0
  441. package/lib/xlsx/xform/core/app-xform.js +100 -0
  442. package/lib/xlsx/xform/core/content-types-xform.js +211 -0
  443. package/lib/xlsx/xform/core/core-xform.js +142 -0
  444. package/lib/xlsx/xform/core/relationship-xform.js +25 -0
  445. package/lib/xlsx/xform/core/relationships-xform.js +73 -0
  446. package/lib/xlsx/xform/drawing/base-cell-anchor-xform.js +48 -0
  447. package/lib/xlsx/xform/drawing/blip-fill-xform.js +71 -0
  448. package/lib/xlsx/xform/drawing/blip-xform.js +42 -0
  449. package/lib/xlsx/xform/drawing/c-nv-pic-pr-xform.js +38 -0
  450. package/lib/xlsx/xform/drawing/c-nv-pr-xform.js +68 -0
  451. package/lib/xlsx/xform/drawing/cell-position-xform.js +77 -0
  452. package/lib/xlsx/xform/drawing/ctrl-prop-xform.js +74 -0
  453. package/lib/xlsx/xform/drawing/drawing-xform.js +109 -0
  454. package/lib/xlsx/xform/drawing/ext-lst-xform.js +43 -0
  455. package/lib/xlsx/xform/drawing/ext-xform.js +44 -0
  456. package/lib/xlsx/xform/drawing/hlink-click-xform.js +41 -0
  457. package/lib/xlsx/xform/drawing/nv-pic-pr-xform.js +65 -0
  458. package/lib/xlsx/xform/drawing/one-cell-anchor-xform.js +63 -0
  459. package/lib/xlsx/xform/drawing/pic-xform.js +77 -0
  460. package/lib/xlsx/xform/drawing/sp-pr.js +17 -0
  461. package/lib/xlsx/xform/drawing/two-cell-anchor-xform.js +62 -0
  462. package/lib/xlsx/xform/list-xform.js +95 -0
  463. package/lib/xlsx/xform/pivot-table/cache-field.js +74 -0
  464. package/lib/xlsx/xform/pivot-table/pivot-cache-definition-xform.js +77 -0
  465. package/lib/xlsx/xform/pivot-table/pivot-cache-records-xform.js +107 -0
  466. package/lib/xlsx/xform/pivot-table/pivot-table-xform.js +265 -0
  467. package/lib/xlsx/xform/sheet/auto-filter-xform.js +38 -0
  468. package/lib/xlsx/xform/sheet/cell-xform.js +498 -0
  469. package/lib/xlsx/xform/sheet/cf/cf-rule-xform.js +308 -0
  470. package/lib/xlsx/xform/sheet/cf/cfvo-xform.js +27 -0
  471. package/lib/xlsx/xform/sheet/cf/color-scale-xform.js +45 -0
  472. package/lib/xlsx/xform/sheet/cf/conditional-formatting-xform.js +48 -0
  473. package/lib/xlsx/xform/sheet/cf/conditional-formattings-xform.js +92 -0
  474. package/lib/xlsx/xform/sheet/cf/databar-xform.js +56 -0
  475. package/lib/xlsx/xform/sheet/cf/ext-lst-ref-xform.js +87 -0
  476. package/lib/xlsx/xform/sheet/cf/formula-xform.js +25 -0
  477. package/lib/xlsx/xform/sheet/cf/icon-set-xform.js +47 -0
  478. package/lib/xlsx/xform/sheet/cf-ext/cf-icon-ext-xform.js +27 -0
  479. package/lib/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js +98 -0
  480. package/lib/xlsx/xform/sheet/cf-ext/cfvo-ext-xform.js +43 -0
  481. package/lib/xlsx/xform/sheet/cf-ext/conditional-formatting-ext-xform.js +62 -0
  482. package/lib/xlsx/xform/sheet/cf-ext/conditional-formattings-ext-xform.js +50 -0
  483. package/lib/xlsx/xform/sheet/cf-ext/databar-ext-xform.js +102 -0
  484. package/lib/xlsx/xform/sheet/cf-ext/f-ext-xform.js +25 -0
  485. package/lib/xlsx/xform/sheet/cf-ext/icon-set-ext-xform.js +73 -0
  486. package/lib/xlsx/xform/sheet/cf-ext/sqref-ext-xform.js +25 -0
  487. package/lib/xlsx/xform/sheet/col-xform.js +86 -0
  488. package/lib/xlsx/xform/sheet/data-validations-xform.js +257 -0
  489. package/lib/xlsx/xform/sheet/dimension-xform.js +29 -0
  490. package/lib/xlsx/xform/sheet/drawing-xform.js +33 -0
  491. package/lib/xlsx/xform/sheet/ext-lst-xform.js +86 -0
  492. package/lib/xlsx/xform/sheet/header-footer-xform.js +146 -0
  493. package/lib/xlsx/xform/sheet/hyperlink-xform.js +54 -0
  494. package/lib/xlsx/xform/sheet/merge-cell-xform.js +27 -0
  495. package/lib/xlsx/xform/sheet/merges.js +56 -0
  496. package/lib/xlsx/xform/sheet/outline-properties-xform.js +43 -0
  497. package/lib/xlsx/xform/sheet/page-breaks-xform.js +27 -0
  498. package/lib/xlsx/xform/sheet/page-margins-xform.js +49 -0
  499. package/lib/xlsx/xform/sheet/page-setup-properties-xform.js +35 -0
  500. package/lib/xlsx/xform/sheet/page-setup-xform.js +103 -0
  501. package/lib/xlsx/xform/sheet/picture-xform.js +33 -0
  502. package/lib/xlsx/xform/sheet/print-options-xform.js +49 -0
  503. package/lib/xlsx/xform/sheet/row-breaks-xform.js +39 -0
  504. package/lib/xlsx/xform/sheet/row-xform.js +145 -0
  505. package/lib/xlsx/xform/sheet/sheet-format-properties-xform.js +67 -0
  506. package/lib/xlsx/xform/sheet/sheet-properties-xform.js +90 -0
  507. package/lib/xlsx/xform/sheet/sheet-protection-xform.js +89 -0
  508. package/lib/xlsx/xform/sheet/sheet-view-xform.js +202 -0
  509. package/lib/xlsx/xform/sheet/table-part-xform.js +33 -0
  510. package/lib/xlsx/xform/sheet/worksheet-xform.js +657 -0
  511. package/lib/xlsx/xform/simple/boolean-xform.js +31 -0
  512. package/lib/xlsx/xform/simple/date-xform.js +66 -0
  513. package/lib/xlsx/xform/simple/float-xform.js +51 -0
  514. package/lib/xlsx/xform/simple/integer-xform.js +57 -0
  515. package/lib/xlsx/xform/simple/string-xform.js +51 -0
  516. package/lib/xlsx/xform/static-xform.js +64 -0
  517. package/lib/xlsx/xform/strings/phonetic-text-xform.js +98 -0
  518. package/lib/xlsx/xform/strings/rich-text-xform.js +101 -0
  519. package/lib/xlsx/xform/strings/shared-string-xform.js +102 -0
  520. package/lib/xlsx/xform/strings/shared-strings-xform.js +132 -0
  521. package/lib/xlsx/xform/strings/text-xform.js +44 -0
  522. package/lib/xlsx/xform/style/alignment-xform.js +172 -0
  523. package/lib/xlsx/xform/style/border-xform.js +207 -0
  524. package/lib/xlsx/xform/style/color-xform.js +63 -0
  525. package/lib/xlsx/xform/style/dxf-xform.js +111 -0
  526. package/lib/xlsx/xform/style/fill-xform.js +364 -0
  527. package/lib/xlsx/xform/style/font-xform.js +102 -0
  528. package/lib/xlsx/xform/style/numfmt-xform.js +63 -0
  529. package/lib/xlsx/xform/style/protection-xform.js +60 -0
  530. package/lib/xlsx/xform/style/style-xform.js +125 -0
  531. package/lib/xlsx/xform/style/styles-xform.js +527 -0
  532. package/lib/xlsx/xform/style/underline-xform.js +47 -0
  533. package/lib/xlsx/xform/table/auto-filter-xform.js +81 -0
  534. package/lib/xlsx/xform/table/custom-filter-xform.js +33 -0
  535. package/lib/xlsx/xform/table/filter-column-xform.js +99 -0
  536. package/lib/xlsx/xform/table/filter-xform.js +31 -0
  537. package/lib/xlsx/xform/table/table-column-xform.js +44 -0
  538. package/lib/xlsx/xform/table/table-style-info-xform.js +41 -0
  539. package/lib/xlsx/xform/table/table-xform.js +134 -0
  540. package/lib/xlsx/xlsx.js +1160 -0
  541. package/lib/xlsx/xml/theme1.js +3 -0
  542. package/lib/xlsx/xml/theme1.xml +318 -0
  543. package/package.json +159 -0
@@ -0,0 +1,44 @@
1
+ const colCache = require('./col-cache');
2
+
3
+ // const cellRefRegex = /(([a-z_\-0-9]*)!)?[$]?([a-z]+)[$]?([1-9][0-9]*)/i;
4
+ const replacementCandidateRx = /(([a-z_\-0-9]*)!)?([a-z0-9_$]{2,})([(])?/gi;
5
+ const CRrx = /^([$])?([a-z]+)([$])?([1-9][0-9]*)$/i;
6
+
7
+ function slideFormula(formula, fromCell, toCell) {
8
+ const offset = colCache.decode(fromCell);
9
+ const to = colCache.decode(toCell);
10
+ return formula.replace(
11
+ replacementCandidateRx,
12
+ (refMatch, sheet, sheetMaybe, addrPart, trailingParen) => {
13
+ if (trailingParen) {
14
+ return refMatch;
15
+ }
16
+ const match = CRrx.exec(addrPart);
17
+ if (match) {
18
+ const colDollar = match[1];
19
+ const colStr = match[2].toUpperCase();
20
+ const rowDollar = match[3];
21
+ const rowStr = match[4];
22
+ if (colStr.length > 3 || (colStr.length === 3 && colStr > 'XFD')) {
23
+ // > XFD is the highest col number in excel 2007 and beyond, so this is a named range
24
+ return refMatch;
25
+ }
26
+ let col = colCache.l2n(colStr);
27
+ let row = parseInt(rowStr, 10);
28
+ if (!colDollar) {
29
+ col += to.col - offset.col;
30
+ }
31
+ if (!rowDollar) {
32
+ row += to.row - offset.row;
33
+ }
34
+ const res = (sheet || '') + (colDollar || '') + colCache.n2l(col) + (rowDollar || '') + row;
35
+ return res;
36
+ }
37
+ return refMatch;
38
+ }
39
+ );
40
+ }
41
+
42
+ module.exports = {
43
+ slideFormula,
44
+ };
@@ -0,0 +1,42 @@
1
+ const SharedStringXform = require('../xlsx/xform/strings/shared-string-xform');
2
+
3
+ class SharedStrings {
4
+ constructor() {
5
+ this._values = [];
6
+ this._totalRefs = 0;
7
+ this._hash = Object.create(null);
8
+ }
9
+
10
+ get count() {
11
+ return this._values.length;
12
+ }
13
+
14
+ get values() {
15
+ return this._values;
16
+ }
17
+
18
+ get totalRefs() {
19
+ return this._totalRefs;
20
+ }
21
+
22
+ getString(index) {
23
+ return this._values[index];
24
+ }
25
+
26
+ get sharedStringXform() {
27
+ return this._sharedStringXform || (this._sharedStringXform = new SharedStringXform());
28
+ }
29
+
30
+ add(value) {
31
+ const hashKey = value && value.richText ? this.sharedStringXform.toXml(value) : value;
32
+ let index = this._hash[hashKey];
33
+ if (index === undefined) {
34
+ index = this._hash[hashKey] = this._values.length;
35
+ this._values.push(value);
36
+ }
37
+ this._totalRefs++;
38
+ return index;
39
+ }
40
+ }
41
+
42
+ module.exports = SharedStrings;
@@ -0,0 +1,72 @@
1
+ const Stream = require('readable-stream');
2
+
3
+ // =============================================================================
4
+ // StreamBase64 - A utility to convert to/from base64 stream
5
+ // Note: does not buffer data, must be piped
6
+ class StreamBase64 extends Stream.Duplex {
7
+ constructor() {
8
+ super();
9
+
10
+ // consuming pipe streams go here
11
+ this.pipes = [];
12
+ }
13
+
14
+ // writable
15
+ // event drain - if write returns false (which it won't), indicates when safe to write again.
16
+ // finish - end() has been called
17
+ // pipe(src) - pipe() has been called on readable
18
+ // unpipe(src) - unpipe() has been called on readable
19
+ // error - duh
20
+
21
+ write(/* data, encoding */) {
22
+ return true;
23
+ }
24
+
25
+ cork() {}
26
+
27
+ uncork() {}
28
+
29
+ end(/* chunk, encoding, callback */) {}
30
+
31
+ // readable
32
+ // event readable - some data is now available
33
+ // event data - switch to flowing mode - feeds chunks to handler
34
+ // event end - no more data
35
+ // event close - optional, indicates upstream close
36
+ // event error - duh
37
+ read(/* size */) {}
38
+
39
+ setEncoding(encoding) {
40
+ // causes stream.read or stream.on('data) to return strings of encoding instead of Buffer objects
41
+ this.encoding = encoding;
42
+ }
43
+
44
+ pause() {}
45
+
46
+ resume() {}
47
+
48
+ isPaused() {}
49
+
50
+ pipe(destination) {
51
+ // add destination to pipe list & write current buffer
52
+ this.pipes.push(destination);
53
+ }
54
+
55
+ unpipe(destination) {
56
+ // remove destination from pipe list
57
+ this.pipes = this.pipes.filter(pipe => pipe !== destination);
58
+ }
59
+
60
+ unshift(/* chunk */) {
61
+ // some numpty has read some data that's not for them and they want to put it back!
62
+ // Might implement this some day
63
+ throw new Error('Not Implemented');
64
+ }
65
+
66
+ wrap(/* stream */) {
67
+ // not implemented
68
+ throw new Error('Not Implemented');
69
+ }
70
+ }
71
+
72
+ module.exports = StreamBase64;
@@ -0,0 +1,387 @@
1
+ /* eslint-disable max-classes-per-file */
2
+ const Stream = require('readable-stream');
3
+
4
+ const utils = require('./utils');
5
+ const StringBuf = require('./string-buf');
6
+
7
+ // =============================================================================
8
+ // data chunks - encapsulating incoming data
9
+ class StringChunk {
10
+ constructor(data, encoding) {
11
+ this._data = data;
12
+ this._encoding = encoding;
13
+ }
14
+
15
+ get length() {
16
+ return this.toBuffer().length;
17
+ }
18
+
19
+ // copy to target buffer
20
+ copy(target, targetOffset, offset, length) {
21
+ return this.toBuffer().copy(target, targetOffset, offset, length);
22
+ }
23
+
24
+ toBuffer() {
25
+ if (!this._buffer) {
26
+ this._buffer = Buffer.from(this._data, this._encoding);
27
+ }
28
+ return this._buffer;
29
+ }
30
+ }
31
+
32
+ class StringBufChunk {
33
+ constructor(data) {
34
+ this._data = data;
35
+ }
36
+
37
+ get length() {
38
+ return this._data.length;
39
+ }
40
+
41
+ // copy to target buffer
42
+ copy(target, targetOffset, offset, length) {
43
+ // eslint-disable-next-line no-underscore-dangle
44
+ return this._data._buf.copy(target, targetOffset, offset, length);
45
+ }
46
+
47
+ toBuffer() {
48
+ return this._data.toBuffer();
49
+ }
50
+ }
51
+
52
+ class BufferChunk {
53
+ constructor(data) {
54
+ this._data = data;
55
+ }
56
+
57
+ get length() {
58
+ return this._data.length;
59
+ }
60
+
61
+ // copy to target buffer
62
+ copy(target, targetOffset, offset, length) {
63
+ this._data.copy(target, targetOffset, offset, length);
64
+ }
65
+
66
+ toBuffer() {
67
+ return this._data;
68
+ }
69
+ }
70
+
71
+ // =============================================================================
72
+ // ReadWriteBuf - a single buffer supporting simple read-write
73
+ class ReadWriteBuf {
74
+ constructor(size) {
75
+ this.size = size;
76
+ // the buffer
77
+ this.buffer = Buffer.alloc(size);
78
+ // read index
79
+ this.iRead = 0;
80
+ // write index
81
+ this.iWrite = 0;
82
+ }
83
+
84
+ toBuffer() {
85
+ if (this.iRead === 0 && this.iWrite === this.size) {
86
+ return this.buffer;
87
+ }
88
+
89
+ const buf = Buffer.alloc(this.iWrite - this.iRead);
90
+ this.buffer.copy(buf, 0, this.iRead, this.iWrite);
91
+ return buf;
92
+ }
93
+
94
+ get length() {
95
+ return this.iWrite - this.iRead;
96
+ }
97
+
98
+ get eod() {
99
+ return this.iRead === this.iWrite;
100
+ }
101
+
102
+ get full() {
103
+ return this.iWrite === this.size;
104
+ }
105
+
106
+ read(size) {
107
+ let buf;
108
+ // read size bytes from buffer and return buffer
109
+ if (size === 0) {
110
+ // special case - return null if no data requested
111
+ return null;
112
+ }
113
+
114
+ if (size === undefined || size >= this.length) {
115
+ // if no size specified or size is at least what we have then return all of the bytes
116
+ buf = this.toBuffer();
117
+ this.iRead = this.iWrite;
118
+ return buf;
119
+ }
120
+
121
+ // otherwise return a chunk
122
+ buf = Buffer.alloc(size);
123
+ this.buffer.copy(buf, 0, this.iRead, size);
124
+ this.iRead += size;
125
+ return buf;
126
+ }
127
+
128
+ write(chunk, offset, length) {
129
+ // write as many bytes from data from optional source offset
130
+ // and return number of bytes written
131
+ const size = Math.min(length, this.size - this.iWrite);
132
+ chunk.copy(this.buffer, this.iWrite, offset, offset + size);
133
+ this.iWrite += size;
134
+ return size;
135
+ }
136
+ }
137
+
138
+ // =============================================================================
139
+ // StreamBuf - a multi-purpose read-write stream
140
+ // As MemBuf - write as much data as you like. Then call toBuffer() to consolidate
141
+ // As StreamHub - pipe to multiple writables
142
+ // As readable stream - feed data into the writable part and have some other code read from it.
143
+
144
+ // Note: Not sure why but StreamBuf does not like JS "class" sugar. It fails the
145
+ // integration tests
146
+ const StreamBuf = function(options) {
147
+ // IMPORTANT: Call Duplex constructor first for archiver 7.x compatibility
148
+ Stream.Duplex.call(this, options);
149
+
150
+ options = options || {};
151
+ this.bufSize = options.bufSize || 1024 * 1024;
152
+ this.buffers = [];
153
+
154
+ // batch mode fills a buffer completely before passing the data on
155
+ // to pipes or 'readable' event listeners
156
+ this.batch = options.batch || false;
157
+
158
+ this.corked = false;
159
+ // where in the current writable buffer we're up to
160
+ this.inPos = 0;
161
+
162
+ // where in the current readable buffer we've read up to
163
+ this.outPos = 0;
164
+
165
+ // consuming pipe streams go here
166
+ this.pipes = [];
167
+
168
+ // controls emit('data')
169
+ this.paused = false;
170
+
171
+ this.encoding = null;
172
+ };
173
+
174
+ utils.inherits(StreamBuf, Stream.Duplex, {
175
+ toBuffer() {
176
+ switch (this.buffers.length) {
177
+ case 0:
178
+ return null;
179
+ case 1:
180
+ return this.buffers[0].toBuffer();
181
+ default:
182
+ return Buffer.concat(this.buffers.map(rwBuf => rwBuf.toBuffer()));
183
+ }
184
+ },
185
+
186
+ // writable
187
+ // event drain - if write returns false (which it won't), indicates when safe to write again.
188
+ // finish - end() has been called
189
+ // pipe(src) - pipe() has been called on readable
190
+ // unpipe(src) - unpipe() has been called on readable
191
+ // error - duh
192
+
193
+ _getWritableBuffer() {
194
+ if (this.buffers.length) {
195
+ const last = this.buffers[this.buffers.length - 1];
196
+ if (!last.full) {
197
+ return last;
198
+ }
199
+ }
200
+ const buf = new ReadWriteBuf(this.bufSize);
201
+ this.buffers.push(buf);
202
+ return buf;
203
+ },
204
+
205
+ async _pipe(chunk) {
206
+ const write = function(pipe) {
207
+ return new Promise(resolve => {
208
+ pipe.write(chunk.toBuffer(), () => {
209
+ resolve();
210
+ });
211
+ });
212
+ };
213
+ await Promise.all(this.pipes.map(write));
214
+ },
215
+ _writeToBuffers(chunk) {
216
+ let inPos = 0;
217
+ const inLen = chunk.length;
218
+ while (inPos < inLen) {
219
+ // find writable buffer
220
+ const buffer = this._getWritableBuffer();
221
+
222
+ // write some data
223
+ inPos += buffer.write(chunk, inPos, inLen - inPos);
224
+ }
225
+ },
226
+ async _write(chunk, encoding, callback) {
227
+ // Internal method required by Duplex interface
228
+ // Delegate to public write method which handles the callback
229
+ try {
230
+ await this.write(chunk, encoding, callback);
231
+ } catch (err) {
232
+ callback(err);
233
+ }
234
+ },
235
+ async write(data, encoding, callback) {
236
+ if (encoding instanceof Function) {
237
+ callback = encoding;
238
+ encoding = 'utf8';
239
+ }
240
+ callback = callback || utils.nop;
241
+
242
+ // encapsulate data into a chunk
243
+ let chunk;
244
+ if (data instanceof StringBuf) {
245
+ chunk = new StringBufChunk(data);
246
+ } else if (data instanceof Buffer) {
247
+ chunk = new BufferChunk(data);
248
+ } else if (typeof data === 'string' || data instanceof String || data instanceof ArrayBuffer) {
249
+ chunk = new StringChunk(data, encoding);
250
+ } else {
251
+ throw new Error('Chunk must be one of type String, Buffer or StringBuf.');
252
+ }
253
+
254
+ // now, do something with the chunk
255
+ if (this.pipes.length) {
256
+ if (this.batch) {
257
+ this._writeToBuffers(chunk);
258
+ while (!this.corked && this.buffers.length > 1) {
259
+ this._pipe(this.buffers.shift());
260
+ }
261
+ } else if (!this.corked) {
262
+ await this._pipe(chunk);
263
+ callback();
264
+ } else {
265
+ this._writeToBuffers(chunk);
266
+ process.nextTick(callback);
267
+ }
268
+ } else {
269
+ if (!this.paused) {
270
+ this.emit('data', chunk.toBuffer());
271
+ }
272
+
273
+ this._writeToBuffers(chunk);
274
+ this.emit('readable');
275
+ process.nextTick(callback);
276
+ }
277
+
278
+ return true;
279
+ },
280
+ cork() {
281
+ this.corked = true;
282
+ },
283
+ _flush(/* destination */) {
284
+ // if we have comsumers...
285
+ if (this.pipes.length) {
286
+ // and there's stuff not written
287
+ while (this.buffers.length) {
288
+ this._pipe(this.buffers.shift());
289
+ }
290
+ }
291
+ },
292
+ uncork() {
293
+ this.corked = false;
294
+ this._flush();
295
+ },
296
+ end(chunk, encoding, callback) {
297
+ const writeComplete = error => {
298
+ if (error) {
299
+ callback(error);
300
+ } else {
301
+ this._flush();
302
+ this.pipes.forEach(pipe => {
303
+ pipe.end();
304
+ });
305
+ this.emit('finish');
306
+ }
307
+ };
308
+ if (chunk) {
309
+ this.write(chunk, encoding, writeComplete);
310
+ } else {
311
+ writeComplete();
312
+ }
313
+ },
314
+
315
+ // readable
316
+ // event readable - some data is now available
317
+ // event data - switch to flowing mode - feeds chunks to handler
318
+ // event end - no more data
319
+ // event close - optional, indicates upstream close
320
+ // event error - duh
321
+ _read(size) {
322
+ // Internal method required by Duplex interface
323
+ // Push data from buffers to readable stream
324
+ const data = this.read(size);
325
+ if (data && data.length > 0) {
326
+ this.push(data);
327
+ }
328
+ },
329
+ read(size) {
330
+ let buffers;
331
+ // read min(buffer, size || infinity)
332
+ if (size) {
333
+ buffers = [];
334
+ while (size && this.buffers.length && !this.buffers[0].eod) {
335
+ const first = this.buffers[0];
336
+ const buffer = first.read(size);
337
+ size -= buffer.length;
338
+ buffers.push(buffer);
339
+ if (first.eod && first.full) {
340
+ this.buffers.shift();
341
+ }
342
+ }
343
+ return Buffer.concat(buffers);
344
+ }
345
+
346
+ buffers = this.buffers.map(buf => buf.toBuffer()).filter(Boolean);
347
+ this.buffers = [];
348
+ return Buffer.concat(buffers);
349
+ },
350
+ setEncoding(encoding) {
351
+ // causes stream.read or stream.on('data) to return strings of encoding instead of Buffer objects
352
+ this.encoding = encoding;
353
+ },
354
+ pause() {
355
+ this.paused = true;
356
+ },
357
+ resume() {
358
+ this.paused = false;
359
+ },
360
+ isPaused() {
361
+ return !!this.paused;
362
+ },
363
+ pipe(destination) {
364
+ // add destination to pipe list & write current buffer
365
+ this.pipes.push(destination);
366
+ if (!this.paused && this.buffers.length) {
367
+ this.end();
368
+ }
369
+ // Return destination for chaining (required for archiver 7.x)
370
+ return destination;
371
+ },
372
+ unpipe(destination) {
373
+ // remove destination from pipe list
374
+ this.pipes = this.pipes.filter(pipe => pipe !== destination);
375
+ },
376
+ unshift(/* chunk */) {
377
+ // some numpty has read some data that's not for them and they want to put it back!
378
+ // Might implement this some day
379
+ throw new Error('Not Implemented');
380
+ },
381
+ wrap(/* stream */) {
382
+ // not implemented
383
+ throw new Error('Not Implemented');
384
+ },
385
+ });
386
+
387
+ module.exports = StreamBuf;
@@ -0,0 +1,82 @@
1
+ // StringBuf - a way to keep string memory operations to a minimum
2
+ // while building the strings for the xml files
3
+ class StringBuf {
4
+ constructor(options) {
5
+ this._buf = Buffer.alloc((options && options.size) || 16384);
6
+ this._encoding = (options && options.encoding) || 'utf8';
7
+
8
+ // where in the buffer we are at
9
+ this._inPos = 0;
10
+
11
+ // for use by toBuffer()
12
+ this._buffer = undefined;
13
+ }
14
+
15
+ get length() {
16
+ return this._inPos;
17
+ }
18
+
19
+ get capacity() {
20
+ return this._buf.length;
21
+ }
22
+
23
+ get buffer() {
24
+ return this._buf;
25
+ }
26
+
27
+ toBuffer() {
28
+ // return the current data as a single enclosing buffer
29
+ if (!this._buffer) {
30
+ this._buffer = Buffer.alloc(this.length);
31
+ this._buf.copy(this._buffer, 0, 0, this.length);
32
+ }
33
+ return this._buffer;
34
+ }
35
+
36
+ reset(position) {
37
+ position = position || 0;
38
+ this._buffer = undefined;
39
+ this._inPos = position;
40
+ }
41
+
42
+ _grow(min) {
43
+ let size = this._buf.length * 2;
44
+ while (size < min) {
45
+ size *= 2;
46
+ }
47
+ const buf = Buffer.alloc(size);
48
+ this._buf.copy(buf, 0);
49
+ this._buf = buf;
50
+ }
51
+
52
+ addText(text) {
53
+ this._buffer = undefined;
54
+
55
+ let inPos = this._inPos + this._buf.write(text, this._inPos, this._encoding);
56
+
57
+ // if we've hit (or nearing capacity), grow the buf
58
+ while (inPos >= this._buf.length - 4) {
59
+ this._grow(this._inPos + text.length);
60
+
61
+ // keep trying to write until we've completely written the text
62
+ inPos = this._inPos + this._buf.write(text, this._inPos, this._encoding);
63
+ }
64
+
65
+ this._inPos = inPos;
66
+ }
67
+
68
+ addStringBuf(inBuf) {
69
+ if (inBuf.length) {
70
+ this._buffer = undefined;
71
+
72
+ if (this.length + inBuf.length > this.capacity) {
73
+ this._grow(this.length + inBuf.length);
74
+ }
75
+ // eslint-disable-next-line no-underscore-dangle
76
+ inBuf._buf.copy(this._buf, this._inPos, 0, inBuf.length);
77
+ this._inPos += inBuf.length;
78
+ }
79
+ }
80
+ }
81
+
82
+ module.exports = StringBuf;
@@ -0,0 +1,35 @@
1
+ // StringBuilder - a way to keep string memory operations to a minimum
2
+ // while building the strings for the xml files
3
+ class StringBuilder {
4
+ constructor() {
5
+ this.reset();
6
+ }
7
+
8
+ get length() {
9
+ return this._buf.length;
10
+ }
11
+
12
+ toString() {
13
+ return this._buf.join('');
14
+ }
15
+
16
+ reset(position) {
17
+ if (position) {
18
+ while (this._buf.length > position) {
19
+ this._buf.pop();
20
+ }
21
+ } else {
22
+ this._buf = [];
23
+ }
24
+ }
25
+
26
+ addText(text) {
27
+ this._buf.push(text);
28
+ }
29
+
30
+ addStringBuf(inBuf) {
31
+ this._buf.push(inBuf.toString());
32
+ }
33
+ }
34
+
35
+ module.exports = StringBuilder;