@cj-tech-master/excelts 1.6.3 → 2.0.0-canary.20251228013952.4f2c3c6

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 (400) hide show
  1. package/README.md +139 -24
  2. package/README_zh.md +140 -26
  3. package/dist/browser/excelts.esm.js +18468 -0
  4. package/dist/browser/excelts.esm.js.map +1 -0
  5. package/dist/browser/excelts.esm.min.js +125 -0
  6. package/dist/browser/excelts.iife.js +13107 -47146
  7. package/dist/browser/excelts.iife.js.map +1 -1
  8. package/dist/browser/excelts.iife.min.js +24 -106
  9. package/dist/cjs/csv/csv-core.js +701 -0
  10. package/dist/cjs/csv/csv-stream.js +646 -0
  11. package/dist/cjs/csv/csv.base.js +137 -0
  12. package/dist/cjs/csv/csv.browser.js +68 -0
  13. package/dist/cjs/csv/csv.js +218 -162
  14. package/dist/cjs/doc/anchor.js +2 -2
  15. package/dist/cjs/doc/cell.js +22 -22
  16. package/dist/cjs/doc/column.js +28 -7
  17. package/dist/cjs/doc/data-validations.js +3 -3
  18. package/dist/cjs/doc/defined-names.js +13 -13
  19. package/dist/cjs/doc/image.js +7 -7
  20. package/dist/cjs/doc/modelcontainer.js +2 -2
  21. package/dist/cjs/doc/note.js +2 -2
  22. package/dist/cjs/doc/pivot-table.js +5 -5
  23. package/dist/cjs/doc/range.js +11 -11
  24. package/dist/cjs/doc/row.js +16 -16
  25. package/dist/cjs/doc/table.js +5 -5
  26. package/dist/cjs/doc/workbook.base.js +211 -0
  27. package/dist/cjs/doc/workbook.browser.js +62 -0
  28. package/dist/cjs/doc/workbook.js +68 -179
  29. package/dist/cjs/doc/worksheet.js +45 -41
  30. package/dist/cjs/index.js +49 -32
  31. package/dist/cjs/stream/xlsx/hyperlink-reader.js +6 -6
  32. package/dist/cjs/stream/xlsx/sheet-comments-writer.js +12 -12
  33. package/dist/cjs/stream/xlsx/sheet-rels-writer.js +4 -4
  34. package/dist/cjs/stream/xlsx/workbook-reader.js +22 -22
  35. package/dist/cjs/stream/xlsx/workbook-writer.js +38 -38
  36. package/dist/cjs/stream/xlsx/worksheet-reader.js +17 -17
  37. package/dist/cjs/stream/xlsx/worksheet-writer.js +67 -60
  38. package/dist/cjs/utils/browser-buffer.js +75 -0
  39. package/dist/cjs/utils/cell-format.js +2 -2
  40. package/dist/cjs/utils/cell-matrix.js +5 -5
  41. package/dist/cjs/utils/datetime.js +499 -0
  42. package/dist/cjs/utils/encryptor.browser.js +240 -0
  43. package/dist/cjs/utils/parse-sax.js +1191 -13
  44. package/dist/cjs/utils/shared-formula.js +5 -5
  45. package/dist/cjs/utils/sheet-utils.js +13 -13
  46. package/dist/cjs/utils/stream-buf.browser.js +355 -0
  47. package/dist/cjs/utils/stream-buf.js +5 -5
  48. package/dist/cjs/utils/unzip/extract.js +11 -11
  49. package/dist/cjs/utils/unzip/index.js +21 -21
  50. package/dist/cjs/utils/unzip/parse-extra-field.js +3 -3
  51. package/dist/cjs/utils/unzip/parse.js +16 -16
  52. package/dist/cjs/utils/unzip/zip-parser.js +14 -3
  53. package/dist/cjs/utils/utils.base.js +161 -0
  54. package/dist/cjs/utils/utils.browser.js +89 -0
  55. package/dist/cjs/utils/utils.js +46 -154
  56. package/dist/cjs/utils/xml-stream.js +3 -3
  57. package/dist/cjs/utils/zip/compress.base.js +88 -0
  58. package/dist/cjs/utils/zip/compress.browser.js +127 -0
  59. package/dist/cjs/utils/zip/compress.js +18 -198
  60. package/dist/cjs/utils/zip/crc32.browser.js +88 -0
  61. package/dist/cjs/utils/zip/deflate-fallback.js +575 -0
  62. package/dist/cjs/utils/zip/index.js +17 -17
  63. package/dist/cjs/utils/zip/streaming-zip.js +264 -0
  64. package/dist/cjs/utils/zip/zip-builder.js +10 -10
  65. package/dist/cjs/utils/zip-stream.browser.js +135 -0
  66. package/dist/cjs/utils/zip-stream.js +4 -4
  67. package/dist/cjs/xlsx/xform/base-xform.js +4 -4
  68. package/dist/cjs/xlsx/xform/book/defined-name-xform.js +4 -4
  69. package/dist/cjs/xlsx/xform/book/sheet-xform.js +4 -4
  70. package/dist/cjs/xlsx/xform/book/workbook-calc-properties-xform.js +2 -2
  71. package/dist/cjs/xlsx/xform/book/workbook-pivot-cache-xform.js +2 -2
  72. package/dist/cjs/xlsx/xform/book/workbook-properties-xform.js +2 -2
  73. package/dist/cjs/xlsx/xform/book/workbook-view-xform.js +2 -2
  74. package/dist/cjs/xlsx/xform/book/workbook-xform.js +24 -24
  75. package/dist/cjs/xlsx/xform/comment/comment-xform.js +4 -4
  76. package/dist/cjs/xlsx/xform/comment/comments-xform.js +6 -6
  77. package/dist/cjs/xlsx/xform/comment/style/vml-position-xform.js +2 -2
  78. package/dist/cjs/xlsx/xform/comment/style/vml-protection-xform.js +2 -2
  79. package/dist/cjs/xlsx/xform/comment/vml-anchor-xform.js +2 -2
  80. package/dist/cjs/xlsx/xform/comment/vml-client-data-xform.js +10 -10
  81. package/dist/cjs/xlsx/xform/comment/vml-notes-xform.js +6 -6
  82. package/dist/cjs/xlsx/xform/comment/vml-shape-xform.js +6 -6
  83. package/dist/cjs/xlsx/xform/comment/vml-textbox-xform.js +2 -2
  84. package/dist/cjs/xlsx/xform/composite-xform.js +2 -2
  85. package/dist/cjs/xlsx/xform/core/app-heading-pairs-xform.js +2 -2
  86. package/dist/cjs/xlsx/xform/core/app-titles-of-parts-xform.js +2 -2
  87. package/dist/cjs/xlsx/xform/core/app-xform.js +11 -11
  88. package/dist/cjs/xlsx/xform/core/content-types-xform.js +4 -4
  89. package/dist/cjs/xlsx/xform/core/core-xform.js +23 -23
  90. package/dist/cjs/xlsx/xform/core/relationship-xform.js +2 -2
  91. package/dist/cjs/xlsx/xform/core/relationships-xform.js +6 -6
  92. package/dist/cjs/xlsx/xform/drawing/base-cell-anchor-xform.js +2 -2
  93. package/dist/cjs/xlsx/xform/drawing/blip-fill-xform.js +4 -4
  94. package/dist/cjs/xlsx/xform/drawing/blip-xform.js +2 -2
  95. package/dist/cjs/xlsx/xform/drawing/c-nv-pic-pr-xform.js +2 -2
  96. package/dist/cjs/xlsx/xform/drawing/c-nv-pr-xform.js +6 -6
  97. package/dist/cjs/xlsx/xform/drawing/cell-position-xform.js +7 -7
  98. package/dist/cjs/xlsx/xform/drawing/drawing-xform.js +10 -10
  99. package/dist/cjs/xlsx/xform/drawing/ext-lst-xform.js +2 -2
  100. package/dist/cjs/xlsx/xform/drawing/ext-xform.js +2 -2
  101. package/dist/cjs/xlsx/xform/drawing/hlink-click-xform.js +2 -2
  102. package/dist/cjs/xlsx/xform/drawing/nv-pic-pr-xform.js +6 -6
  103. package/dist/cjs/xlsx/xform/drawing/one-cell-anchor-xform.js +10 -10
  104. package/dist/cjs/xlsx/xform/drawing/pic-xform.js +9 -9
  105. package/dist/cjs/xlsx/xform/drawing/two-cell-anchor-xform.js +9 -9
  106. package/dist/cjs/xlsx/xform/list-xform.js +2 -2
  107. package/dist/cjs/xlsx/xform/pivot-table/cache-field-xform.js +5 -5
  108. package/dist/cjs/xlsx/xform/pivot-table/cache-field.js +3 -3
  109. package/dist/cjs/xlsx/xform/pivot-table/pivot-cache-definition-xform.js +10 -10
  110. package/dist/cjs/xlsx/xform/pivot-table/pivot-cache-records-xform.js +9 -9
  111. package/dist/cjs/xlsx/xform/pivot-table/pivot-table-xform.js +10 -11
  112. package/dist/cjs/xlsx/xform/sheet/auto-filter-xform.js +4 -4
  113. package/dist/cjs/xlsx/xform/sheet/cell-xform.js +65 -65
  114. package/dist/cjs/xlsx/xform/sheet/cf/cf-rule-xform.js +27 -27
  115. package/dist/cjs/xlsx/xform/sheet/cf/cfvo-xform.js +3 -3
  116. package/dist/cjs/xlsx/xform/sheet/cf/color-scale-xform.js +6 -6
  117. package/dist/cjs/xlsx/xform/sheet/cf/conditional-formatting-xform.js +6 -6
  118. package/dist/cjs/xlsx/xform/sheet/cf/conditional-formattings-xform.js +4 -4
  119. package/dist/cjs/xlsx/xform/sheet/cf/databar-xform.js +6 -6
  120. package/dist/cjs/xlsx/xform/sheet/cf/ext-lst-ref-xform.js +5 -5
  121. package/dist/cjs/xlsx/xform/sheet/cf/formula-xform.js +2 -2
  122. package/dist/cjs/xlsx/xform/sheet/cf/icon-set-xform.js +11 -11
  123. package/dist/cjs/xlsx/xform/sheet/cf-ext/cf-icon-ext-xform.js +3 -3
  124. package/dist/cjs/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js +11 -12
  125. package/dist/cjs/xlsx/xform/sheet/cf-ext/cfvo-ext-xform.js +4 -4
  126. package/dist/cjs/xlsx/xform/sheet/cf-ext/conditional-formatting-ext-xform.js +8 -8
  127. package/dist/cjs/xlsx/xform/sheet/cf-ext/conditional-formattings-ext-xform.js +6 -6
  128. package/dist/cjs/xlsx/xform/sheet/cf-ext/databar-ext-xform.js +26 -26
  129. package/dist/cjs/xlsx/xform/sheet/cf-ext/f-ext-xform.js +2 -2
  130. package/dist/cjs/xlsx/xform/sheet/cf-ext/icon-set-ext-xform.js +14 -14
  131. package/dist/cjs/xlsx/xform/sheet/cf-ext/sqref-ext-xform.js +2 -2
  132. package/dist/cjs/xlsx/xform/sheet/col-breaks-xform.js +38 -0
  133. package/dist/cjs/xlsx/xform/sheet/col-xform.js +6 -6
  134. package/dist/cjs/xlsx/xform/sheet/data-validations-xform.js +18 -18
  135. package/dist/cjs/xlsx/xform/sheet/dimension-xform.js +2 -2
  136. package/dist/cjs/xlsx/xform/sheet/drawing-xform.js +2 -2
  137. package/dist/cjs/xlsx/xform/sheet/ext-lst-xform.js +5 -5
  138. package/dist/cjs/xlsx/xform/sheet/header-footer-xform.js +2 -2
  139. package/dist/cjs/xlsx/xform/sheet/hyperlink-xform.js +2 -2
  140. package/dist/cjs/xlsx/xform/sheet/merge-cell-xform.js +2 -2
  141. package/dist/cjs/xlsx/xform/sheet/merges.js +8 -8
  142. package/dist/cjs/xlsx/xform/sheet/outline-properties-xform.js +2 -2
  143. package/dist/cjs/xlsx/xform/sheet/page-breaks-xform.js +15 -3
  144. package/dist/cjs/xlsx/xform/sheet/page-margins-xform.js +2 -2
  145. package/dist/cjs/xlsx/xform/sheet/page-setup-properties-xform.js +2 -2
  146. package/dist/cjs/xlsx/xform/sheet/page-setup-xform.js +2 -2
  147. package/dist/cjs/xlsx/xform/sheet/picture-xform.js +2 -2
  148. package/dist/cjs/xlsx/xform/sheet/print-options-xform.js +2 -2
  149. package/dist/cjs/xlsx/xform/sheet/row-breaks-xform.js +15 -17
  150. package/dist/cjs/xlsx/xform/sheet/row-xform.js +11 -11
  151. package/dist/cjs/xlsx/xform/sheet/sheet-format-properties-xform.js +2 -2
  152. package/dist/cjs/xlsx/xform/sheet/sheet-properties-xform.js +8 -8
  153. package/dist/cjs/xlsx/xform/sheet/sheet-protection-xform.js +2 -2
  154. package/dist/cjs/xlsx/xform/sheet/sheet-view-xform.js +4 -4
  155. package/dist/cjs/xlsx/xform/sheet/table-part-xform.js +2 -2
  156. package/dist/cjs/xlsx/xform/sheet/worksheet-xform.js +75 -70
  157. package/dist/cjs/xlsx/xform/simple/boolean-xform.js +2 -2
  158. package/dist/cjs/xlsx/xform/simple/date-xform.js +2 -2
  159. package/dist/cjs/xlsx/xform/simple/float-xform.js +2 -2
  160. package/dist/cjs/xlsx/xform/simple/integer-xform.js +2 -2
  161. package/dist/cjs/xlsx/xform/simple/string-xform.js +2 -2
  162. package/dist/cjs/xlsx/xform/static-xform.js +4 -4
  163. package/dist/cjs/xlsx/xform/strings/phonetic-text-xform.js +6 -6
  164. package/dist/cjs/xlsx/xform/strings/rich-text-xform.js +6 -6
  165. package/dist/cjs/xlsx/xform/strings/shared-string-xform.js +8 -8
  166. package/dist/cjs/xlsx/xform/strings/shared-strings-xform.js +6 -6
  167. package/dist/cjs/xlsx/xform/strings/text-xform.js +2 -2
  168. package/dist/cjs/xlsx/xform/style/alignment-xform.js +8 -8
  169. package/dist/cjs/xlsx/xform/style/border-xform.js +8 -8
  170. package/dist/cjs/xlsx/xform/style/color-xform.js +2 -2
  171. package/dist/cjs/xlsx/xform/style/dxf-xform.js +14 -14
  172. package/dist/cjs/xlsx/xform/style/fill-xform.js +9 -9
  173. package/dist/cjs/xlsx/xform/style/font-xform.js +22 -22
  174. package/dist/cjs/xlsx/xform/style/numfmt-xform.js +5 -5
  175. package/dist/cjs/xlsx/xform/style/protection-xform.js +2 -2
  176. package/dist/cjs/xlsx/xform/style/style-xform.js +6 -6
  177. package/dist/cjs/xlsx/xform/style/styles-xform.js +39 -39
  178. package/dist/cjs/xlsx/xform/style/underline-xform.js +2 -2
  179. package/dist/cjs/xlsx/xform/table/auto-filter-xform.js +4 -4
  180. package/dist/cjs/xlsx/xform/table/custom-filter-xform.js +2 -2
  181. package/dist/cjs/xlsx/xform/table/filter-column-xform.js +9 -9
  182. package/dist/cjs/xlsx/xform/table/filter-xform.js +2 -2
  183. package/dist/cjs/xlsx/xform/table/table-column-xform.js +2 -2
  184. package/dist/cjs/xlsx/xform/table/table-style-info-xform.js +2 -2
  185. package/dist/cjs/xlsx/xform/table/table-xform.js +12 -12
  186. package/dist/cjs/xlsx/xlsx.base.js +742 -0
  187. package/dist/cjs/xlsx/xlsx.browser.js +162 -0
  188. package/dist/cjs/xlsx/xlsx.js +118 -892
  189. package/dist/esm/csv/csv-core.js +694 -0
  190. package/dist/esm/csv/csv-stream.js +638 -0
  191. package/dist/esm/csv/csv.base.js +127 -0
  192. package/dist/esm/csv/csv.browser.js +65 -0
  193. package/dist/esm/csv/csv.js +181 -159
  194. package/dist/esm/doc/column.js +21 -0
  195. package/dist/esm/doc/workbook.base.js +207 -0
  196. package/dist/esm/doc/workbook.browser.js +59 -0
  197. package/dist/esm/doc/workbook.js +64 -175
  198. package/dist/esm/doc/worksheet.js +4 -0
  199. package/dist/esm/index.browser.js +33 -1
  200. package/dist/esm/index.js +23 -8
  201. package/dist/esm/local.js +0 -1
  202. package/dist/esm/stream/xlsx/workbook-writer.js +1 -1
  203. package/dist/esm/stream/xlsx/worksheet-writer.js +8 -1
  204. package/dist/esm/utils/browser-buffer.js +67 -0
  205. package/dist/esm/utils/datetime.js +493 -0
  206. package/dist/esm/utils/encryptor.browser.js +237 -0
  207. package/dist/esm/utils/parse-sax.js +1188 -12
  208. package/dist/esm/utils/stream-buf.browser.js +352 -0
  209. package/dist/esm/utils/unzip/zip-parser.js +11 -0
  210. package/dist/esm/utils/utils.base.js +142 -0
  211. package/dist/esm/utils/utils.browser.js +68 -0
  212. package/dist/esm/utils/utils.js +15 -123
  213. package/dist/esm/utils/zip/compress.base.js +83 -0
  214. package/dist/esm/utils/zip/compress.browser.js +121 -0
  215. package/dist/esm/utils/zip/compress.js +16 -164
  216. package/dist/esm/utils/zip/crc32.browser.js +82 -0
  217. package/dist/esm/utils/zip/deflate-fallback.js +570 -0
  218. package/dist/esm/utils/zip/streaming-zip.js +259 -0
  219. package/dist/esm/utils/zip-stream.browser.js +132 -0
  220. package/dist/esm/xlsx/xform/pivot-table/pivot-table-xform.js +2 -3
  221. package/dist/esm/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js +2 -3
  222. package/dist/esm/xlsx/xform/sheet/col-breaks-xform.js +35 -0
  223. package/dist/esm/xlsx/xform/sheet/page-breaks-xform.js +13 -1
  224. package/dist/esm/xlsx/xform/sheet/row-breaks-xform.js +11 -13
  225. package/dist/esm/xlsx/xform/sheet/worksheet-xform.js +7 -2
  226. package/dist/esm/xlsx/xlsx.base.js +739 -0
  227. package/dist/esm/xlsx/xlsx.browser.js +159 -0
  228. package/dist/esm/xlsx/xlsx.js +114 -888
  229. package/dist/types/csv/csv-core.d.ts +207 -0
  230. package/dist/types/csv/csv-stream.d.ts +114 -0
  231. package/dist/types/csv/csv.base.d.ts +62 -0
  232. package/dist/types/csv/csv.browser.d.ts +33 -0
  233. package/dist/types/csv/csv.d.ts +97 -71
  234. package/dist/types/doc/anchor.d.ts +1 -1
  235. package/dist/types/doc/cell.d.ts +7 -7
  236. package/dist/types/doc/column.d.ts +9 -3
  237. package/dist/types/doc/defined-names.d.ts +4 -4
  238. package/dist/types/doc/image.d.ts +2 -2
  239. package/dist/types/doc/modelcontainer.d.ts +1 -1
  240. package/dist/types/doc/pivot-table.d.ts +1 -1
  241. package/dist/types/doc/range.d.ts +1 -1
  242. package/dist/types/doc/row.d.ts +3 -3
  243. package/dist/types/doc/table.d.ts +2 -2
  244. package/dist/types/doc/workbook.base.d.ts +111 -0
  245. package/dist/types/doc/workbook.browser.d.ts +38 -0
  246. package/dist/types/doc/workbook.d.ts +62 -92
  247. package/dist/types/doc/worksheet.d.ts +12 -10
  248. package/dist/types/index.browser.d.ts +19 -5
  249. package/dist/types/index.d.ts +24 -23
  250. package/dist/types/local.d.ts +0 -1
  251. package/dist/types/stream/xlsx/hyperlink-reader.d.ts +1 -1
  252. package/dist/types/stream/xlsx/workbook-reader.d.ts +4 -4
  253. package/dist/types/stream/xlsx/workbook-writer.d.ts +7 -7
  254. package/dist/types/stream/xlsx/worksheet-reader.d.ts +5 -5
  255. package/dist/types/stream/xlsx/worksheet-writer.d.ts +11 -9
  256. package/dist/types/types.d.ts +6 -0
  257. package/dist/types/utils/browser-buffer.d.ts +28 -0
  258. package/dist/types/utils/col-cache.d.ts +1 -1
  259. package/dist/types/utils/datetime.d.ts +56 -0
  260. package/dist/types/utils/encryptor.browser.d.ts +28 -0
  261. package/dist/types/utils/parse-sax.d.ts +108 -1
  262. package/dist/types/utils/sheet-utils.d.ts +3 -3
  263. package/dist/types/utils/stream-buf.browser.d.ts +41 -0
  264. package/dist/types/utils/unzip/extract.d.ts +6 -6
  265. package/dist/types/utils/unzip/index.d.ts +8 -8
  266. package/dist/types/utils/unzip/parse.d.ts +3 -3
  267. package/dist/types/utils/unzip/zip-parser.d.ts +5 -0
  268. package/dist/types/utils/utils.base.d.ts +29 -0
  269. package/dist/types/utils/utils.browser.d.ts +29 -0
  270. package/dist/types/utils/utils.d.ts +6 -25
  271. package/dist/types/utils/zip/compress.base.d.ts +45 -0
  272. package/dist/types/utils/zip/compress.browser.d.ts +63 -0
  273. package/dist/types/utils/zip/compress.d.ts +13 -45
  274. package/dist/types/utils/zip/crc32.browser.d.ts +52 -0
  275. package/dist/types/utils/zip/deflate-fallback.d.ts +39 -0
  276. package/dist/types/utils/zip/index.d.ts +5 -5
  277. package/dist/types/utils/zip/streaming-zip.d.ts +96 -0
  278. package/dist/types/utils/zip/zip-builder.d.ts +1 -1
  279. package/dist/types/utils/zip-stream.browser.d.ts +39 -0
  280. package/dist/types/xlsx/xform/base-xform.d.ts +1 -1
  281. package/dist/types/xlsx/xform/book/defined-name-xform.d.ts +1 -1
  282. package/dist/types/xlsx/xform/book/sheet-xform.d.ts +1 -1
  283. package/dist/types/xlsx/xform/book/workbook-calc-properties-xform.d.ts +1 -1
  284. package/dist/types/xlsx/xform/book/workbook-pivot-cache-xform.d.ts +1 -1
  285. package/dist/types/xlsx/xform/book/workbook-properties-xform.d.ts +1 -1
  286. package/dist/types/xlsx/xform/book/workbook-view-xform.d.ts +1 -1
  287. package/dist/types/xlsx/xform/book/workbook-xform.d.ts +2 -2
  288. package/dist/types/xlsx/xform/comment/comment-xform.d.ts +2 -2
  289. package/dist/types/xlsx/xform/comment/comments-xform.d.ts +2 -2
  290. package/dist/types/xlsx/xform/comment/style/vml-position-xform.d.ts +1 -1
  291. package/dist/types/xlsx/xform/comment/style/vml-protection-xform.d.ts +1 -1
  292. package/dist/types/xlsx/xform/comment/vml-anchor-xform.d.ts +1 -1
  293. package/dist/types/xlsx/xform/comment/vml-client-data-xform.d.ts +1 -1
  294. package/dist/types/xlsx/xform/comment/vml-notes-xform.d.ts +1 -1
  295. package/dist/types/xlsx/xform/comment/vml-shape-xform.d.ts +1 -1
  296. package/dist/types/xlsx/xform/comment/vml-textbox-xform.d.ts +1 -1
  297. package/dist/types/xlsx/xform/composite-xform.d.ts +1 -1
  298. package/dist/types/xlsx/xform/core/app-heading-pairs-xform.d.ts +1 -1
  299. package/dist/types/xlsx/xform/core/app-titles-of-parts-xform.d.ts +1 -1
  300. package/dist/types/xlsx/xform/core/app-xform.d.ts +1 -1
  301. package/dist/types/xlsx/xform/core/content-types-xform.d.ts +1 -1
  302. package/dist/types/xlsx/xform/core/core-xform.d.ts +1 -1
  303. package/dist/types/xlsx/xform/core/relationship-xform.d.ts +1 -1
  304. package/dist/types/xlsx/xform/core/relationships-xform.d.ts +1 -1
  305. package/dist/types/xlsx/xform/drawing/base-cell-anchor-xform.d.ts +1 -1
  306. package/dist/types/xlsx/xform/drawing/blip-fill-xform.d.ts +2 -2
  307. package/dist/types/xlsx/xform/drawing/blip-xform.d.ts +1 -1
  308. package/dist/types/xlsx/xform/drawing/c-nv-pic-pr-xform.d.ts +1 -1
  309. package/dist/types/xlsx/xform/drawing/c-nv-pr-xform.d.ts +1 -1
  310. package/dist/types/xlsx/xform/drawing/cell-position-xform.d.ts +2 -2
  311. package/dist/types/xlsx/xform/drawing/drawing-xform.d.ts +1 -1
  312. package/dist/types/xlsx/xform/drawing/ext-lst-xform.d.ts +1 -1
  313. package/dist/types/xlsx/xform/drawing/ext-xform.d.ts +1 -1
  314. package/dist/types/xlsx/xform/drawing/hlink-click-xform.d.ts +1 -1
  315. package/dist/types/xlsx/xform/drawing/nv-pic-pr-xform.d.ts +1 -1
  316. package/dist/types/xlsx/xform/drawing/one-cell-anchor-xform.d.ts +1 -1
  317. package/dist/types/xlsx/xform/drawing/pic-xform.d.ts +1 -1
  318. package/dist/types/xlsx/xform/drawing/two-cell-anchor-xform.d.ts +1 -1
  319. package/dist/types/xlsx/xform/list-xform.d.ts +1 -1
  320. package/dist/types/xlsx/xform/pivot-table/cache-field-xform.d.ts +1 -1
  321. package/dist/types/xlsx/xform/pivot-table/pivot-cache-definition-xform.d.ts +3 -3
  322. package/dist/types/xlsx/xform/pivot-table/pivot-cache-records-xform.d.ts +2 -2
  323. package/dist/types/xlsx/xform/pivot-table/pivot-table-xform.d.ts +1 -1
  324. package/dist/types/xlsx/xform/sheet/auto-filter-xform.d.ts +1 -1
  325. package/dist/types/xlsx/xform/sheet/cell-xform.d.ts +1 -1
  326. package/dist/types/xlsx/xform/sheet/cf/cf-rule-xform.d.ts +6 -6
  327. package/dist/types/xlsx/xform/sheet/cf/cfvo-xform.d.ts +1 -1
  328. package/dist/types/xlsx/xform/sheet/cf/color-scale-xform.d.ts +3 -3
  329. package/dist/types/xlsx/xform/sheet/cf/conditional-formatting-xform.d.ts +1 -1
  330. package/dist/types/xlsx/xform/sheet/cf/conditional-formattings-xform.d.ts +2 -2
  331. package/dist/types/xlsx/xform/sheet/cf/databar-xform.d.ts +3 -3
  332. package/dist/types/xlsx/xform/sheet/cf/ext-lst-ref-xform.d.ts +1 -1
  333. package/dist/types/xlsx/xform/sheet/cf/formula-xform.d.ts +1 -1
  334. package/dist/types/xlsx/xform/sheet/cf/icon-set-xform.d.ts +2 -2
  335. package/dist/types/xlsx/xform/sheet/cf-ext/cf-icon-ext-xform.d.ts +1 -1
  336. package/dist/types/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.d.ts +3 -3
  337. package/dist/types/xlsx/xform/sheet/cf-ext/cfvo-ext-xform.d.ts +2 -2
  338. package/dist/types/xlsx/xform/sheet/cf-ext/conditional-formatting-ext-xform.d.ts +3 -3
  339. package/dist/types/xlsx/xform/sheet/cf-ext/conditional-formattings-ext-xform.d.ts +2 -2
  340. package/dist/types/xlsx/xform/sheet/cf-ext/databar-ext-xform.d.ts +3 -3
  341. package/dist/types/xlsx/xform/sheet/cf-ext/f-ext-xform.d.ts +1 -1
  342. package/dist/types/xlsx/xform/sheet/cf-ext/icon-set-ext-xform.d.ts +3 -3
  343. package/dist/types/xlsx/xform/sheet/cf-ext/sqref-ext-xform.d.ts +1 -1
  344. package/dist/types/xlsx/xform/sheet/col-breaks-xform.d.ts +16 -0
  345. package/dist/types/xlsx/xform/sheet/col-xform.d.ts +1 -1
  346. package/dist/types/xlsx/xform/sheet/data-validations-xform.d.ts +1 -1
  347. package/dist/types/xlsx/xform/sheet/dimension-xform.d.ts +1 -1
  348. package/dist/types/xlsx/xform/sheet/drawing-xform.d.ts +1 -1
  349. package/dist/types/xlsx/xform/sheet/ext-lst-xform.d.ts +1 -1
  350. package/dist/types/xlsx/xform/sheet/header-footer-xform.d.ts +1 -1
  351. package/dist/types/xlsx/xform/sheet/hyperlink-xform.d.ts +1 -1
  352. package/dist/types/xlsx/xform/sheet/merge-cell-xform.d.ts +1 -1
  353. package/dist/types/xlsx/xform/sheet/outline-properties-xform.d.ts +1 -1
  354. package/dist/types/xlsx/xform/sheet/page-breaks-xform.d.ts +5 -1
  355. package/dist/types/xlsx/xform/sheet/page-margins-xform.d.ts +1 -1
  356. package/dist/types/xlsx/xform/sheet/page-setup-properties-xform.d.ts +1 -1
  357. package/dist/types/xlsx/xform/sheet/page-setup-xform.d.ts +1 -1
  358. package/dist/types/xlsx/xform/sheet/picture-xform.d.ts +1 -1
  359. package/dist/types/xlsx/xform/sheet/print-options-xform.d.ts +1 -1
  360. package/dist/types/xlsx/xform/sheet/row-breaks-xform.d.ts +5 -1
  361. package/dist/types/xlsx/xform/sheet/row-xform.d.ts +1 -1
  362. package/dist/types/xlsx/xform/sheet/sheet-format-properties-xform.d.ts +1 -1
  363. package/dist/types/xlsx/xform/sheet/sheet-properties-xform.d.ts +1 -1
  364. package/dist/types/xlsx/xform/sheet/sheet-protection-xform.d.ts +1 -1
  365. package/dist/types/xlsx/xform/sheet/sheet-view-xform.d.ts +1 -1
  366. package/dist/types/xlsx/xform/sheet/table-part-xform.d.ts +1 -1
  367. package/dist/types/xlsx/xform/sheet/worksheet-xform.d.ts +1 -1
  368. package/dist/types/xlsx/xform/simple/boolean-xform.d.ts +1 -1
  369. package/dist/types/xlsx/xform/simple/date-xform.d.ts +1 -1
  370. package/dist/types/xlsx/xform/simple/float-xform.d.ts +1 -1
  371. package/dist/types/xlsx/xform/simple/integer-xform.d.ts +1 -1
  372. package/dist/types/xlsx/xform/simple/string-xform.d.ts +1 -1
  373. package/dist/types/xlsx/xform/static-xform.d.ts +1 -1
  374. package/dist/types/xlsx/xform/strings/phonetic-text-xform.d.ts +1 -1
  375. package/dist/types/xlsx/xform/strings/rich-text-xform.d.ts +3 -3
  376. package/dist/types/xlsx/xform/strings/shared-string-xform.d.ts +1 -1
  377. package/dist/types/xlsx/xform/strings/shared-strings-xform.d.ts +2 -2
  378. package/dist/types/xlsx/xform/strings/text-xform.d.ts +1 -1
  379. package/dist/types/xlsx/xform/style/alignment-xform.d.ts +1 -1
  380. package/dist/types/xlsx/xform/style/border-xform.d.ts +2 -2
  381. package/dist/types/xlsx/xform/style/color-xform.d.ts +1 -1
  382. package/dist/types/xlsx/xform/style/dxf-xform.d.ts +1 -1
  383. package/dist/types/xlsx/xform/style/fill-xform.d.ts +2 -2
  384. package/dist/types/xlsx/xform/style/font-xform.d.ts +1 -1
  385. package/dist/types/xlsx/xform/style/numfmt-xform.d.ts +1 -1
  386. package/dist/types/xlsx/xform/style/protection-xform.d.ts +1 -1
  387. package/dist/types/xlsx/xform/style/style-xform.d.ts +3 -3
  388. package/dist/types/xlsx/xform/style/styles-xform.d.ts +2 -2
  389. package/dist/types/xlsx/xform/style/underline-xform.d.ts +1 -1
  390. package/dist/types/xlsx/xform/table/auto-filter-xform.d.ts +2 -2
  391. package/dist/types/xlsx/xform/table/custom-filter-xform.d.ts +1 -1
  392. package/dist/types/xlsx/xform/table/filter-column-xform.d.ts +2 -2
  393. package/dist/types/xlsx/xform/table/filter-xform.d.ts +1 -1
  394. package/dist/types/xlsx/xform/table/table-column-xform.d.ts +1 -1
  395. package/dist/types/xlsx/xform/table/table-style-info-xform.d.ts +1 -1
  396. package/dist/types/xlsx/xform/table/table-xform.d.ts +1 -1
  397. package/dist/types/xlsx/xlsx.base.d.ts +134 -0
  398. package/dist/types/xlsx/xlsx.browser.d.ts +31 -0
  399. package/dist/types/xlsx/xlsx.d.ts +20 -80
  400. package/package.json +16 -39
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.CellMatrix = void 0;
4
- const col_cache_js_1 = require("./col-cache");
4
+ const col_cache_1 = require("./col-cache");
5
5
  // Helper to check for prototype pollution
