@cj-tech-master/excelts 9.2.1 → 9.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (383) hide show
  1. package/README.md +25 -2
  2. package/README_zh.md +29 -6
  3. package/dist/browser/index.browser.d.ts +1 -1
  4. package/dist/browser/index.browser.js +4 -0
  5. package/dist/browser/index.d.ts +1 -1
  6. package/dist/browser/index.js +4 -0
  7. package/dist/browser/modules/excel/cell.d.ts +17 -3
  8. package/dist/browser/modules/excel/cell.js +170 -22
  9. package/dist/browser/modules/excel/defined-names.d.ts +96 -1
  10. package/dist/browser/modules/excel/defined-names.js +411 -21
  11. package/dist/browser/modules/excel/image.d.ts +11 -0
  12. package/dist/browser/modules/excel/image.js +24 -1
  13. package/dist/browser/modules/excel/stream/workbook-reader.browser.d.ts +9 -3
  14. package/dist/browser/modules/excel/stream/workbook-reader.browser.js +14 -0
  15. package/dist/browser/modules/excel/stream/workbook-reader.d.ts +2 -1
  16. package/dist/browser/modules/excel/stream/workbook-writer.browser.d.ts +39 -5
  17. package/dist/browser/modules/excel/stream/workbook-writer.browser.js +48 -1
  18. package/dist/browser/modules/excel/stream/workbook-writer.d.ts +3 -2
  19. package/dist/browser/modules/excel/stream/worksheet-reader.js +17 -1
  20. package/dist/browser/modules/excel/stream/worksheet-writer.d.ts +39 -6
  21. package/dist/browser/modules/excel/stream/worksheet-writer.js +45 -5
  22. package/dist/browser/modules/excel/table.js +15 -2
  23. package/dist/browser/modules/excel/types.d.ts +133 -2
  24. package/dist/browser/modules/excel/utils/col-cache.d.ts +1 -0
  25. package/dist/browser/modules/excel/utils/col-cache.js +15 -0
  26. package/dist/browser/modules/excel/utils/drawing-utils.d.ts +3 -3
  27. package/dist/browser/modules/excel/utils/drawing-utils.js +4 -0
  28. package/dist/browser/modules/excel/utils/external-link-formula.d.ts +76 -0
  29. package/dist/browser/modules/excel/utils/external-link-formula.js +208 -0
  30. package/dist/browser/modules/excel/utils/iterate-stream.d.ts +9 -3
  31. package/dist/browser/modules/excel/utils/iterate-stream.js +3 -1
  32. package/dist/browser/modules/excel/utils/ooxml-paths.d.ts +19 -0
  33. package/dist/browser/modules/excel/utils/ooxml-paths.js +37 -2
  34. package/dist/browser/modules/excel/utils/shared-strings.d.ts +8 -3
  35. package/dist/browser/modules/excel/utils/shared-strings.js +21 -2
  36. package/dist/browser/modules/excel/utils/workbook-protection.d.ts +30 -0
  37. package/dist/browser/modules/excel/utils/workbook-protection.js +30 -0
  38. package/dist/browser/modules/excel/workbook.browser.d.ts +257 -6
  39. package/dist/browser/modules/excel/workbook.browser.js +318 -34
  40. package/dist/browser/modules/excel/workbook.d.ts +1 -1
  41. package/dist/browser/modules/excel/worksheet.d.ts +3 -1
  42. package/dist/browser/modules/excel/worksheet.js +21 -2
  43. package/dist/browser/modules/excel/xlsx/rel-type.d.ts +15 -0
  44. package/dist/browser/modules/excel/xlsx/rel-type.js +16 -1
  45. package/dist/browser/modules/excel/xlsx/xform/book/defined-name-xform.d.ts +6 -5
  46. package/dist/browser/modules/excel/xlsx/xform/book/defined-name-xform.js +21 -86
  47. package/dist/browser/modules/excel/xlsx/xform/book/external-link-xform.d.ts +84 -0
  48. package/dist/browser/modules/excel/xlsx/xform/book/external-link-xform.js +330 -0
  49. package/dist/browser/modules/excel/xlsx/xform/book/external-reference-xform.d.ts +17 -0
  50. package/dist/browser/modules/excel/xlsx/xform/book/external-reference-xform.js +24 -0
  51. package/dist/browser/modules/excel/xlsx/xform/book/workbook-calc-properties-xform.d.ts +3 -0
  52. package/dist/browser/modules/excel/xlsx/xform/book/workbook-calc-properties-xform.js +11 -2
  53. package/dist/browser/modules/excel/xlsx/xform/book/workbook-protection-xform.d.ts +20 -0
  54. package/dist/browser/modules/excel/xlsx/xform/book/workbook-protection-xform.js +66 -0
  55. package/dist/browser/modules/excel/xlsx/xform/book/workbook-xform.js +38 -5
  56. package/dist/browser/modules/excel/xlsx/xform/core/content-types-xform.js +19 -1
  57. package/dist/browser/modules/excel/xlsx/xform/core/metadata-xform.d.ts +56 -0
  58. package/dist/browser/modules/excel/xlsx/xform/core/metadata-xform.js +158 -0
  59. package/dist/browser/modules/excel/xlsx/xform/drawing/absolute-anchor-xform.d.ts +26 -0
  60. package/dist/browser/modules/excel/xlsx/xform/drawing/absolute-anchor-xform.js +105 -0
  61. package/dist/browser/modules/excel/xlsx/xform/drawing/base-cell-anchor-xform.js +3 -0
  62. package/dist/browser/modules/excel/xlsx/xform/drawing/drawing-xform.js +10 -2
  63. package/dist/browser/modules/excel/xlsx/xform/sheet/cell-xform.d.ts +1 -1
  64. package/dist/browser/modules/excel/xlsx/xform/sheet/cell-xform.js +166 -8
  65. package/dist/browser/modules/excel/xlsx/xform/sheet/data-validations-xform.js +1 -1
  66. package/dist/browser/modules/excel/xlsx/xform/sheet/ignored-errors-xform.d.ts +21 -0
  67. package/dist/browser/modules/excel/xlsx/xform/sheet/ignored-errors-xform.js +80 -0
  68. package/dist/browser/modules/excel/xlsx/xform/sheet/worksheet-xform.js +9 -4
  69. package/dist/browser/modules/excel/xlsx/xform/style/border-xform.js +4 -1
  70. package/dist/browser/modules/excel/xlsx/xlsx.browser.d.ts +172 -13
  71. package/dist/browser/modules/excel/xlsx/xlsx.browser.js +410 -20
  72. package/dist/browser/modules/excel/xlsx/xlsx.d.ts +7 -4
  73. package/dist/browser/modules/excel/xlsx/xlsx.js +4 -5
  74. package/dist/browser/modules/formula/compile/address-utils.d.ts +62 -0
  75. package/dist/browser/modules/formula/compile/address-utils.js +83 -0
  76. package/dist/browser/modules/formula/compile/binder.d.ts +42 -0
  77. package/dist/browser/modules/formula/compile/binder.js +487 -0
  78. package/dist/browser/modules/formula/compile/bound-ast.d.ts +230 -0
  79. package/dist/browser/modules/formula/compile/bound-ast.js +80 -0
  80. package/dist/browser/modules/formula/compile/compiled-formula.d.ts +137 -0
  81. package/dist/browser/modules/formula/compile/compiled-formula.js +383 -0
  82. package/dist/browser/modules/formula/compile/dependency-analysis.d.ts +93 -0
  83. package/dist/browser/modules/formula/compile/dependency-analysis.js +432 -0
  84. package/dist/browser/modules/formula/compile/structured-ref-utils.d.ts +93 -0
  85. package/dist/browser/modules/formula/compile/structured-ref-utils.js +136 -0
  86. package/dist/browser/modules/formula/default-syntax-probe.d.ts +79 -0
  87. package/dist/browser/modules/formula/default-syntax-probe.js +83 -0
  88. package/dist/browser/modules/formula/functions/_date-context.d.ts +4 -0
  89. package/dist/browser/modules/formula/functions/_date-context.js +29 -0
  90. package/dist/browser/modules/formula/functions/_shared.d.ts +121 -0
  91. package/dist/browser/modules/formula/functions/_shared.js +381 -0
  92. package/dist/browser/modules/formula/functions/conditional.d.ts +27 -0
  93. package/dist/browser/modules/formula/functions/conditional.js +343 -0
  94. package/dist/browser/modules/formula/functions/database.d.ts +37 -0
  95. package/dist/browser/modules/formula/functions/database.js +274 -0
  96. package/dist/browser/modules/formula/functions/date.d.ts +61 -0
  97. package/dist/browser/modules/formula/functions/date.js +855 -0
  98. package/dist/browser/modules/formula/functions/dynamic-array.d.ts +23 -0
  99. package/dist/browser/modules/formula/functions/dynamic-array.js +860 -0
  100. package/dist/browser/modules/formula/functions/engineering.d.ts +57 -0
  101. package/dist/browser/modules/formula/functions/engineering.js +1128 -0
  102. package/dist/browser/modules/formula/functions/financial.d.ts +202 -0
  103. package/dist/browser/modules/formula/functions/financial.js +2296 -0
  104. package/dist/browser/modules/formula/functions/lookup.d.ts +18 -0
  105. package/dist/browser/modules/formula/functions/lookup.js +886 -0
  106. package/dist/browser/modules/formula/functions/math.d.ts +114 -0
  107. package/dist/browser/modules/formula/functions/math.js +1406 -0
  108. package/dist/browser/modules/formula/functions/statistical.d.ts +193 -0
  109. package/dist/browser/modules/formula/functions/statistical.js +3390 -0
  110. package/dist/browser/modules/formula/functions/text.d.ts +86 -0
  111. package/dist/browser/modules/formula/functions/text.js +1845 -0
  112. package/dist/browser/modules/formula/host-registry.d.ts +53 -0
  113. package/dist/browser/modules/formula/host-registry.js +69 -0
  114. package/dist/browser/modules/formula/index.d.ts +39 -0
  115. package/dist/browser/modules/formula/index.js +49 -0
  116. package/dist/browser/modules/formula/install.d.ts +62 -0
  117. package/dist/browser/modules/formula/install.js +88 -0
  118. package/dist/browser/modules/formula/integration/apply-writeback-plan.d.ts +26 -0
  119. package/dist/browser/modules/formula/integration/apply-writeback-plan.js +210 -0
  120. package/dist/browser/modules/formula/integration/calculate-formulas-impl.d.ts +30 -0
  121. package/dist/browser/modules/formula/integration/calculate-formulas-impl.js +616 -0
  122. package/dist/browser/modules/formula/integration/calculate-formulas.d.ts +67 -0
  123. package/dist/browser/modules/formula/integration/calculate-formulas.js +68 -0
  124. package/dist/browser/modules/formula/integration/formula-instance.d.ts +64 -0
  125. package/dist/browser/modules/formula/integration/formula-instance.js +79 -0
  126. package/dist/browser/modules/formula/integration/workbook-adapter.d.ts +26 -0
  127. package/dist/browser/modules/formula/integration/workbook-adapter.js +324 -0
  128. package/dist/browser/modules/formula/integration/workbook-snapshot.d.ts +267 -0
  129. package/dist/browser/modules/formula/integration/workbook-snapshot.js +77 -0
  130. package/dist/browser/modules/formula/materialize/build-writeback-plan.d.ts +34 -0
  131. package/dist/browser/modules/formula/materialize/build-writeback-plan.js +473 -0
  132. package/dist/browser/modules/formula/materialize/spill-engine.d.ts +9 -0
  133. package/dist/browser/modules/formula/materialize/spill-engine.js +38 -0
  134. package/dist/browser/modules/formula/materialize/types.d.ts +179 -0
  135. package/dist/browser/modules/formula/materialize/types.js +29 -0
  136. package/dist/browser/modules/formula/materialize/writeback-plan.d.ts +167 -0
  137. package/dist/browser/modules/formula/materialize/writeback-plan.js +27 -0
  138. package/dist/browser/modules/formula/runtime/evaluator.d.ts +151 -0
  139. package/dist/browser/modules/formula/runtime/evaluator.js +2291 -0
  140. package/dist/browser/modules/formula/runtime/function-registry.d.ts +47 -0
  141. package/dist/browser/modules/formula/runtime/function-registry.js +840 -0
  142. package/dist/browser/modules/formula/runtime/values.d.ts +211 -0
  143. package/dist/browser/modules/formula/runtime/values.js +385 -0
  144. package/dist/browser/modules/formula/syntax/ast.d.ts +129 -0
  145. package/dist/browser/modules/formula/syntax/ast.js +28 -0
  146. package/dist/browser/modules/formula/syntax/parser.d.ts +18 -0
  147. package/dist/browser/modules/formula/syntax/parser.js +439 -0
  148. package/dist/browser/modules/formula/syntax/token-types.d.ts +153 -0
  149. package/dist/browser/modules/formula/syntax/token-types.js +59 -0
  150. package/dist/browser/modules/formula/syntax/tokenizer.d.ts +10 -0
  151. package/dist/browser/modules/formula/syntax/tokenizer.js +1074 -0
  152. package/dist/browser/modules/pdf/excel-bridge.js +9 -0
  153. package/dist/cjs/index.js +4 -0
  154. package/dist/cjs/modules/excel/cell.js +170 -22
  155. package/dist/cjs/modules/excel/defined-names.js +411 -21
  156. package/dist/cjs/modules/excel/image.js +24 -1
  157. package/dist/cjs/modules/excel/stream/workbook-reader.browser.js +14 -0
  158. package/dist/cjs/modules/excel/stream/workbook-writer.browser.js +48 -1
  159. package/dist/cjs/modules/excel/stream/worksheet-reader.js +17 -1
  160. package/dist/cjs/modules/excel/stream/worksheet-writer.js +45 -5
  161. package/dist/cjs/modules/excel/table.js +15 -2
  162. package/dist/cjs/modules/excel/utils/col-cache.js +15 -0
  163. package/dist/cjs/modules/excel/utils/drawing-utils.js +4 -0
  164. package/dist/cjs/modules/excel/utils/external-link-formula.js +212 -0
  165. package/dist/cjs/modules/excel/utils/iterate-stream.js +3 -1
  166. package/dist/cjs/modules/excel/utils/ooxml-paths.js +42 -2
  167. package/dist/cjs/modules/excel/utils/shared-strings.js +21 -2
  168. package/dist/cjs/modules/excel/utils/workbook-protection.js +33 -0
  169. package/dist/cjs/modules/excel/workbook.browser.js +318 -34
  170. package/dist/cjs/modules/excel/worksheet.js +20 -1
  171. package/dist/cjs/modules/excel/xlsx/rel-type.js +16 -1
  172. package/dist/cjs/modules/excel/xlsx/xform/book/defined-name-xform.js +21 -86
  173. package/dist/cjs/modules/excel/xlsx/xform/book/external-link-xform.js +333 -0
  174. package/dist/cjs/modules/excel/xlsx/xform/book/external-reference-xform.js +27 -0
  175. package/dist/cjs/modules/excel/xlsx/xform/book/workbook-calc-properties-xform.js +11 -2
  176. package/dist/cjs/modules/excel/xlsx/xform/book/workbook-protection-xform.js +69 -0
  177. package/dist/cjs/modules/excel/xlsx/xform/book/workbook-xform.js +38 -5
  178. package/dist/cjs/modules/excel/xlsx/xform/core/content-types-xform.js +18 -0
  179. package/dist/cjs/modules/excel/xlsx/xform/core/metadata-xform.js +161 -0
  180. package/dist/cjs/modules/excel/xlsx/xform/drawing/absolute-anchor-xform.js +108 -0
  181. package/dist/cjs/modules/excel/xlsx/xform/drawing/base-cell-anchor-xform.js +3 -0
  182. package/dist/cjs/modules/excel/xlsx/xform/drawing/drawing-xform.js +10 -2
  183. package/dist/cjs/modules/excel/xlsx/xform/sheet/cell-xform.js +166 -8
  184. package/dist/cjs/modules/excel/xlsx/xform/sheet/data-validations-xform.js +1 -1
  185. package/dist/cjs/modules/excel/xlsx/xform/sheet/ignored-errors-xform.js +83 -0
  186. package/dist/cjs/modules/excel/xlsx/xform/sheet/worksheet-xform.js +9 -4
  187. package/dist/cjs/modules/excel/xlsx/xform/style/border-xform.js +4 -1
  188. package/dist/cjs/modules/excel/xlsx/xlsx.browser.js +408 -18
  189. package/dist/cjs/modules/excel/xlsx/xlsx.js +4 -5
  190. package/dist/cjs/modules/formula/compile/address-utils.js +89 -0
  191. package/dist/cjs/modules/formula/compile/binder.js +489 -0
  192. package/dist/cjs/modules/formula/compile/bound-ast.js +68 -0
  193. package/dist/cjs/modules/formula/compile/compiled-formula.js +387 -0
  194. package/dist/cjs/modules/formula/compile/dependency-analysis.js +437 -0
  195. package/dist/cjs/modules/formula/compile/structured-ref-utils.js +141 -0
  196. package/dist/cjs/modules/formula/default-syntax-probe.js +87 -0
  197. package/dist/cjs/modules/formula/functions/_date-context.js +33 -0
  198. package/dist/cjs/modules/formula/functions/_shared.js +396 -0
  199. package/dist/cjs/modules/formula/functions/conditional.js +354 -0
  200. package/dist/cjs/modules/formula/functions/database.js +288 -0
  201. package/dist/cjs/modules/formula/functions/date.js +883 -0
  202. package/dist/cjs/modules/formula/functions/dynamic-array.js +881 -0
  203. package/dist/cjs/modules/formula/functions/engineering.js +1183 -0
  204. package/dist/cjs/modules/formula/functions/financial.js +2348 -0
  205. package/dist/cjs/modules/formula/functions/lookup.js +902 -0
  206. package/dist/cjs/modules/formula/functions/math.js +1487 -0
  207. package/dist/cjs/modules/formula/functions/statistical.js +3488 -0
  208. package/dist/cjs/modules/formula/functions/text.js +1889 -0
  209. package/dist/cjs/modules/formula/host-registry.js +75 -0
  210. package/dist/cjs/modules/formula/index.js +58 -0
  211. package/dist/cjs/modules/formula/install.js +93 -0
  212. package/dist/cjs/modules/formula/integration/apply-writeback-plan.js +213 -0
  213. package/dist/cjs/modules/formula/integration/calculate-formulas-impl.js +619 -0
  214. package/dist/cjs/modules/formula/integration/calculate-formulas.js +71 -0
  215. package/dist/cjs/modules/formula/integration/formula-instance.js +82 -0
  216. package/dist/cjs/modules/formula/integration/workbook-adapter.js +327 -0
  217. package/dist/cjs/modules/formula/integration/workbook-snapshot.js +84 -0
  218. package/dist/cjs/modules/formula/materialize/build-writeback-plan.js +475 -0
  219. package/dist/cjs/modules/formula/materialize/spill-engine.js +42 -0
  220. package/dist/cjs/modules/formula/materialize/types.js +32 -0
  221. package/dist/cjs/modules/formula/materialize/writeback-plan.js +28 -0
  222. package/dist/cjs/modules/formula/runtime/evaluator.js +2298 -0
  223. package/dist/cjs/modules/formula/runtime/function-registry.js +846 -0
  224. package/dist/cjs/modules/formula/runtime/values.js +385 -0
  225. package/dist/cjs/modules/formula/syntax/ast.js +8 -0
  226. package/dist/cjs/modules/formula/syntax/parser.js +440 -0
  227. package/dist/cjs/modules/formula/syntax/token-types.js +32 -0
  228. package/dist/cjs/modules/formula/syntax/tokenizer.js +1076 -0
  229. package/dist/cjs/modules/pdf/excel-bridge.js +9 -0
  230. package/dist/esm/index.browser.js +4 -0
  231. package/dist/esm/index.js +4 -0
  232. package/dist/esm/modules/excel/cell.js +170 -22
  233. package/dist/esm/modules/excel/defined-names.js +411 -21
  234. package/dist/esm/modules/excel/image.js +24 -1
  235. package/dist/esm/modules/excel/stream/workbook-reader.browser.js +14 -0
  236. package/dist/esm/modules/excel/stream/workbook-writer.browser.js +48 -1
  237. package/dist/esm/modules/excel/stream/worksheet-reader.js +17 -1
  238. package/dist/esm/modules/excel/stream/worksheet-writer.js +45 -5
  239. package/dist/esm/modules/excel/table.js +15 -2
  240. package/dist/esm/modules/excel/utils/col-cache.js +15 -0
  241. package/dist/esm/modules/excel/utils/drawing-utils.js +4 -0
  242. package/dist/esm/modules/excel/utils/external-link-formula.js +208 -0
  243. package/dist/esm/modules/excel/utils/iterate-stream.js +3 -1
  244. package/dist/esm/modules/excel/utils/ooxml-paths.js +37 -2
  245. package/dist/esm/modules/excel/utils/shared-strings.js +21 -2
  246. package/dist/esm/modules/excel/utils/workbook-protection.js +30 -0
  247. package/dist/esm/modules/excel/workbook.browser.js +318 -34
  248. package/dist/esm/modules/excel/worksheet.js +21 -2
  249. package/dist/esm/modules/excel/xlsx/rel-type.js +16 -1
  250. package/dist/esm/modules/excel/xlsx/xform/book/defined-name-xform.js +21 -86
  251. package/dist/esm/modules/excel/xlsx/xform/book/external-link-xform.js +330 -0
  252. package/dist/esm/modules/excel/xlsx/xform/book/external-reference-xform.js +24 -0
  253. package/dist/esm/modules/excel/xlsx/xform/book/workbook-calc-properties-xform.js +11 -2
  254. package/dist/esm/modules/excel/xlsx/xform/book/workbook-protection-xform.js +66 -0
  255. package/dist/esm/modules/excel/xlsx/xform/book/workbook-xform.js +38 -5
  256. package/dist/esm/modules/excel/xlsx/xform/core/content-types-xform.js +19 -1
  257. package/dist/esm/modules/excel/xlsx/xform/core/metadata-xform.js +158 -0
  258. package/dist/esm/modules/excel/xlsx/xform/drawing/absolute-anchor-xform.js +105 -0
  259. package/dist/esm/modules/excel/xlsx/xform/drawing/base-cell-anchor-xform.js +3 -0
  260. package/dist/esm/modules/excel/xlsx/xform/drawing/drawing-xform.js +10 -2
  261. package/dist/esm/modules/excel/xlsx/xform/sheet/cell-xform.js +166 -8
  262. package/dist/esm/modules/excel/xlsx/xform/sheet/data-validations-xform.js +1 -1
  263. package/dist/esm/modules/excel/xlsx/xform/sheet/ignored-errors-xform.js +80 -0
  264. package/dist/esm/modules/excel/xlsx/xform/sheet/worksheet-xform.js +9 -4
  265. package/dist/esm/modules/excel/xlsx/xform/style/border-xform.js +4 -1
  266. package/dist/esm/modules/excel/xlsx/xlsx.browser.js +410 -20
  267. package/dist/esm/modules/excel/xlsx/xlsx.js +4 -5
  268. package/dist/esm/modules/formula/compile/address-utils.js +83 -0
  269. package/dist/esm/modules/formula/compile/binder.js +487 -0
  270. package/dist/esm/modules/formula/compile/bound-ast.js +80 -0
  271. package/dist/esm/modules/formula/compile/compiled-formula.js +383 -0
  272. package/dist/esm/modules/formula/compile/dependency-analysis.js +432 -0
  273. package/dist/esm/modules/formula/compile/structured-ref-utils.js +136 -0
  274. package/dist/esm/modules/formula/default-syntax-probe.js +83 -0
  275. package/dist/esm/modules/formula/functions/_date-context.js +29 -0
  276. package/dist/esm/modules/formula/functions/_shared.js +381 -0
  277. package/dist/esm/modules/formula/functions/conditional.js +343 -0
  278. package/dist/esm/modules/formula/functions/database.js +274 -0
  279. package/dist/esm/modules/formula/functions/date.js +855 -0
  280. package/dist/esm/modules/formula/functions/dynamic-array.js +860 -0
  281. package/dist/esm/modules/formula/functions/engineering.js +1128 -0
  282. package/dist/esm/modules/formula/functions/financial.js +2296 -0
  283. package/dist/esm/modules/formula/functions/lookup.js +886 -0
  284. package/dist/esm/modules/formula/functions/math.js +1406 -0
  285. package/dist/esm/modules/formula/functions/statistical.js +3390 -0
  286. package/dist/esm/modules/formula/functions/text.js +1845 -0
  287. package/dist/esm/modules/formula/host-registry.js +69 -0
  288. package/dist/esm/modules/formula/index.js +49 -0
  289. package/dist/esm/modules/formula/install.js +88 -0
  290. package/dist/esm/modules/formula/integration/apply-writeback-plan.js +210 -0
  291. package/dist/esm/modules/formula/integration/calculate-formulas-impl.js +616 -0
  292. package/dist/esm/modules/formula/integration/calculate-formulas.js +68 -0
  293. package/dist/esm/modules/formula/integration/formula-instance.js +79 -0
  294. package/dist/esm/modules/formula/integration/workbook-adapter.js +324 -0
  295. package/dist/esm/modules/formula/integration/workbook-snapshot.js +77 -0
  296. package/dist/esm/modules/formula/materialize/build-writeback-plan.js +473 -0
  297. package/dist/esm/modules/formula/materialize/spill-engine.js +38 -0
  298. package/dist/esm/modules/formula/materialize/types.js +29 -0
  299. package/dist/esm/modules/formula/materialize/writeback-plan.js +27 -0
  300. package/dist/esm/modules/formula/runtime/evaluator.js +2291 -0
  301. package/dist/esm/modules/formula/runtime/function-registry.js +840 -0
  302. package/dist/esm/modules/formula/runtime/values.js +385 -0
  303. package/dist/esm/modules/formula/syntax/ast.js +28 -0
  304. package/dist/esm/modules/formula/syntax/parser.js +439 -0
  305. package/dist/esm/modules/formula/syntax/token-types.js +59 -0
  306. package/dist/esm/modules/formula/syntax/tokenizer.js +1074 -0
  307. package/dist/esm/modules/pdf/excel-bridge.js +9 -0
  308. package/dist/iife/excelts.iife.js +2302 -373
  309. package/dist/iife/excelts.iife.js.map +1 -1
  310. package/dist/iife/excelts.iife.min.js +34 -34
  311. package/dist/types/index.browser.d.ts +1 -1
  312. package/dist/types/index.d.ts +1 -1
  313. package/dist/types/modules/excel/cell.d.ts +17 -3
  314. package/dist/types/modules/excel/defined-names.d.ts +96 -1
  315. package/dist/types/modules/excel/image.d.ts +11 -0
  316. package/dist/types/modules/excel/stream/workbook-reader.browser.d.ts +9 -3
  317. package/dist/types/modules/excel/stream/workbook-reader.d.ts +2 -1
  318. package/dist/types/modules/excel/stream/workbook-writer.browser.d.ts +39 -5
  319. package/dist/types/modules/excel/stream/workbook-writer.d.ts +3 -2
  320. package/dist/types/modules/excel/stream/worksheet-writer.d.ts +39 -6
  321. package/dist/types/modules/excel/types.d.ts +133 -2
  322. package/dist/types/modules/excel/utils/col-cache.d.ts +1 -0
  323. package/dist/types/modules/excel/utils/drawing-utils.d.ts +3 -3
  324. package/dist/types/modules/excel/utils/external-link-formula.d.ts +76 -0
  325. package/dist/types/modules/excel/utils/iterate-stream.d.ts +9 -3
  326. package/dist/types/modules/excel/utils/ooxml-paths.d.ts +19 -0
  327. package/dist/types/modules/excel/utils/shared-strings.d.ts +8 -3
  328. package/dist/types/modules/excel/utils/workbook-protection.d.ts +30 -0
  329. package/dist/types/modules/excel/workbook.browser.d.ts +257 -6
  330. package/dist/types/modules/excel/workbook.d.ts +1 -1
  331. package/dist/types/modules/excel/worksheet.d.ts +3 -1
  332. package/dist/types/modules/excel/xlsx/rel-type.d.ts +15 -0
  333. package/dist/types/modules/excel/xlsx/xform/book/defined-name-xform.d.ts +6 -5
  334. package/dist/types/modules/excel/xlsx/xform/book/external-link-xform.d.ts +84 -0
  335. package/dist/types/modules/excel/xlsx/xform/book/external-reference-xform.d.ts +17 -0
  336. package/dist/types/modules/excel/xlsx/xform/book/workbook-calc-properties-xform.d.ts +3 -0
  337. package/dist/types/modules/excel/xlsx/xform/book/workbook-protection-xform.d.ts +20 -0
  338. package/dist/types/modules/excel/xlsx/xform/core/metadata-xform.d.ts +56 -0
  339. package/dist/types/modules/excel/xlsx/xform/drawing/absolute-anchor-xform.d.ts +26 -0
  340. package/dist/types/modules/excel/xlsx/xform/sheet/cell-xform.d.ts +1 -1
  341. package/dist/types/modules/excel/xlsx/xform/sheet/ignored-errors-xform.d.ts +21 -0
  342. package/dist/types/modules/excel/xlsx/xlsx.browser.d.ts +172 -13
  343. package/dist/types/modules/excel/xlsx/xlsx.d.ts +7 -4
  344. package/dist/types/modules/formula/compile/address-utils.d.ts +62 -0
  345. package/dist/types/modules/formula/compile/binder.d.ts +42 -0
  346. package/dist/types/modules/formula/compile/bound-ast.d.ts +230 -0
  347. package/dist/types/modules/formula/compile/compiled-formula.d.ts +137 -0
  348. package/dist/types/modules/formula/compile/dependency-analysis.d.ts +93 -0
  349. package/dist/types/modules/formula/compile/structured-ref-utils.d.ts +93 -0
  350. package/dist/types/modules/formula/default-syntax-probe.d.ts +79 -0
  351. package/dist/types/modules/formula/functions/_date-context.d.ts +4 -0
  352. package/dist/types/modules/formula/functions/_shared.d.ts +121 -0
  353. package/dist/types/modules/formula/functions/conditional.d.ts +27 -0
  354. package/dist/types/modules/formula/functions/database.d.ts +37 -0
  355. package/dist/types/modules/formula/functions/date.d.ts +61 -0
  356. package/dist/types/modules/formula/functions/dynamic-array.d.ts +23 -0
  357. package/dist/types/modules/formula/functions/engineering.d.ts +57 -0
  358. package/dist/types/modules/formula/functions/financial.d.ts +202 -0
  359. package/dist/types/modules/formula/functions/lookup.d.ts +18 -0
  360. package/dist/types/modules/formula/functions/math.d.ts +114 -0
  361. package/dist/types/modules/formula/functions/statistical.d.ts +193 -0
  362. package/dist/types/modules/formula/functions/text.d.ts +86 -0
  363. package/dist/types/modules/formula/host-registry.d.ts +53 -0
  364. package/dist/types/modules/formula/index.d.ts +39 -0
  365. package/dist/types/modules/formula/install.d.ts +62 -0
  366. package/dist/types/modules/formula/integration/apply-writeback-plan.d.ts +26 -0
  367. package/dist/types/modules/formula/integration/calculate-formulas-impl.d.ts +30 -0
  368. package/dist/types/modules/formula/integration/calculate-formulas.d.ts +67 -0
  369. package/dist/types/modules/formula/integration/formula-instance.d.ts +64 -0
  370. package/dist/types/modules/formula/integration/workbook-adapter.d.ts +26 -0
  371. package/dist/types/modules/formula/integration/workbook-snapshot.d.ts +267 -0
  372. package/dist/types/modules/formula/materialize/build-writeback-plan.d.ts +34 -0
  373. package/dist/types/modules/formula/materialize/spill-engine.d.ts +9 -0
  374. package/dist/types/modules/formula/materialize/types.d.ts +179 -0
  375. package/dist/types/modules/formula/materialize/writeback-plan.d.ts +167 -0
  376. package/dist/types/modules/formula/runtime/evaluator.d.ts +151 -0
  377. package/dist/types/modules/formula/runtime/function-registry.d.ts +47 -0
  378. package/dist/types/modules/formula/runtime/values.d.ts +211 -0
  379. package/dist/types/modules/formula/syntax/ast.d.ts +129 -0
  380. package/dist/types/modules/formula/syntax/parser.d.ts +18 -0
  381. package/dist/types/modules/formula/syntax/token-types.d.ts +153 -0
  382. package/dist/types/modules/formula/syntax/tokenizer.d.ts +10 -0
  383. package/package.json +28 -28
@@ -0,0 +1,840 @@
1
+ /**
2
+ * Function Registry — Declarative function descriptors and native implementations.
3
+ *
4
+ * Each function is described by a `FunctionDescriptor` that carries metadata
5
+ * about arity and the implementation itself. The evaluator uses this metadata
6
+ * to validate arguments and invoke functions.
7
+ *
8
+ * Special forms (IF, LET, LAMBDA, etc.) are NOT registered here — they
9
+ * are handled directly by the evaluator's special-form dispatch.
10
+ */
11
+ import { stripFunctionPrefix } from "../syntax/token-types.js";
12
+ import { RVKind, BLANK, ERRORS, rvBoolean, rvNumber, rvString, topLeft } from "./values.js";
13
+ // ============================================================================
14
+ // Registry
15
+ // ============================================================================
16
+ /**
17
+ * The function registry.
18
+ *
19
+ * Maps uppercase canonical function names to their descriptors.
20
+ * Also handles _XLFN. and _XLFN._XLWS. prefix variants.
21
+ */
22
+ const registryMap = new Map();
23
+ /**
24
+ * Register a function descriptor. The descriptor is stored under its
25
+ * canonical (unprefixed) name only — `_XLFN.` / `_XLFN._XLWS.` prefix
26
+ * variants are resolved dynamically in `lookupFunction`. This keeps the
27
+ * registry small and avoids triple-entry bookkeeping for 200+ functions.
28
+ */
29
+ export function registerFunction(desc) {
30
+ registryMap.set(desc.name, desc);
31
+ }
32
+ /**
33
+ * Look up a function by uppercase name. Accepts `_XLFN.` and
34
+ * `_XLFN._XLWS.` prefixed variants by stripping the prefix before lookup
35
+ * (a no-op for plain names, so plain lookups also go through a single
36
+ * Map.get call — avoiding the double-lookup pattern used previously).
37
+ */
38
+ export function lookupFunction(name) {
39
+ return registryMap.get(stripFunctionPrefix(name));
40
+ }
41
+ /**
42
+ * Convenience: define and register an eager function.
43
+ */
44
+ export function defineEager(name, minArity, maxArity, invoke) {
45
+ const desc = {
46
+ name,
47
+ minArity,
48
+ maxArity,
49
+ invoke
50
+ };
51
+ registerFunction(desc);
52
+ return desc;
53
+ }
54
+ // ============================================================================
55
+ // Registry Initialization
56
+ // ============================================================================
57
+ /**
58
+ * Initialize the registry with all native function implementations.
59
+ */
60
+ let initialized = false;
61
+ export function ensureRegistryInitialized() {
62
+ if (initialized) {
63
+ return;
64
+ }
65
+ initialized = true;
66
+ // Register native functions first — metadata + implementation co-located.
67
+ registerNativeInformationAndLogical();
68
+ registerNativeTextFunctions();
69
+ registerNativeDateFunctions();
70
+ registerNativeEngineeringFunctions();
71
+ registerNativeFinancialFunctions();
72
+ registerNativeStatisticalFunctions();
73
+ registerNativeMathFunctions();
74
+ registerNativeConditionalFunctions();
75
+ registerNativeLookupFunctions();
76
+ registerNativeDynamicArrayFunctions();
77
+ registerNativeDatabaseFunctions();
78
+ }
79
+ // ============================================================================
80
+ // Native Function Implementations
81
+ // ============================================================================
82
+ /**
83
+ * Register native implementations for information and logical functions.
84
+ * Metadata and implementation are co-located as the single source of truth.
85
+ */
86
+ function registerNativeInformationAndLogical() {
87
+ const scalar = (args) => topLeft(args[0] ?? BLANK);
88
+ // ── Information ──
89
+ defineEager("ISNUMBER", 1, 1, args => rvBoolean(scalar(args).kind === RVKind.Number));
90
+ defineEager("ISTEXT", 1, 1, args => rvBoolean(scalar(args).kind === RVKind.String));
91
+ defineEager("ISBLANK", 1, 1, args => rvBoolean(scalar(args).kind === RVKind.Blank));
92
+ defineEager("ISLOGICAL", 1, 1, args => rvBoolean(scalar(args).kind === RVKind.Boolean));
93
+ defineEager("ISERROR", 1, 1, args => rvBoolean(scalar(args).kind === RVKind.Error));
94
+ defineEager("ISERR", 1, 1, args => {
95
+ const v = scalar(args);
96
+ return rvBoolean(v.kind === RVKind.Error && v.code !== "#N/A");
97
+ });
98
+ defineEager("ISNA", 1, 1, args => {
99
+ const v = scalar(args);
100
+ return rvBoolean(v.kind === RVKind.Error && v.code === "#N/A");
101
+ });
102
+ defineEager("ISNONTEXT", 1, 1, args => rvBoolean(scalar(args).kind !== RVKind.String));
103
+ defineEager("ISEVEN", 1, 1, args => {
104
+ const v = scalar(args);
105
+ if (v.kind === RVKind.Error) {
106
+ return v;
107
+ }
108
+ if (v.kind !== RVKind.Number) {
109
+ return ERRORS.VALUE;
110
+ }
111
+ return rvBoolean(Math.floor(Math.abs(v.value)) % 2 === 0);
112
+ });
113
+ defineEager("ISODD", 1, 1, args => {
114
+ const v = scalar(args);
115
+ if (v.kind === RVKind.Error) {
116
+ return v;
117
+ }
118
+ if (v.kind !== RVKind.Number) {
119
+ return ERRORS.VALUE;
120
+ }
121
+ return rvBoolean(Math.floor(Math.abs(v.value)) % 2 === 1);
122
+ });
123
+ defineEager("N", 1, 1, args => {
124
+ const v = scalar(args);
125
+ if (v.kind === RVKind.Number) {
126
+ return v;
127
+ }
128
+ if (v.kind === RVKind.Boolean) {
129
+ return rvNumber(v.value ? 1 : 0);
130
+ }
131
+ if (v.kind === RVKind.Error) {
132
+ return v;
133
+ }
134
+ return rvNumber(0);
135
+ });
136
+ defineEager("TYPE", 1, 1, args => {
137
+ // Check for array BEFORE topLeft extraction
138
+ if (args[0]?.kind === RVKind.Array) {
139
+ return rvNumber(64);
140
+ }
141
+ const v = scalar(args);
142
+ switch (v.kind) {
143
+ case RVKind.Number:
144
+ return rvNumber(1);
145
+ case RVKind.String:
146
+ return rvNumber(2);
147
+ case RVKind.Boolean:
148
+ return rvNumber(4);
149
+ case RVKind.Error:
150
+ return rvNumber(16);
151
+ default:
152
+ return rvNumber(1);
153
+ }
154
+ });
155
+ defineEager("ERROR.TYPE", 1, 1, args => {
156
+ const v = scalar(args);
157
+ if (v.kind !== RVKind.Error) {
158
+ return ERRORS.NA;
159
+ }
160
+ const map = {
161
+ "#NULL!": 1,
162
+ "#DIV/0!": 2,
163
+ "#VALUE!": 3,
164
+ "#REF!": 4,
165
+ "#NAME?": 5,
166
+ "#NUM!": 6,
167
+ "#N/A": 7
168
+ };
169
+ return map[v.code] !== undefined ? rvNumber(map[v.code]) : ERRORS.NA;
170
+ });
171
+ defineEager("NA", 0, 0, () => ERRORS.NA);
172
+ // ── Stubs — limited implementations for functions that need runtime context ──
173
+ // INFO returns a handful of environment-describing strings. We implement
174
+ // the subset that's meaningful in a headless engine: `"release"` (engine
175
+ // version — we use "16.0" to pretend to be a modern Excel), `"system"`
176
+ // (the host OS string — the platform that loaded the workbook), and
177
+ // `"numfile"` / `"origin"` (which require UI context and are always
178
+ // `#N/A`).
179
+ defineEager("INFO", 1, 1, args => {
180
+ if (args.length === 0) {
181
+ return ERRORS.NA;
182
+ }
183
+ const t = args[0];
184
+ if (t.kind === RVKind.Error) {
185
+ return t;
186
+ }
187
+ const info = (t.kind === RVKind.String ? t.value : "").toLowerCase();
188
+ switch (info) {
189
+ case "release":
190
+ return rvString("16.0");
191
+ case "osversion":
192
+ return rvString(`${typeof process !== "undefined" && process.platform ? process.platform : "browser"}`);
193
+ case "system":
194
+ // Excel reports "pcdos" or "mac"; we map Node's platform string so
195
+ // tests that grep for these values behave consistently.
196
+ if (typeof process !== "undefined" && process.platform) {
197
+ return rvString(process.platform === "darwin" ? "mac" : "pcdos");
198
+ }
199
+ return rvString("pcdos");
200
+ case "recalc":
201
+ return rvString("Automatic");
202
+ case "directory":
203
+ case "numfile":
204
+ case "origin":
205
+ return ERRORS.NA;
206
+ default:
207
+ return ERRORS.VALUE;
208
+ }
209
+ });
210
+ // CELL: the evaluator intercepts CELL before this point and handles the
211
+ // supported info-type subset (address, row, col, contents, type, width,
212
+ // filename). This fallback only fires if an argument arrangement bypasses
213
+ // the interception — in which case #N/A matches Excel for unsupported info.
214
+ defineEager("CELL", 1, 2, () => ERRORS.NA);
215
+ // ISREF: the evaluator intercepts ISREF before this point and decides
216
+ // based on the raw BoundExpr / runtime ReferenceValue. This fallback only
217
+ // fires if an argument arrangement bypasses the interception — after
218
+ // dereferencing the answer is always false.
219
+ defineEager("ISREF", 1, 1, () => rvBoolean(false));
220
+ // SHEET/SHEETS: would need full workbook context — returns 1 as default
221
+ defineEager("SHEET", 0, 1, () => rvNumber(1));
222
+ defineEager("SHEETS", 0, 1, () => rvNumber(1));
223
+ // ISFORMULA / FORMULATEXT: need evaluator-level reference inspection.
224
+ // The evaluator intercepts these when the argument is a CellRef/AreaRef;
225
+ // these stubs only run when the argument has been dereferenced to a value,
226
+ // in which case the answer is false / #N/A respectively.
227
+ defineEager("ISFORMULA", 1, 1, () => rvBoolean(false));
228
+ defineEager("FORMULATEXT", 1, 1, () => ERRORS.NA);
229
+ // HYPERLINK: simplified semantics — return the friendly name if provided,
230
+ // otherwise the URL. The link behavior is outside the calculation engine.
231
+ defineEager("HYPERLINK", 1, 2, args => {
232
+ const display = args.length > 1 ? topLeft(args[1]) : topLeft(args[0]);
233
+ if (display.kind === RVKind.Error) {
234
+ return display;
235
+ }
236
+ if (display.kind === RVKind.Blank) {
237
+ // If friendly_name was an empty/blank cell, fall back to URL.
238
+ const url = topLeft(args[0]);
239
+ if (url.kind === RVKind.Error) {
240
+ return url;
241
+ }
242
+ return rvString(url.kind === RVKind.String ? url.value : String(url));
243
+ }
244
+ if (display.kind === RVKind.String) {
245
+ return display;
246
+ }
247
+ if (display.kind === RVKind.Number) {
248
+ return rvString(String(display.value));
249
+ }
250
+ if (display.kind === RVKind.Boolean) {
251
+ return rvString(display.value ? "TRUE" : "FALSE");
252
+ }
253
+ return rvString("");
254
+ });
255
+ // ── Logical ──
256
+ defineEager("NOT", 1, 1, args => {
257
+ const v = scalar(args);
258
+ if (v.kind === RVKind.Error) {
259
+ return v;
260
+ }
261
+ if (v.kind === RVKind.Boolean) {
262
+ return rvBoolean(!v.value);
263
+ }
264
+ if (v.kind === RVKind.Number) {
265
+ return rvBoolean(v.value === 0);
266
+ }
267
+ return ERRORS.VALUE;
268
+ });
269
+ defineEager("AND", 1, 255, args => boolAggregate(args, true, (cur, val) => cur && val));
270
+ defineEager("OR", 1, 255, args => boolAggregate(args, false, (cur, val) => cur || val));
271
+ defineEager("XOR", 1, 255, args => {
272
+ let count = 0;
273
+ let found = false;
274
+ for (const arg of args) {
275
+ const r = walkBoolArg(arg, v => {
276
+ // `found` must only flip when `walkBoolArg` actually visits a
277
+ // boolean-like cell. The previous code set it after every
278
+ // argument (even BLANK/empty ranges), so `XOR(A1, B1)` on two
279
+ // empty cells returned FALSE; Excel returns #VALUE!.
280
+ found = true;
281
+ if (v) {
282
+ count++;
283
+ }
284
+ });
285
+ if (r) {
286
+ return r;
287
+ }
288
+ }
289
+ return found ? rvBoolean(count % 2 === 1) : ERRORS.VALUE;
290
+ });
291
+ }
292
+ /**
293
+ * Helper: aggregate boolean args (for AND/OR).
294
+ */
295
+ function boolAggregate(args, init, combine) {
296
+ let result = init;
297
+ let found = false;
298
+ for (const arg of args) {
299
+ const err = walkBoolArg(arg, v => {
300
+ found = true;
301
+ result = combine(result, v);
302
+ });
303
+ if (err) {
304
+ return err;
305
+ }
306
+ }
307
+ return found ? rvBoolean(result) : ERRORS.VALUE;
308
+ }
309
+ /**
310
+ * Helper: walk a single argument for boolean aggregation.
311
+ * Returns an error value if one is encountered, otherwise undefined.
312
+ */
313
+ function walkBoolArg(arg, cb) {
314
+ if (arg.kind === RVKind.Error) {
315
+ return arg;
316
+ }
317
+ if (arg.kind === RVKind.Array) {
318
+ for (const row of arg.rows) {
319
+ for (const cell of row) {
320
+ if (cell.kind === RVKind.Error) {
321
+ return cell;
322
+ }
323
+ if (cell.kind === RVKind.Boolean) {
324
+ cb(cell.value);
325
+ }
326
+ else if (cell.kind === RVKind.Number) {
327
+ cb(cell.value !== 0);
328
+ }
329
+ }
330
+ }
331
+ return undefined;
332
+ }
333
+ const v = topLeft(arg);
334
+ if (v.kind === RVKind.Error) {
335
+ return v;
336
+ }
337
+ if (v.kind === RVKind.Boolean) {
338
+ cb(v.value);
339
+ }
340
+ else if (v.kind === RVKind.Number) {
341
+ cb(v.value !== 0);
342
+ }
343
+ else if (v.kind === RVKind.String) {
344
+ const upper = v.value.toUpperCase();
345
+ if (upper === "TRUE") {
346
+ cb(true);
347
+ }
348
+ else if (upper === "FALSE") {
349
+ cb(false);
350
+ }
351
+ else {
352
+ return ERRORS.VALUE;
353
+ }
354
+ }
355
+ else if (v.kind !== RVKind.Blank) {
356
+ return ERRORS.VALUE;
357
+ }
358
+ return undefined;
359
+ }
360
+ // ============================================================================
361
+ // Native Text Functions
362
+ // ============================================================================
363
+ import { fnCONCATENATE, fnCONCAT, fnTEXTJOIN, fnLEFT, fnRIGHT, fnMID, fnLEN, fnTRIM, fnLOWER, fnUPPER, fnPROPER, fnSUBSTITUTE, fnREPLACE, fnFIND, fnSEARCH, fnREPT, fnTEXT, fnVALUE, fnEXACT, fnCODE, fnCHAR, fnCLEAN, fnT, fnUNICHAR, fnUNICODE, fnBAHTTEXT, fnDOLLAR, fnFIXED, fnASC, fnDBCS, fnJIS, fnPHONETIC, fnNUMBERVALUE, fnTEXTBEFORE, fnTEXTAFTER, fnTEXTSPLIT, fnREGEXTEST, fnREGEXEXTRACT, fnREGEXREPLACE, fnVALUETOTEXT, fnARRAYTOTEXT, fnENCODEURL } from "../functions/text.js";
364
+ function registerNativeTextFunctions() {
365
+ defineEager("CONCATENATE", 1, 255, fnCONCATENATE);
366
+ defineEager("CONCAT", 1, 255, fnCONCAT);
367
+ defineEager("TEXTJOIN", 3, 255, fnTEXTJOIN);
368
+ defineEager("LEFT", 1, 2, fnLEFT);
369
+ defineEager("LEFTB", 1, 2, fnLEFT);
370
+ defineEager("RIGHT", 1, 2, fnRIGHT);
371
+ defineEager("RIGHTB", 1, 2, fnRIGHT);
372
+ defineEager("MID", 3, 3, fnMID);
373
+ defineEager("MIDB", 3, 3, fnMID);
374
+ defineEager("LEN", 1, 1, fnLEN);
375
+ defineEager("LENB", 1, 1, fnLEN);
376
+ defineEager("TRIM", 1, 1, fnTRIM);
377
+ defineEager("LOWER", 1, 1, fnLOWER);
378
+ defineEager("UPPER", 1, 1, fnUPPER);
379
+ defineEager("PROPER", 1, 1, fnPROPER);
380
+ defineEager("SUBSTITUTE", 3, 4, fnSUBSTITUTE);
381
+ defineEager("REPLACE", 4, 4, fnREPLACE);
382
+ defineEager("FIND", 2, 3, fnFIND);
383
+ defineEager("FINDB", 2, 3, fnFIND);
384
+ defineEager("SEARCH", 2, 3, fnSEARCH);
385
+ defineEager("SEARCHB", 2, 3, fnSEARCH);
386
+ defineEager("REPT", 2, 2, fnREPT);
387
+ defineEager("TEXT", 2, 2, fnTEXT);
388
+ defineEager("VALUE", 1, 1, fnVALUE);
389
+ defineEager("EXACT", 2, 2, fnEXACT);
390
+ defineEager("CODE", 1, 1, fnCODE);
391
+ defineEager("CHAR", 1, 1, fnCHAR);
392
+ defineEager("CLEAN", 1, 1, fnCLEAN);
393
+ defineEager("T", 1, 1, fnT);
394
+ defineEager("UNICHAR", 1, 1, fnUNICHAR);
395
+ defineEager("UNICODE", 1, 1, fnUNICODE);
396
+ defineEager("BAHTTEXT", 1, 1, fnBAHTTEXT);
397
+ defineEager("DOLLAR", 1, 2, fnDOLLAR);
398
+ defineEager("FIXED", 1, 3, fnFIXED);
399
+ defineEager("ASC", 1, 1, fnASC);
400
+ defineEager("DBCS", 1, 1, fnDBCS);
401
+ defineEager("JIS", 1, 1, fnJIS);
402
+ defineEager("PHONETIC", 1, 1, fnPHONETIC);
403
+ defineEager("NUMBERVALUE", 1, 3, fnNUMBERVALUE);
404
+ defineEager("TEXTBEFORE", 2, 6, fnTEXTBEFORE);
405
+ defineEager("TEXTAFTER", 2, 6, fnTEXTAFTER);
406
+ defineEager("TEXTSPLIT", 2, 6, fnTEXTSPLIT);
407
+ defineEager("REGEXTEST", 2, 3, fnREGEXTEST);
408
+ defineEager("REGEXEXTRACT", 2, 4, fnREGEXEXTRACT);
409
+ defineEager("REGEXREPLACE", 3, 5, fnREGEXREPLACE);
410
+ defineEager("VALUETOTEXT", 1, 2, fnVALUETOTEXT);
411
+ defineEager("ARRAYTOTEXT", 1, 2, fnARRAYTOTEXT);
412
+ defineEager("ENCODEURL", 1, 1, fnENCODEURL);
413
+ }
414
+ // ============================================================================
415
+ // Native Date Functions
416
+ // ============================================================================
417
+ import { fnTODAY, fnNOW, fnYEAR, fnMONTH, fnDAY, fnDATE, fnTIME, fnHOUR, fnMINUTE, fnSECOND, fnWEEKDAY, fnEOMONTH, fnEDATE, fnDATEDIF, fnDAYS, fnISOWEEKNUM, fnWEEKNUM, fnNETWORKDAYS, fnWORKDAY, fnYEARFRAC, fnDATEVALUE, fnTIMEVALUE, fnDAYS360, fnNETWORKDAYS_INTL, fnWORKDAY_INTL } from "../functions/date.js";
418
+ function registerNativeDateFunctions() {
419
+ defineEager("TODAY", 0, 0, fnTODAY);
420
+ defineEager("NOW", 0, 0, fnNOW);
421
+ defineEager("YEAR", 1, 1, fnYEAR);
422
+ defineEager("MONTH", 1, 1, fnMONTH);
423
+ defineEager("DAY", 1, 1, fnDAY);
424
+ defineEager("DATE", 3, 3, fnDATE);
425
+ defineEager("TIME", 3, 3, fnTIME);
426
+ defineEager("HOUR", 1, 1, fnHOUR);
427
+ defineEager("MINUTE", 1, 1, fnMINUTE);
428
+ defineEager("SECOND", 1, 1, fnSECOND);
429
+ defineEager("WEEKDAY", 1, 2, fnWEEKDAY);
430
+ defineEager("EOMONTH", 2, 2, fnEOMONTH);
431
+ defineEager("EDATE", 2, 2, fnEDATE);
432
+ defineEager("DATEDIF", 3, 3, fnDATEDIF);
433
+ defineEager("DAYS", 2, 2, fnDAYS);
434
+ defineEager("DAYS360", 2, 3, fnDAYS360);
435
+ defineEager("ISOWEEKNUM", 1, 1, fnISOWEEKNUM);
436
+ defineEager("WEEKNUM", 1, 2, fnWEEKNUM);
437
+ defineEager("NETWORKDAYS", 2, 3, fnNETWORKDAYS);
438
+ defineEager("NETWORKDAYS.INTL", 2, 4, fnNETWORKDAYS_INTL);
439
+ defineEager("WORKDAY", 2, 3, fnWORKDAY);
440
+ defineEager("WORKDAY.INTL", 2, 4, fnWORKDAY_INTL);
441
+ defineEager("YEARFRAC", 2, 3, fnYEARFRAC);
442
+ defineEager("DATEVALUE", 1, 1, fnDATEVALUE);
443
+ defineEager("TIMEVALUE", 1, 1, fnTIMEVALUE);
444
+ }
445
+ // ============================================================================
446
+ // Native Engineering Functions
447
+ // ============================================================================
448
+ import { fnBIN2DEC, fnDEC2BIN, fnHEX2DEC, fnDEC2HEX, fnOCT2DEC, fnDEC2OCT, fnDELTA, fnGESTEP, fnCOMPLEX, fnIMREAL, fnIMAGINARY, fnIMABS, fnIMARGUMENT, fnIMCONJUGATE, fnIMSUM, fnIMSUB, fnIMPRODUCT, fnIMDIV, fnIMPOWER, fnIMSQRT, fnIMLN, fnIMLOG2, fnIMLOG10, fnIMEXP, fnIMSIN, fnIMCOS, fnIMTAN, fnIMCSC, fnIMSEC, fnIMCOT, fnIMSINH, fnIMCOSH, fnIMTANH, fnIMCSCH, fnIMSECH, fnIMCOTH, fnBIN2HEX, fnBIN2OCT, fnHEX2BIN, fnHEX2OCT, fnOCT2BIN, fnOCT2HEX, fnBESSELJ, fnBESSELI, fnBESSELK, fnBESSELY, fnBITAND, fnBITOR, fnBITXOR, fnBITLSHIFT, fnBITRSHIFT } from "../functions/engineering.js";
449
+ function registerNativeEngineeringFunctions() {
450
+ defineEager("BIN2DEC", 1, 1, fnBIN2DEC);
451
+ defineEager("DEC2BIN", 1, 2, fnDEC2BIN);
452
+ defineEager("HEX2DEC", 1, 1, fnHEX2DEC);
453
+ defineEager("DEC2HEX", 1, 2, fnDEC2HEX);
454
+ defineEager("OCT2DEC", 1, 1, fnOCT2DEC);
455
+ defineEager("DEC2OCT", 1, 2, fnDEC2OCT);
456
+ defineEager("DELTA", 1, 2, fnDELTA);
457
+ defineEager("GESTEP", 1, 2, fnGESTEP);
458
+ defineEager("COMPLEX", 2, 3, fnCOMPLEX);
459
+ defineEager("IMREAL", 1, 1, fnIMREAL);
460
+ defineEager("IMAGINARY", 1, 1, fnIMAGINARY);
461
+ defineEager("IMABS", 1, 1, fnIMABS);
462
+ defineEager("IMARGUMENT", 1, 1, fnIMARGUMENT);
463
+ defineEager("IMCONJUGATE", 1, 1, fnIMCONJUGATE);
464
+ defineEager("IMSUM", 1, 255, fnIMSUM);
465
+ defineEager("IMSUB", 2, 2, fnIMSUB);
466
+ defineEager("IMPRODUCT", 1, 255, fnIMPRODUCT);
467
+ defineEager("IMDIV", 2, 2, fnIMDIV);
468
+ defineEager("IMPOWER", 2, 2, fnIMPOWER);
469
+ defineEager("IMSQRT", 1, 1, fnIMSQRT);
470
+ defineEager("IMLN", 1, 1, fnIMLN);
471
+ defineEager("IMLOG2", 1, 1, fnIMLOG2);
472
+ defineEager("IMLOG10", 1, 1, fnIMLOG10);
473
+ defineEager("IMEXP", 1, 1, fnIMEXP);
474
+ defineEager("IMSIN", 1, 1, fnIMSIN);
475
+ defineEager("IMCOS", 1, 1, fnIMCOS);
476
+ defineEager("IMTAN", 1, 1, fnIMTAN);
477
+ defineEager("IMCSC", 1, 1, fnIMCSC);
478
+ defineEager("IMSEC", 1, 1, fnIMSEC);
479
+ defineEager("IMCOT", 1, 1, fnIMCOT);
480
+ defineEager("IMSINH", 1, 1, fnIMSINH);
481
+ defineEager("IMCOSH", 1, 1, fnIMCOSH);
482
+ defineEager("IMTANH", 1, 1, fnIMTANH);
483
+ defineEager("IMCSCH", 1, 1, fnIMCSCH);
484
+ defineEager("IMSECH", 1, 1, fnIMSECH);
485
+ defineEager("IMCOTH", 1, 1, fnIMCOTH);
486
+ defineEager("BIN2HEX", 1, 2, fnBIN2HEX);
487
+ defineEager("BIN2OCT", 1, 2, fnBIN2OCT);
488
+ defineEager("HEX2BIN", 1, 2, fnHEX2BIN);
489
+ defineEager("HEX2OCT", 1, 2, fnHEX2OCT);
490
+ defineEager("OCT2BIN", 1, 2, fnOCT2BIN);
491
+ defineEager("OCT2HEX", 1, 2, fnOCT2HEX);
492
+ defineEager("BESSELJ", 2, 2, fnBESSELJ);
493
+ defineEager("BESSELI", 2, 2, fnBESSELI);
494
+ defineEager("BESSELK", 2, 2, fnBESSELK);
495
+ defineEager("BESSELY", 2, 2, fnBESSELY);
496
+ defineEager("BITAND", 2, 2, fnBITAND);
497
+ defineEager("BITOR", 2, 2, fnBITOR);
498
+ defineEager("BITXOR", 2, 2, fnBITXOR);
499
+ defineEager("BITLSHIFT", 2, 2, fnBITLSHIFT);
500
+ defineEager("BITRSHIFT", 2, 2, fnBITRSHIFT);
501
+ }
502
+ // ============================================================================
503
+ // Native Financial Functions
504
+ // ============================================================================
505
+ import { fnPMT, fnFV, fnPV, fnNPV, fnIRR, fnNPER, fnRATE, fnSLN, fnSYD, fnVDB, fnFVSCHEDULE, fnPDURATION, fnRRI, fnDB, fnDDB, fnIPMT, fnPPMT, fnEFFECT, fnNOMINAL, fnXNPV, fnXIRR, fnMIRR, fnISPMT, fnCUMPRINC, fnCUMIPMT, fnDOLLARDE, fnDOLLARFR, fnDISC, fnPRICEDISC, fnYIELDDISC, fnRECEIVED, fnINTRATE, fnPRICE, fnYIELD, fnDURATION, fnMDURATION, fnACCRINT, fnACCRINTM, fnTBILLPRICE, fnTBILLYIELD, fnTBILLEQ, fnPRICEMAT, fnYIELDMAT, fnCOUPNCD, fnCOUPPCD, fnCOUPNUM, fnCOUPDAYSNC, fnCOUPDAYBS, fnCOUPDAYS } from "../functions/financial.js";
506
+ function registerNativeFinancialFunctions() {
507
+ defineEager("PMT", 3, 5, fnPMT);
508
+ defineEager("FV", 3, 5, fnFV);
509
+ defineEager("PV", 3, 5, fnPV);
510
+ defineEager("NPV", 2, 255, fnNPV);
511
+ defineEager("IRR", 1, 2, fnIRR);
512
+ defineEager("NPER", 3, 5, fnNPER);
513
+ defineEager("RATE", 3, 6, fnRATE);
514
+ defineEager("SLN", 3, 3, fnSLN);
515
+ defineEager("SYD", 4, 4, fnSYD);
516
+ defineEager("VDB", 5, 7, fnVDB);
517
+ defineEager("FVSCHEDULE", 2, 2, fnFVSCHEDULE);
518
+ defineEager("PDURATION", 3, 3, fnPDURATION);
519
+ defineEager("RRI", 3, 3, fnRRI);
520
+ defineEager("DB", 4, 5, fnDB);
521
+ defineEager("DDB", 4, 5, fnDDB);
522
+ defineEager("IPMT", 4, 6, fnIPMT);
523
+ defineEager("PPMT", 4, 6, fnPPMT);
524
+ defineEager("EFFECT", 2, 2, fnEFFECT);
525
+ defineEager("NOMINAL", 2, 2, fnNOMINAL);
526
+ defineEager("XNPV", 3, 3, fnXNPV);
527
+ defineEager("XIRR", 2, 3, fnXIRR);
528
+ defineEager("MIRR", 3, 3, fnMIRR);
529
+ defineEager("ISPMT", 4, 4, fnISPMT);
530
+ defineEager("CUMPRINC", 6, 6, fnCUMPRINC);
531
+ defineEager("CUMIPMT", 6, 6, fnCUMIPMT);
532
+ defineEager("DOLLARDE", 2, 2, fnDOLLARDE);
533
+ defineEager("DOLLARFR", 2, 2, fnDOLLARFR);
534
+ defineEager("DISC", 4, 5, fnDISC);
535
+ defineEager("PRICEDISC", 4, 5, fnPRICEDISC);
536
+ defineEager("YIELDDISC", 4, 5, fnYIELDDISC);
537
+ defineEager("RECEIVED", 4, 5, fnRECEIVED);
538
+ defineEager("INTRATE", 4, 5, fnINTRATE);
539
+ defineEager("PRICE", 6, 7, fnPRICE);
540
+ defineEager("YIELD", 6, 7, fnYIELD);
541
+ defineEager("DURATION", 5, 6, fnDURATION);
542
+ defineEager("MDURATION", 5, 6, fnMDURATION);
543
+ defineEager("ACCRINT", 6, 8, fnACCRINT);
544
+ defineEager("ACCRINTM", 4, 5, fnACCRINTM);
545
+ defineEager("TBILLPRICE", 3, 3, fnTBILLPRICE);
546
+ defineEager("TBILLYIELD", 3, 3, fnTBILLYIELD);
547
+ defineEager("TBILLEQ", 3, 3, fnTBILLEQ);
548
+ defineEager("PRICEMAT", 5, 6, fnPRICEMAT);
549
+ defineEager("YIELDMAT", 5, 6, fnYIELDMAT);
550
+ defineEager("COUPNCD", 3, 4, fnCOUPNCD);
551
+ defineEager("COUPPCD", 3, 4, fnCOUPPCD);
552
+ defineEager("COUPNUM", 3, 4, fnCOUPNUM);
553
+ defineEager("COUPDAYSNC", 3, 4, fnCOUPDAYSNC);
554
+ defineEager("COUPDAYBS", 3, 4, fnCOUPDAYBS);
555
+ defineEager("COUPDAYS", 3, 4, fnCOUPDAYS);
556
+ }
557
+ // ============================================================================
558
+ // Native Statistical Functions
559
+ // ============================================================================
560
+ import { fnMEDIAN, fnLARGE, fnSMALL, fnRANK, fnSTDEV, fnSTDEVP, fnVAR, fnVARP, fnNORMSDIST, fnNORMDIST, fnNORMSINV, fnNORMINV, fnPERCENTILE, fnPERCENTILEEXC, fnQUARTILE, fnQUARTILEEXC, fnPERCENTRANK_INC, fnPERCENTRANK_EXC, fnPROB, fnMODE, fnCORREL, fnSLOPE, fnINTERCEPT, fnRSQ, fnSTEYX, fnFORECAST, fnGEOMEAN, fnHARMEAN, fnTRIMMEAN, fnDEVSQ, fnAVEDEV, fnCONFIDENCENORM, fnCONFIDENCE_T, fnCOVARIANCE_P, fnCOVARIANCE_S, fnRANK_AVG, fnMODE_MULT, fnFISHER, fnFISHERINV, fnAVERAGEA, fnMAXA, fnMINA, fnPOISSON_DIST, fnBINOM_DIST, fnBINOM_DIST_RANGE, fnBINOM_INV, fnCHISQ_INV_RT, fnZ_TEST, fnT_TEST, fnF_TEST, fnCHISQ_TEST, fnHYPGEOM_DIST, fnNEGBINOM_DIST, fnCHISQ_DIST, fnCHISQ_INV, fnCHISQ_DIST_RT, fnF_DIST, fnF_INV, fnF_DIST_RT, fnF_INV_RT, fnSKEW, fnSKEW_P, fnKURT, fnT_DIST, fnT_INV, fnT_DIST_2T, fnT_DIST_RT, fnT_INV_2T, fnBETA_DIST, fnBETA_INV, fnGAMMA, fnGAMMALN, fnGAMMA_DIST, fnGAMMA_INV, fnEXPON_DIST, fnWEIBULL_DIST, fnLOGNORM_DIST, fnLOGNORM_INV, fnPHI, fnGAUSS, fnERF, fnERFC, fnSTANDARDIZE, fnFREQUENCY, fnGROWTH, fnTREND, fnLINEST, fnLOGEST } from "../functions/statistical.js";
561
+ function registerNativeStatisticalFunctions() {
562
+ defineEager("MEDIAN", 1, 255, fnMEDIAN);
563
+ defineEager("LARGE", 2, 2, fnLARGE);
564
+ defineEager("SMALL", 2, 2, fnSMALL);
565
+ defineEager("RANK", 2, 3, fnRANK);
566
+ defineEager("RANK.EQ", 2, 3, fnRANK);
567
+ defineEager("STDEV", 1, 255, fnSTDEV);
568
+ defineEager("STDEV.S", 1, 255, fnSTDEV);
569
+ defineEager("STDEVP", 1, 255, fnSTDEVP);
570
+ defineEager("STDEV.P", 1, 255, fnSTDEVP);
571
+ defineEager("VAR", 1, 255, fnVAR);
572
+ defineEager("VAR.S", 1, 255, fnVAR);
573
+ defineEager("VARP", 1, 255, fnVARP);
574
+ defineEager("VAR.P", 1, 255, fnVARP);
575
+ defineEager("NORM.S.DIST", 2, 2, fnNORMSDIST);
576
+ defineEager("NORMSDIST", 1, 2, fnNORMSDIST);
577
+ defineEager("NORM.DIST", 4, 4, fnNORMDIST);
578
+ defineEager("NORMDIST", 4, 4, fnNORMDIST);
579
+ defineEager("NORM.S.INV", 1, 1, fnNORMSINV);
580
+ defineEager("NORMSINV", 1, 1, fnNORMSINV);
581
+ defineEager("NORM.INV", 3, 3, fnNORMINV);
582
+ defineEager("NORMINV", 3, 3, fnNORMINV);
583
+ defineEager("PERCENTILE", 2, 2, fnPERCENTILE);
584
+ defineEager("PERCENTILE.INC", 2, 2, fnPERCENTILE);
585
+ defineEager("PERCENTILE.EXC", 2, 2, fnPERCENTILEEXC);
586
+ defineEager("QUARTILE", 2, 2, fnQUARTILE);
587
+ defineEager("QUARTILE.INC", 2, 2, fnQUARTILE);
588
+ defineEager("QUARTILE.EXC", 2, 2, fnQUARTILEEXC);
589
+ defineEager("PERCENTRANK", 2, 3, fnPERCENTRANK_INC);
590
+ defineEager("PERCENTRANK.INC", 2, 3, fnPERCENTRANK_INC);
591
+ defineEager("PERCENTRANK.EXC", 2, 3, fnPERCENTRANK_EXC);
592
+ defineEager("PROB", 3, 4, fnPROB);
593
+ defineEager("MODE", 1, 255, fnMODE);
594
+ defineEager("MODE.SNGL", 1, 255, fnMODE);
595
+ defineEager("CORREL", 2, 2, fnCORREL);
596
+ defineEager("SLOPE", 2, 2, fnSLOPE);
597
+ defineEager("INTERCEPT", 2, 2, fnINTERCEPT);
598
+ defineEager("RSQ", 2, 2, fnRSQ);
599
+ defineEager("STEYX", 2, 2, fnSTEYX);
600
+ defineEager("FORECAST", 3, 3, fnFORECAST);
601
+ defineEager("FORECAST.LINEAR", 3, 3, fnFORECAST);
602
+ defineEager("GEOMEAN", 1, 255, fnGEOMEAN);
603
+ defineEager("HARMEAN", 1, 255, fnHARMEAN);
604
+ defineEager("TRIMMEAN", 2, 2, fnTRIMMEAN);
605
+ defineEager("DEVSQ", 1, 255, fnDEVSQ);
606
+ defineEager("AVEDEV", 1, 255, fnAVEDEV);
607
+ defineEager("CONFIDENCE.NORM", 3, 3, fnCONFIDENCENORM);
608
+ defineEager("CONFIDENCE.T", 3, 3, fnCONFIDENCE_T);
609
+ defineEager("COVARIANCE.P", 2, 2, fnCOVARIANCE_P);
610
+ defineEager("COVARIANCE.S", 2, 2, fnCOVARIANCE_S);
611
+ defineEager("RANK.AVG", 2, 3, fnRANK_AVG);
612
+ defineEager("MODE.MULT", 1, 255, fnMODE_MULT);
613
+ defineEager("CONFIDENCE", 3, 3, fnCONFIDENCENORM);
614
+ defineEager("FISHER", 1, 1, fnFISHER);
615
+ defineEager("FISHERINV", 1, 1, fnFISHERINV);
616
+ defineEager("AVERAGEA", 1, 255, fnAVERAGEA);
617
+ defineEager("MAXA", 1, 255, fnMAXA);
618
+ defineEager("MINA", 1, 255, fnMINA);
619
+ defineEager("POISSON.DIST", 3, 3, fnPOISSON_DIST);
620
+ defineEager("BINOM.DIST", 4, 4, fnBINOM_DIST);
621
+ defineEager("BINOMDIST", 4, 4, fnBINOM_DIST);
622
+ defineEager("BINOM.DIST.RANGE", 3, 4, fnBINOM_DIST_RANGE);
623
+ defineEager("BINOM.INV", 3, 3, fnBINOM_INV);
624
+ defineEager("HYPGEOM.DIST", 5, 5, fnHYPGEOM_DIST);
625
+ defineEager("NEGBINOM.DIST", 4, 4, fnNEGBINOM_DIST);
626
+ defineEager("CHISQ.DIST", 3, 3, fnCHISQ_DIST);
627
+ defineEager("CHISQ.INV", 2, 2, fnCHISQ_INV);
628
+ defineEager("CHISQ.INV.RT", 2, 2, fnCHISQ_INV_RT);
629
+ defineEager("Z.TEST", 2, 3, fnZ_TEST);
630
+ defineEager("ZTEST", 2, 3, fnZ_TEST);
631
+ defineEager("T.TEST", 4, 4, fnT_TEST);
632
+ defineEager("TTEST", 4, 4, fnT_TEST);
633
+ defineEager("F.TEST", 2, 2, fnF_TEST);
634
+ defineEager("FTEST", 2, 2, fnF_TEST);
635
+ defineEager("CHISQ.TEST", 2, 2, fnCHISQ_TEST);
636
+ defineEager("CHITEST", 2, 2, fnCHISQ_TEST);
637
+ defineEager("CHISQ.DIST.RT", 2, 2, fnCHISQ_DIST_RT);
638
+ defineEager("F.DIST", 4, 4, fnF_DIST);
639
+ defineEager("F.INV", 3, 3, fnF_INV);
640
+ defineEager("F.DIST.RT", 3, 3, fnF_DIST_RT);
641
+ defineEager("F.INV.RT", 3, 3, fnF_INV_RT);
642
+ defineEager("SKEW", 1, 255, fnSKEW);
643
+ defineEager("SKEW.P", 1, 255, fnSKEW_P);
644
+ defineEager("KURT", 1, 255, fnKURT);
645
+ defineEager("T.DIST", 3, 3, fnT_DIST);
646
+ defineEager("T.INV", 2, 2, fnT_INV);
647
+ defineEager("T.DIST.2T", 2, 2, fnT_DIST_2T);
648
+ defineEager("T.DIST.RT", 2, 2, fnT_DIST_RT);
649
+ defineEager("T.INV.2T", 2, 2, fnT_INV_2T);
650
+ defineEager("BETA.DIST", 4, 6, fnBETA_DIST);
651
+ defineEager("BETA.INV", 3, 5, fnBETA_INV);
652
+ defineEager("GAMMA", 1, 1, fnGAMMA);
653
+ defineEager("GAMMALN", 1, 1, fnGAMMALN);
654
+ defineEager("GAMMALN.PRECISE", 1, 1, fnGAMMALN);
655
+ defineEager("GAMMA.DIST", 4, 4, fnGAMMA_DIST);
656
+ defineEager("GAMMA.INV", 3, 3, fnGAMMA_INV);
657
+ defineEager("EXPON.DIST", 3, 3, fnEXPON_DIST);
658
+ defineEager("WEIBULL.DIST", 4, 4, fnWEIBULL_DIST);
659
+ defineEager("LOGNORM.DIST", 4, 4, fnLOGNORM_DIST);
660
+ defineEager("LOGNORM.INV", 3, 3, fnLOGNORM_INV);
661
+ defineEager("PHI", 1, 1, fnPHI);
662
+ defineEager("GAUSS", 1, 1, fnGAUSS);
663
+ defineEager("ERF", 1, 2, fnERF);
664
+ defineEager("ERF.PRECISE", 1, 2, fnERF);
665
+ defineEager("ERFC", 1, 1, fnERFC);
666
+ defineEager("ERFC.PRECISE", 1, 1, fnERFC);
667
+ defineEager("STANDARDIZE", 3, 3, fnSTANDARDIZE);
668
+ defineEager("FREQUENCY", 2, 2, fnFREQUENCY);
669
+ defineEager("GROWTH", 1, 4, fnGROWTH);
670
+ defineEager("TREND", 1, 4, fnTREND);
671
+ defineEager("LINEST", 1, 4, fnLINEST);
672
+ defineEager("LOGEST", 1, 4, fnLOGEST);
673
+ }
674
+ // ============================================================================
675
+ // Native Math Functions
676
+ // ============================================================================
677
+ import { fnSUM, fnAVERAGE, fnMIN, fnMAX, fnCOUNT, fnCOUNTA, fnCOUNTBLANK, fnPRODUCT, fnSUMPRODUCT, fnABS, fnCEILING, fnFLOOR, fnINT, fnMOD, fnPOWER, fnROUND, fnROUNDDOWN, fnROUNDUP, fnSQRT, fnSQRTPI, fnLN, fnLOG, fnLOG10, fnEXP, fnPI, fnRAND, fnRANDBETWEEN, fnSIGN, fnTRUNC, fnSUMSQ, fnGCD, fnLCM, fnEVEN, fnODD, fnMROUND, fnQUOTIENT, fnBASE, fnDECIMAL, fnROMAN, fnARABIC, fnDEGREES, fnRADIANS, fnSUMX2MY2, fnSUMX2PY2, fnSUMXMY2, fnMULTINOMIAL, fnFACT as fnMathFACT, fnFACTDOUBLE as fnMathFACTDOUBLE, fnCOMBIN as fnMathCOMBIN, fnCOMBINA as fnMathCOMBINA, fnPERMUT as fnMathPERMUT, fnSIN, fnCOS, fnTAN, fnASIN, fnACOS, fnATAN, fnATAN2, fnSINH, fnCOSH, fnTANH, fnASINH, fnACOSH, fnATANH, fnSEC, fnCSC, fnCOT, fnSECH, fnCSCH, fnCOTH, fnACOT, fnACOTH, fnMMULT, fnMDETERM, fnMINVERSE, fnMUNIT, fnSERIESSUM } from "../functions/math.js";
678
+ function registerNativeMathFunctions() {
679
+ defineEager("SUM", 1, 255, fnSUM);
680
+ defineEager("AVERAGE", 1, 255, fnAVERAGE);
681
+ defineEager("MIN", 1, 255, fnMIN);
682
+ defineEager("MAX", 1, 255, fnMAX);
683
+ defineEager("COUNT", 1, 255, fnCOUNT);
684
+ defineEager("COUNTA", 1, 255, fnCOUNTA);
685
+ defineEager("COUNTBLANK", 1, 1, fnCOUNTBLANK);
686
+ defineEager("PRODUCT", 1, 255, fnPRODUCT);
687
+ defineEager("SUMPRODUCT", 1, 255, fnSUMPRODUCT);
688
+ defineEager("MMULT", 2, 2, fnMMULT);
689
+ defineEager("MDETERM", 1, 1, fnMDETERM);
690
+ defineEager("MINVERSE", 1, 1, fnMINVERSE);
691
+ defineEager("MUNIT", 1, 1, fnMUNIT);
692
+ defineEager("SERIESSUM", 4, 4, fnSERIESSUM);
693
+ defineEager("ABS", 1, 1, fnABS);
694
+ defineEager("CEILING", 2, 2, fnCEILING);
695
+ defineEager("CEILING.MATH", 1, 3, fnCEILING);
696
+ defineEager("CEILING.PRECISE", 1, 2, fnCEILING);
697
+ defineEager("ISO.CEILING", 1, 2, fnCEILING);
698
+ defineEager("FLOOR", 2, 2, fnFLOOR);
699
+ defineEager("FLOOR.MATH", 1, 3, fnFLOOR);
700
+ defineEager("FLOOR.PRECISE", 1, 2, fnFLOOR);
701
+ defineEager("INT", 1, 1, fnINT);
702
+ defineEager("MOD", 2, 2, fnMOD);
703
+ defineEager("POWER", 2, 2, fnPOWER);
704
+ defineEager("ROUND", 2, 2, fnROUND);
705
+ defineEager("ROUNDDOWN", 2, 2, fnROUNDDOWN);
706
+ defineEager("ROUNDUP", 2, 2, fnROUNDUP);
707
+ defineEager("SQRT", 1, 1, fnSQRT);
708
+ defineEager("SQRTPI", 1, 1, fnSQRTPI);
709
+ defineEager("LN", 1, 1, fnLN);
710
+ defineEager("LOG", 1, 2, fnLOG);
711
+ defineEager("LOG10", 1, 1, fnLOG10);
712
+ defineEager("EXP", 1, 1, fnEXP);
713
+ defineEager("PI", 0, 0, fnPI);
714
+ defineEager("RAND", 0, 0, fnRAND);
715
+ defineEager("RANDBETWEEN", 2, 2, fnRANDBETWEEN);
716
+ defineEager("SIGN", 1, 1, fnSIGN);
717
+ defineEager("TRUNC", 1, 2, fnTRUNC);
718
+ defineEager("SUMSQ", 1, 255, fnSUMSQ);
719
+ defineEager("GCD", 1, 255, fnGCD);
720
+ defineEager("LCM", 1, 255, fnLCM);
721
+ defineEager("EVEN", 1, 1, fnEVEN);
722
+ defineEager("ODD", 1, 1, fnODD);
723
+ defineEager("MROUND", 2, 2, fnMROUND);
724
+ defineEager("QUOTIENT", 2, 2, fnQUOTIENT);
725
+ defineEager("BASE", 2, 3, fnBASE);
726
+ defineEager("DECIMAL", 2, 2, fnDECIMAL);
727
+ defineEager("ROMAN", 1, 2, fnROMAN);
728
+ defineEager("ARABIC", 1, 1, fnARABIC);
729
+ defineEager("DEGREES", 1, 1, fnDEGREES);
730
+ defineEager("RADIANS", 1, 1, fnRADIANS);
731
+ defineEager("SUMX2MY2", 2, 2, fnSUMX2MY2);
732
+ defineEager("SUMX2PY2", 2, 2, fnSUMX2PY2);
733
+ defineEager("SUMXMY2", 2, 2, fnSUMXMY2);
734
+ defineEager("MULTINOMIAL", 1, 255, fnMULTINOMIAL);
735
+ defineEager("FACT", 1, 1, fnMathFACT);
736
+ defineEager("FACTDOUBLE", 1, 1, fnMathFACTDOUBLE);
737
+ defineEager("COMBIN", 2, 2, fnMathCOMBIN);
738
+ defineEager("COMBINA", 2, 2, fnMathCOMBINA);
739
+ defineEager("PERMUT", 2, 2, fnMathPERMUT);
740
+ defineEager("SIN", 1, 1, fnSIN);
741
+ defineEager("COS", 1, 1, fnCOS);
742
+ defineEager("TAN", 1, 1, fnTAN);
743
+ defineEager("ASIN", 1, 1, fnASIN);
744
+ defineEager("ACOS", 1, 1, fnACOS);
745
+ defineEager("ATAN", 1, 1, fnATAN);
746
+ defineEager("ATAN2", 2, 2, fnATAN2);
747
+ defineEager("SINH", 1, 1, fnSINH);
748
+ defineEager("COSH", 1, 1, fnCOSH);
749
+ defineEager("TANH", 1, 1, fnTANH);
750
+ defineEager("ASINH", 1, 1, fnASINH);
751
+ defineEager("ACOSH", 1, 1, fnACOSH);
752
+ defineEager("ATANH", 1, 1, fnATANH);
753
+ defineEager("SEC", 1, 1, fnSEC);
754
+ defineEager("CSC", 1, 1, fnCSC);
755
+ defineEager("COT", 1, 1, fnCOT);
756
+ defineEager("SECH", 1, 1, fnSECH);
757
+ defineEager("CSCH", 1, 1, fnCSCH);
758
+ defineEager("COTH", 1, 1, fnCOTH);
759
+ defineEager("ACOT", 1, 1, fnACOT);
760
+ defineEager("ACOTH", 1, 1, fnACOTH);
761
+ }
762
+ // ============================================================================
763
+ // Native Conditional Functions
764
+ // ============================================================================
765
+ import { fnSUMIF, fnSUMIFS, fnCOUNTIF, fnCOUNTIFS, fnAVERAGEIF, fnAVERAGEIFS, fnMAXIFS, fnMINIFS } from "../functions/conditional.js";
766
+ function registerNativeConditionalFunctions() {
767
+ defineEager("SUMIF", 2, 3, fnSUMIF);
768
+ defineEager("SUMIFS", 3, 255, fnSUMIFS);
769
+ defineEager("COUNTIF", 2, 2, fnCOUNTIF);
770
+ defineEager("COUNTIFS", 2, 255, fnCOUNTIFS);
771
+ defineEager("AVERAGEIF", 2, 3, fnAVERAGEIF);
772
+ defineEager("AVERAGEIFS", 3, 255, fnAVERAGEIFS);
773
+ defineEager("MAXIFS", 3, 255, fnMAXIFS);
774
+ defineEager("MINIFS", 3, 255, fnMINIFS);
775
+ }
776
+ // ============================================================================
777
+ // Native Lookup Functions
778
+ // ============================================================================
779
+ import { fnROW, fnCOLUMN, fnROWS, fnCOLUMNS, fnINDEX, fnMATCH, fnVLOOKUP, fnHLOOKUP, fnXLOOKUP, fnXMATCH, fnADDRESS, fnLOOKUP, fnTRANSPOSE, fnAREAS } from "../functions/lookup.js";
780
+ function registerNativeLookupFunctions() {
781
+ defineEager("ROW", 0, 1, fnROW);
782
+ defineEager("COLUMN", 0, 1, fnCOLUMN);
783
+ defineEager("ROWS", 1, 1, fnROWS);
784
+ defineEager("COLUMNS", 1, 1, fnCOLUMNS);
785
+ defineEager("INDEX", 2, 4, fnINDEX);
786
+ defineEager("MATCH", 2, 3, fnMATCH);
787
+ defineEager("VLOOKUP", 3, 4, fnVLOOKUP);
788
+ defineEager("HLOOKUP", 3, 4, fnHLOOKUP);
789
+ defineEager("XLOOKUP", 3, 6, fnXLOOKUP);
790
+ defineEager("XMATCH", 2, 4, fnXMATCH);
791
+ defineEager("ADDRESS", 2, 5, fnADDRESS);
792
+ defineEager("LOOKUP", 2, 3, fnLOOKUP);
793
+ defineEager("TRANSPOSE", 1, 1, fnTRANSPOSE);
794
+ defineEager("AREAS", 1, 1, fnAREAS);
795
+ }
796
+ // ============================================================================
797
+ // Native Dynamic Array Functions
798
+ // ============================================================================
799
+ import { fnFILTER, fnSORT, fnUNIQUE, fnSORTBY, fnSEQUENCE, fnRANDARRAY as fnRA, fnTOCOL, fnTOROW, fnCHOOSEROWS, fnCHOOSECOLS, fnVSTACK, fnHSTACK, fnTAKE, fnDROP, fnWRAPROWS, fnWRAPCOLS, fnEXPAND, fnSUBTOTAL, fnAGGREGATE } from "../functions/dynamic-array.js";
800
+ function registerNativeDynamicArrayFunctions() {
801
+ defineEager("FILTER", 2, 3, fnFILTER);
802
+ defineEager("SORT", 1, 4, fnSORT);
803
+ defineEager("UNIQUE", 1, 3, fnUNIQUE);
804
+ defineEager("SORTBY", 2, 255, fnSORTBY);
805
+ defineEager("SEQUENCE", 1, 4, fnSEQUENCE);
806
+ defineEager("RANDARRAY", 0, 5, fnRA);
807
+ defineEager("TOCOL", 1, 3, fnTOCOL);
808
+ defineEager("TOROW", 1, 3, fnTOROW);
809
+ defineEager("CHOOSEROWS", 2, 255, fnCHOOSEROWS);
810
+ defineEager("CHOOSECOLS", 2, 255, fnCHOOSECOLS);
811
+ defineEager("VSTACK", 1, 255, fnVSTACK);
812
+ defineEager("HSTACK", 1, 255, fnHSTACK);
813
+ defineEager("WRAPROWS", 2, 3, fnWRAPROWS);
814
+ defineEager("WRAPCOLS", 2, 3, fnWRAPCOLS);
815
+ defineEager("EXPAND", 2, 4, fnEXPAND);
816
+ defineEager("TAKE", 2, 3, fnTAKE);
817
+ defineEager("DROP", 2, 3, fnDROP);
818
+ defineEager("SUBTOTAL", 2, 255, fnSUBTOTAL);
819
+ defineEager("AGGREGATE", 3, 255, fnAGGREGATE);
820
+ }
821
+ // ============================================================================
822
+ // Native Database Functions
823
+ // ============================================================================
824
+ import { fnDSUM, fnDAVERAGE, fnDCOUNT, fnDCOUNTA, fnDMAX, fnDMIN, fnDPRODUCT, fnDGET, fnDSTDEV, fnDSTDEVP, fnDVAR, fnDVARP } from "../functions/database.js";
825
+ function registerNativeDatabaseFunctions() {
826
+ defineEager("DSUM", 3, 3, fnDSUM);
827
+ defineEager("DAVERAGE", 3, 3, fnDAVERAGE);
828
+ defineEager("DCOUNT", 3, 3, fnDCOUNT);
829
+ defineEager("DCOUNTA", 3, 3, fnDCOUNTA);
830
+ defineEager("DMAX", 3, 3, fnDMAX);
831
+ defineEager("DMIN", 3, 3, fnDMIN);
832
+ defineEager("DPRODUCT", 3, 3, fnDPRODUCT);
833
+ defineEager("DGET", 3, 3, fnDGET);
834
+ defineEager("DSTDEV", 3, 3, fnDSTDEV);
835
+ defineEager("DSTDEVP", 3, 3, fnDSTDEVP);
836
+ defineEager("DVAR", 3, 3, fnDVAR);
837
+ defineEager("DVARP", 3, 3, fnDVARP);
838
+ }
839
+ // Auto-initialize on import
840
+ ensureRegistryInitialized();