6
6
  function isSafeKey(key) {
7
7
  if (typeof key === "number") {
@@ -31,13 +31,13 @@ class CellMatrix {
31
31
  this.sheets = {};
32
32
  }
33
33
  addCell(addressStr) {
34
- this.addCellEx(col_cache_js_1.colCache.decodeEx(addressStr));
34
+ this.addCellEx(col_cache_1.colCache.decodeEx(addressStr));
35
35
  }
36
36
  getCell(addressStr) {
37
- return this.findCellEx(col_cache_js_1.colCache.decodeEx(addressStr), true);
37
+ return this.findCellEx(col_cache_1.colCache.decodeEx(addressStr), true);
38
38
  }
39
39
  findCell(addressStr) {
40
- return this.findCellEx(col_cache_js_1.colCache.decodeEx(addressStr), false);
40
+ return this.findCellEx(col_cache_1.colCache.decodeEx(addressStr), false);
41
41
  }
42
42
  findCellAt(sheetName, rowNumber, colNumber) {
43
43
  const sheet = this.sheets[sheetName];
@@ -73,7 +73,7 @@ class CellMatrix {
73
73
  const cell = row[colNumber] ||
74
74
  (row[colNumber] = {
75
75
  sheetName,
76
- address: col_cache_js_1.colCache.n2l(colNumber) + rowNumber,
76
+ address: col_cache_1.colCache.n2l(colNumber) + rowNumber,
77
77
  row: rowNumber,
78
78
  col: colNumber
79
79
  });
@@ -0,0 +1,499 @@
1
+ "use strict";
2
+ /**
3
+ * High-performance native date parsing and formatting utilities
4
+ *
5
+ * Zero external dependencies. Optimized for CSV batch processing.
6
+ * Uses character code operations and lookup tables for maximum speed.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.DateFormatter = exports.DateParser = void 0;
10
+ exports.getSupportedFormats = getSupportedFormats;
11
+ // ============================================================================
12
+ // Constants - Pre-computed lookup tables for zero-allocation operations
13
+ // ============================================================================
14
+ // Padding lookup (0-59 covers hours, minutes, seconds, and months/days)
15
+ const PAD2 = Array.from({ length: 60 }, (_, i) => (i < 10 ? `0${i}` : `${i}`));
16
+ // Character codes for fast comparison
17
+ const C_0 = 48;
18
+ const C_DASH = 45;
19
+ const C_SLASH = 47;
20
+ const C_COLON = 58;
21
+ const C_T = 84;
22
+ const C_SPACE = 32;
23
+ const C_Z = 90;
24
+ const C_PLUS = 43;
25
+ const C_DOT = 46;
26
+ // ============================================================================
27
+ // Low-level utilities (inlined for JIT optimization)
28
+ // ============================================================================
29
+ // Inline digit extraction - avoid function call overhead
30
+ // Using bitwise OR for integer coercion (faster than Math.floor)
31
+ const digit2 = (s, i) => ((s.charCodeAt(i) - C_0) * 10 + s.charCodeAt(i + 1) - C_0) | 0;
32
+ const digit4 = (s, i) => ((s.charCodeAt(i) - C_0) * 1000 +
33
+ (s.charCodeAt(i + 1) - C_0) * 100 +
34
+ (s.charCodeAt(i + 2) - C_0) * 10 +
35
+ s.charCodeAt(i + 3) -
36
+ C_0) |
37
+ 0;
38
+ // Days in month lookup (index 0 unused, 1-12 for Jan-Dec)
39
+ // Using 31 for Feb; actual validation done by Date constructor
40
+ const DAYS_IN_MONTH = [0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
41
+ function validateDate(y, m, d) {
42
+ // Fast bounds check using lookup table
43
+ if (m < 1 || m > 12 || d < 1 || d > DAYS_IN_MONTH[m]) {
44
+ return null;
45
+ }
46
+ const date = new Date(y, m - 1, d);
47
+ // Check for overflow (e.g., Feb 30 -> Mar 2)
48
+ return date.getMonth() === m - 1 ? date : null;
49
+ }
50
+ function validateDateTime(y, m, d, h, min, s) {
51
+ if (m < 1 || m > 12 || d < 1 || d > DAYS_IN_MONTH[m]) {
52
+ return null;
53
+ }
54
+ if (h > 23 || min > 59 || s > 59) {
55
+ return null;
56
+ }
57
+ return new Date(y, m - 1, d, h, min, s);
58
+ }
59
+ // ============================================================================
60
+ // Specialized parsers (length-based dispatch for speed)
61
+ // ============================================================================
62
+ // YYYY-MM-DD (10 chars)
63
+ function parseISO(s) {
64
+ if (s.charCodeAt(4) !== C_DASH || s.charCodeAt(7) !== C_DASH) {
65
+ return null;
66
+ }
67
+ return validateDate(digit4(s, 0), digit2(s, 5), digit2(s, 8));
68
+ }
69
+ // YYYY-MM-DDTHH:mm:ss (19 chars)
70
+ function parseISOT(s) {
71
+ if (s.charCodeAt(4) !== C_DASH ||
72
+ s.charCodeAt(7) !== C_DASH ||
73
+ s.charCodeAt(10) !== C_T ||
74
+ s.charCodeAt(13) !== C_COLON ||
75
+ s.charCodeAt(16) !== C_COLON) {
76
+ return null;
77
+ }
78
+ return validateDateTime(digit4(s, 0), digit2(s, 5), digit2(s, 8), digit2(s, 11), digit2(s, 14), digit2(s, 17));
79
+ }
80
+ // YYYY-MM-DD HH:mm:ss (19 chars, space separator)
81
+ function parseISOSpace(s) {
82
+ if (s.charCodeAt(4) !== C_DASH ||
83
+ s.charCodeAt(7) !== C_DASH ||
84
+ s.charCodeAt(10) !== C_SPACE ||
85
+ s.charCodeAt(13) !== C_COLON ||
86
+ s.charCodeAt(16) !== C_COLON) {
87
+ return null;
88
+ }
89
+ return validateDateTime(digit4(s, 0), digit2(s, 5), digit2(s, 8), digit2(s, 11), digit2(s, 14), digit2(s, 17));
90
+ }
91
+ // YYYY-MM-DDTHH:mm:ssZ (20 chars)
92
+ function parseISOZ(s) {
93
+ if (s.charCodeAt(19) !== C_Z) {
94
+ return null;
95
+ }
96
+ const d = new Date(s);
97
+ return isNaN(d.getTime()) ? null : d;
98
+ }
99
+ // YYYY-MM-DDTHH:mm:ss.SSSZ (24 chars)
100
+ function parseISOMsZ(s) {
101
+ if (s.charCodeAt(19) !== C_DOT || s.charCodeAt(23) !== C_Z) {
102
+ return null;
103
+ }
104
+ const d = new Date(s);
105
+ return isNaN(d.getTime()) ? null : d;
106
+ }
107
+ // YYYY-MM-DDTHH:mm:ss+HH:mm (25 chars)
108
+ function parseISOOffset(s) {
109
+ const c = s.charCodeAt(19);
110
+ if (c !== C_PLUS && c !== C_DASH) {
111
+ return null;
112
+ }
113
+ const d = new Date(s);
114
+ return isNaN(d.getTime()) ? null : d;
115
+ }
116
+ // YYYY-MM-DDTHH:mm:ss.SSS+HH:mm (29 chars)
117
+ function parseISOMsOffset(s) {
118
+ if (s.charCodeAt(19) !== C_DOT) {
119
+ return null;
120
+ }
121
+ const c = s.charCodeAt(23);
122
+ if (c !== C_PLUS && c !== C_DASH) {
123
+ return null;
124
+ }
125
+ const d = new Date(s);
126
+ return isNaN(d.getTime()) ? null : d;
127
+ }
128
+ // MM-DD-YYYY or MM/DD/YYYY (10 chars)
129
+ function parseUS(s) {
130
+ const sep = s.charCodeAt(2);
131
+ if ((sep !== C_DASH && sep !== C_SLASH) || s.charCodeAt(5) !== sep) {
132
+ return null;
133
+ }
134
+ return validateDate(digit4(s, 6), digit2(s, 0), digit2(s, 3));
135
+ }
136
+ // DD-MM-YYYY or DD/MM/YYYY (10 chars)
137
+ function parseEU(s) {
138
+ const sep = s.charCodeAt(2);
139
+ if ((sep !== C_DASH && sep !== C_SLASH) || s.charCodeAt(5) !== sep) {
140
+ return null;
141
+ }
142
+ return validateDate(digit4(s, 6), digit2(s, 3), digit2(s, 0));
143
+ }
144
+ // MM-DD-YYYY HH:mm:ss or MM/DD/YYYY HH:mm:ss (19 chars)
145
+ function parseUSTime(s) {
146
+ const sep = s.charCodeAt(2);
147
+ if ((sep !== C_DASH && sep !== C_SLASH) || s.charCodeAt(5) !== sep) {
148
+ return null;
149
+ }
150
+ if (s.charCodeAt(10) !== C_SPACE ||
151
+ s.charCodeAt(13) !== C_COLON ||
152
+ s.charCodeAt(16) !== C_COLON) {
153
+ return null;
154
+ }
155
+ return validateDateTime(digit4(s, 6), digit2(s, 0), digit2(s, 3), digit2(s, 11), digit2(s, 14), digit2(s, 17));
156
+ }
157
+ // DD-MM-YYYY HH:mm:ss or DD/MM/YYYY HH:mm:ss (19 chars)
158
+ function parseEUTime(s) {
159
+ const sep = s.charCodeAt(2);
160
+ if ((sep !== C_DASH && sep !== C_SLASH) || s.charCodeAt(5) !== sep) {
161
+ return null;
162
+ }
163
+ if (s.charCodeAt(10) !== C_SPACE ||
164
+ s.charCodeAt(13) !== C_COLON ||
165
+ s.charCodeAt(16) !== C_COLON) {
166
+ return null;
167
+ }
168
+ return validateDateTime(digit4(s, 6), digit2(s, 3), digit2(s, 0), digit2(s, 11), digit2(s, 14), digit2(s, 17));
169
+ }
170
+ const PARSERS = {
171
+ "YYYY-MM-DD": parseISO,
172
+ "YYYY-MM-DD[T]HH:mm:ss": parseISOT,
173
+ "YYYY-MM-DD HH:mm:ss": parseISOSpace,
174
+ "YYYY-MM-DD[T]HH:mm:ssZ": s => s.length === 20 ? parseISOZ(s) : s.length === 25 ? parseISOOffset(s) : null,
175
+ "YYYY-MM-DD[T]HH:mm:ss.SSSZ": s => s.length === 24 ? parseISOMsZ(s) : s.length === 29 ? parseISOMsOffset(s) : null,
176
+ "MM-DD-YYYY": parseUS,
177
+ "MM-DD-YYYY HH:mm:ss": parseUSTime,
178
+ "MM/DD/YYYY HH:mm:ss": parseUSTime,
179
+ "DD-MM-YYYY": parseEU,
180
+ "DD-MM-YYYY HH:mm:ss": parseEUTime,
181
+ "DD/MM/YYYY HH:mm:ss": parseEUTime
182
+ };
183
+ // Length-based auto-detection (ISO formats only, US/EU excluded due to ambiguity)
184
+ const AUTO_DETECT = [
185
+ [10, [parseISO]],
186
+ [19, [parseISOT, parseISOSpace]],
187
+ [20, [parseISOZ]],
188
+ [24, [parseISOMsZ]],
189
+ [25, [parseISOOffset]],
190
+ [29, [parseISOMsOffset]]
191
+ ];
192
+ // ============================================================================
193
+ // High-performance batch processors (class-based for state encapsulation)
194
+ // ============================================================================
195
+ /**
196
+ * Optimized date parser for batch processing
197
+ *
198
+ * @example
199
+ * const parser = DateParser.create(["YYYY-MM-DD"]);
200
+ * const dates = parser.parseAll(csvStrings);
201
+ */
202
+ class DateParser {
203
+ constructor(fns) {
204
+ /** Parse single value */
205
+ this.parse = (value) => {
206
+ if (!value) {
207
+ return null;
208
+ }
209
+ const s = value.trim();
210
+ if (!s) {
211
+ return null;
212
+ }
213
+ // Fast path for single parser
214
+ if (this.single) {
215
+ return this.fn0(s);
216
+ }
217
+ // Multi-parser path
218
+ for (let i = 0, len = this.fns.length; i < len; i++) {
219
+ const r = this.fns[i](s);
220
+ if (r) {
221
+ return r;
222
+ }
223
+ }
224
+ return null;
225
+ };
226
+ this.fns = fns;
227
+ this.single = fns.length === 1;
228
+ this.fn0 = fns[0];
229
+ }
230
+ /** Create parser for specific formats */
231
+ static create(formats) {
232
+ return new DateParser(formats.map(f => PARSERS[f]).filter(Boolean));
233
+ }
234
+ /** Create parser for auto-detecting ISO formats */
235
+ static iso() {
236
+ const fns = [];
237
+ for (const [, parsers] of AUTO_DETECT) {
238
+ fns.push(...parsers);
239
+ }
240
+ return new DateParser(fns);
241
+ }
242
+ /** Parse array of values */
243
+ parseAll(values) {
244
+ const len = values.length;
245
+ const out = new Array(len);
246
+ const parse = this.parse;
247
+ for (let i = 0; i < len; i++) {
248
+ out[i] = parse(values[i]);
249
+ }
250
+ return out;
251
+ }
252
+ /** Parse and filter valid dates */
253
+ parseValid(values) {
254
+ const out = [];
255
+ const parse = this.parse;
256
+ for (let i = 0, len = values.length; i < len; i++) {
257
+ const d = parse(values[i]);
258
+ if (d) {
259
+ out.push(d);
260
+ }
261
+ }
262
+ return out;
263
+ }
264
+ }
265
+ exports.DateParser = DateParser;
266
+ function tzOffset(d) {
267
+ const off = -d.getTimezoneOffset();
268
+ const sign = off >= 0 ? "+" : "-";
269
+ const h = (Math.abs(off) / 60) | 0; // Bitwise OR faster than Math.floor
270
+ const m = Math.abs(off) % 60;
271
+ return `${sign}${PAD2[h]}:${PAD2[m]}`;
272
+ }
273
+ /**
274
+ * Optimized date formatter for batch processing
275
+ *
276
+ * @example
277
+ * const formatter = DateFormatter.create("YYYY-MM-DD", { utc: true });
278
+ * const strings = formatter.formatAll(dates);
279
+ */
280
+ class DateFormatter {
281
+ constructor(fn) {
282
+ /** Format single date */
283
+ this.format = (date) => this.fn(date);
284
+ this.fn = fn;
285
+ }
286
+ /** Create ISO formatter (fastest) */
287
+ static iso(utc = false) {
288
+ // Direct string building is faster than toISOString() + slice
289
+ return utc
290
+ ? new DateFormatter(d => {
291
+ if (!(d instanceof Date)) {
292
+ return "";
293
+ }
294
+ const t = d.getTime();
295
+ if (t !== t) {
296
+ return "";
297
+ } // NaN check
298
+ const y = d.getUTCFullYear();
299
+ const M = d.getUTCMonth() + 1;
300
+ const D = d.getUTCDate();
301
+ const H = d.getUTCHours();
302
+ const m = d.getUTCMinutes();
303
+ const s = d.getUTCSeconds();
304
+ const ms = d.getUTCMilliseconds();
305
+ return `${y}-${PAD2[M]}-${PAD2[D]}T${PAD2[H]}:${PAD2[m]}:${PAD2[s]}.${ms < 10 ? "00" + ms : ms < 100 ? "0" + ms : ms}Z`;
306
+ })
307
+ : new DateFormatter(d => {
308
+ if (!(d instanceof Date)) {
309
+ return "";
310
+ }
311
+ const t = d.getTime();
312
+ if (t !== t) {
313
+ return "";
314
+ } // NaN check
315
+ const y = d.getFullYear();
316
+ const M = d.getMonth() + 1;
317
+ const D = d.getDate();
318
+ const H = d.getHours();
319
+ const m = d.getMinutes();
320
+ const s = d.getSeconds();
321
+ const ms = d.getMilliseconds();
322
+ return `${y}-${PAD2[M]}-${PAD2[D]}T${PAD2[H]}:${PAD2[m]}:${PAD2[s]}.${ms < 10 ? "00" + ms : ms < 100 ? "0" + ms : ms}${tzOffset(d)}`;
323
+ });
324
+ }
325
+ /** Create custom format formatter */
326
+ static create(format, options) {
327
+ const utc = options?.utc ?? false;
328
+ // Fast paths for common formats (no regex, direct string building)
329
+ if (format === "YYYY-MM-DD") {
330
+ return utc
331
+ ? new DateFormatter(d => {
332
+ if (!(d instanceof Date)) {
333
+ return "";
334
+ }
335
+ const t = d.getTime();
336
+ if (t !== t) {
337
+ return "";
338
+ }
339
+ return `${d.getUTCFullYear()}-${PAD2[d.getUTCMonth() + 1]}-${PAD2[d.getUTCDate()]}`;
340
+ })
341
+ : new DateFormatter(d => {
342
+ if (!(d instanceof Date)) {
343
+ return "";
344
+ }
345
+ const t = d.getTime();
346
+ if (t !== t) {
347
+ return "";
348
+ }
349
+ return `${d.getFullYear()}-${PAD2[d.getMonth() + 1]}-${PAD2[d.getDate()]}`;
350
+ });
351
+ }
352
+ if (format === "YYYY-MM-DD HH:mm:ss") {
353
+ return utc
354
+ ? new DateFormatter(d => {
355
+ if (!(d instanceof Date)) {
356
+ return "";
357
+ }
358
+ const t = d.getTime();
359
+ if (t !== t) {
360
+ return "";
361
+ }
362
+ return `${d.getUTCFullYear()}-${PAD2[d.getUTCMonth() + 1]}-${PAD2[d.getUTCDate()]} ${PAD2[d.getUTCHours()]}:${PAD2[d.getUTCMinutes()]}:${PAD2[d.getUTCSeconds()]}`;
363
+ })
364
+ : new DateFormatter(d => {
365
+ if (!(d instanceof Date)) {
366
+ return "";
367
+ }
368
+ const t = d.getTime();
369
+ if (t !== t) {
370
+ return "";
371
+ }
372
+ return `${d.getFullYear()}-${PAD2[d.getMonth() + 1]}-${PAD2[d.getDate()]} ${PAD2[d.getHours()]}:${PAD2[d.getMinutes()]}:${PAD2[d.getSeconds()]}`;
373
+ });
374
+ }
375
+ if (format === "MM-DD-YYYY" || format === "MM/DD/YYYY") {
376
+ const sep = format.charAt(2);
377
+ return utc
378
+ ? new DateFormatter(d => {
379
+ if (!(d instanceof Date)) {
380
+ return "";
381
+ }
382
+ const t = d.getTime();
383
+ if (t !== t) {
384
+ return "";
385
+ }
386
+ return `${PAD2[d.getUTCMonth() + 1]}${sep}${PAD2[d.getUTCDate()]}${sep}${d.getUTCFullYear()}`;
387
+ })
388
+ : new DateFormatter(d => {
389
+ if (!(d instanceof Date)) {
390
+ return "";
391
+ }
392
+ const t = d.getTime();
393
+ if (t !== t) {
394
+ return "";
395
+ }
396
+ return `${PAD2[d.getMonth() + 1]}${sep}${PAD2[d.getDate()]}${sep}${d.getFullYear()}`;
397
+ });
398
+ }
399
+ if (format === "DD-MM-YYYY" || format === "DD/MM/YYYY") {
400
+ const sep = format.charAt(2);
401
+ return utc
402
+ ? new DateFormatter(d => {
403
+ if (!(d instanceof Date)) {
404
+ return "";
405
+ }
406
+ const t = d.getTime();
407
+ if (t !== t) {
408
+ return "";
409
+ }
410
+ return `${PAD2[d.getUTCDate()]}${sep}${PAD2[d.getUTCMonth() + 1]}${sep}${d.getUTCFullYear()}`;
411
+ })
412
+ : new DateFormatter(d => {
413
+ if (!(d instanceof Date)) {
414
+ return "";
415
+ }
416
+ const t = d.getTime();
417
+ if (t !== t) {
418
+ return "";
419
+ }
420
+ return `${PAD2[d.getDate()]}${sep}${PAD2[d.getMonth() + 1]}${sep}${d.getFullYear()}`;
421
+ });
422
+ }
423
+ // Generic path with pre-compiled template
424
+ return DateFormatter.createGeneric(format, utc);
425
+ }
426
+ /** Generic formatter for arbitrary formats */
427
+ static createGeneric(format, utc) {
428
+ // Pre-process escaped sections
429
+ const esc = [];
430
+ const tpl = format.replace(/\[([^\]]*)\]/g, (_, c) => {
431
+ esc.push(c);
432
+ return `\x00${esc.length - 1}\x00`;
433
+ });
434
+ // Detect used tokens for conditional computation
435
+ const hasY = tpl.includes("YYYY");
436
+ const hasMs = tpl.includes("SSS");
437
+ const hasM = tpl.includes("MM");
438
+ const hasD = tpl.includes("DD");
439
+ const hasH = tpl.includes("HH");
440
+ const hasMin = tpl.includes("mm");
441
+ const hasS = tpl.includes("ss");
442
+ const hasZ = tpl.includes("Z");
443
+ return new DateFormatter(d => {
444
+ if (!(d instanceof Date)) {
445
+ return "";
446
+ }
447
+ const t = d.getTime();
448
+ if (t !== t) {
449
+ return "";
450
+ }
451
+ let out = tpl;
452
+ if (hasY) {
453
+ out = out.replace(/YYYY/g, String(utc ? d.getUTCFullYear() : d.getFullYear()));
454
+ }
455
+ if (hasMs) {
456
+ const ms = utc ? d.getUTCMilliseconds() : d.getMilliseconds();
457
+ out = out.replace(/SSS/g, ms < 10 ? `00${ms}` : ms < 100 ? `0${ms}` : String(ms));
458
+ }
459
+ if (hasM) {
460
+ out = out.replace(/MM/g, PAD2[utc ? d.getUTCMonth() + 1 : d.getMonth() + 1]);
461
+ }
462
+ if (hasD) {
463
+ out = out.replace(/DD/g, PAD2[utc ? d.getUTCDate() : d.getDate()]);
464
+ }
465
+ if (hasH) {
466
+ out = out.replace(/HH/g, PAD2[utc ? d.getUTCHours() : d.getHours()]);
467
+ }
468
+ if (hasMin) {
469
+ out = out.replace(/mm/g, PAD2[utc ? d.getUTCMinutes() : d.getMinutes()]);
470
+ }
471
+ if (hasS) {
472
+ out = out.replace(/ss/g, PAD2[utc ? d.getUTCSeconds() : d.getSeconds()]);
473
+ }
474
+ if (hasZ) {
475
+ out = out.replace(/Z/g, utc ? "Z" : tzOffset(d));
476
+ }
477
+ if (esc.length) {
478
+ // oxlint-disable-next-line no-control-regex
479
+ out = out.replace(/\x00(\d+)\x00/g, (_, i) => esc[+i]);
480
+ }
481
+ return out;
482
+ });
483
+ }
484
+ /** Format array of dates */
485
+ formatAll(dates) {
486
+ const len = dates.length;
487
+ const out = new Array(len);
488
+ const fn = this.fn;
489
+ for (let i = 0; i < len; i++) {
490
+ out[i] = fn(dates[i]);
491
+ }
492
+ return out;
493
+ }
494
+ }
495
+ exports.DateFormatter = DateFormatter;
496
+ /** Get supported format strings */
497
+ function getSupportedFormats() {
498
+ return Object.keys(PARSERS);
499
+ }