@ricsam/formula-engine 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (569) hide show
  1. package/README.md +100 -0
  2. package/dist/cjs/core/ast-traverser.cjs +124 -0
  3. package/dist/cjs/core/ast-traverser.cjs.map +10 -0
  4. package/dist/cjs/core/autofill-utils.cjs +304 -0
  5. package/dist/cjs/core/autofill-utils.cjs.map +10 -0
  6. package/dist/cjs/core/engine.cjs +390 -0
  7. package/dist/cjs/core/engine.cjs.map +10 -0
  8. package/dist/cjs/core/managers/cache-manager.cjs +58 -0
  9. package/dist/cjs/core/managers/cache-manager.cjs.map +10 -0
  10. package/dist/cjs/core/managers/dependency-manager.cjs +620 -0
  11. package/dist/cjs/core/managers/dependency-manager.cjs.map +10 -0
  12. package/dist/cjs/core/managers/dependency-node.cjs +24 -0
  13. package/dist/cjs/core/managers/dependency-node.cjs.map +9 -0
  14. package/dist/cjs/core/managers/evaluation-manager.cjs +433 -0
  15. package/dist/cjs/core/managers/evaluation-manager.cjs.map +10 -0
  16. package/dist/cjs/core/managers/event-manager.cjs +49 -0
  17. package/dist/cjs/core/managers/event-manager.cjs.map +10 -0
  18. package/dist/cjs/core/managers/frontier-dependency-manager.cjs +181 -0
  19. package/dist/cjs/core/managers/frontier-dependency-manager.cjs.map +10 -0
  20. package/dist/cjs/core/managers/index.cjs +49 -0
  21. package/dist/cjs/core/managers/index.cjs.map +10 -0
  22. package/dist/cjs/core/managers/isDependencyNode.cjs +44 -0
  23. package/dist/cjs/core/managers/isDependencyNode.cjs.map +10 -0
  24. package/dist/cjs/core/managers/named-expression-manager.cjs +379 -0
  25. package/dist/cjs/core/managers/named-expression-manager.cjs.map +10 -0
  26. package/dist/cjs/core/managers/range-eval-order-builder.cjs +644 -0
  27. package/dist/cjs/core/managers/range-eval-order-builder.cjs.map +10 -0
  28. package/dist/cjs/core/managers/table-manager.cjs +254 -0
  29. package/dist/cjs/core/managers/table-manager.cjs.map +10 -0
  30. package/dist/cjs/core/managers/workbook-manager.cjs +474 -0
  31. package/dist/cjs/core/managers/workbook-manager.cjs.map +10 -0
  32. package/dist/cjs/core/map-serializer.cjs +69 -0
  33. package/dist/cjs/core/map-serializer.cjs.map +10 -0
  34. package/dist/cjs/core/named-expression-renamer.cjs +88 -0
  35. package/dist/cjs/core/named-expression-renamer.cjs.map +10 -0
  36. package/dist/cjs/core/sheet-renamer.cjs +89 -0
  37. package/dist/cjs/core/sheet-renamer.cjs.map +10 -0
  38. package/dist/cjs/core/sheet-utils.cjs +39 -0
  39. package/dist/cjs/core/sheet-utils.cjs.map +10 -0
  40. package/dist/cjs/core/table-renamer.cjs +88 -0
  41. package/dist/cjs/core/table-renamer.cjs.map +10 -0
  42. package/dist/cjs/core/types.cjs +48 -0
  43. package/dist/cjs/core/types.cjs.map +10 -0
  44. package/dist/cjs/core/utils/range-serializer.cjs +65 -0
  45. package/dist/cjs/core/utils/range-serializer.cjs.map +10 -0
  46. package/dist/cjs/core/utils/spreadsheet-visualizer.cjs +142 -0
  47. package/dist/cjs/core/utils/spreadsheet-visualizer.cjs.map +10 -0
  48. package/dist/cjs/core/utils.cjs +434 -0
  49. package/dist/cjs/core/utils.cjs.map +10 -0
  50. package/dist/cjs/core/workbook-renamer.cjs +106 -0
  51. package/dist/cjs/core/workbook-renamer.cjs.map +10 -0
  52. package/dist/cjs/debug/flags.cjs +47 -0
  53. package/dist/cjs/debug/flags.cjs.map +10 -0
  54. package/dist/cjs/evaluator/arithmetic/add/add.cjs +82 -0
  55. package/dist/cjs/evaluator/arithmetic/add/add.cjs.map +10 -0
  56. package/dist/cjs/evaluator/arithmetic/divide/divide.cjs +107 -0
  57. package/dist/cjs/evaluator/arithmetic/divide/divide.cjs.map +10 -0
  58. package/dist/cjs/evaluator/arithmetic/multiply/multiply.cjs +93 -0
  59. package/dist/cjs/evaluator/arithmetic/multiply/multiply.cjs.map +10 -0
  60. package/dist/cjs/evaluator/arithmetic/power/power.cjs +125 -0
  61. package/dist/cjs/evaluator/arithmetic/power/power.cjs.map +10 -0
  62. package/dist/cjs/evaluator/arithmetic/subtract/subtract.cjs +84 -0
  63. package/dist/cjs/evaluator/arithmetic/subtract/subtract.cjs.map +10 -0
  64. package/dist/cjs/evaluator/comparison/equals.cjs +64 -0
  65. package/dist/cjs/evaluator/comparison/equals.cjs.map +10 -0
  66. package/dist/cjs/evaluator/comparison/greater-than-or-equal.cjs +61 -0
  67. package/dist/cjs/evaluator/comparison/greater-than-or-equal.cjs.map +10 -0
  68. package/dist/cjs/evaluator/comparison/greater-than.cjs +61 -0
  69. package/dist/cjs/evaluator/comparison/greater-than.cjs.map +10 -0
  70. package/dist/cjs/evaluator/comparison/less-than-or-equal.cjs +69 -0
  71. package/dist/cjs/evaluator/comparison/less-than-or-equal.cjs.map +10 -0
  72. package/dist/cjs/evaluator/comparison/less-than.cjs +68 -0
  73. package/dist/cjs/evaluator/comparison/less-than.cjs.map +10 -0
  74. package/dist/cjs/evaluator/comparison/not-equals.cjs +53 -0
  75. package/dist/cjs/evaluator/comparison/not-equals.cjs.map +10 -0
  76. package/dist/cjs/evaluator/concatenation/concatenate.cjs +72 -0
  77. package/dist/cjs/evaluator/concatenation/concatenate.cjs.map +10 -0
  78. package/dist/cjs/evaluator/dependency-nodes/ast-evaluation-node.cjs +58 -0
  79. package/dist/cjs/evaluator/dependency-nodes/ast-evaluation-node.cjs.map +10 -0
  80. package/dist/cjs/evaluator/dependency-nodes/base-eval-node.cjs +112 -0
  81. package/dist/cjs/evaluator/dependency-nodes/base-eval-node.cjs.map +10 -0
  82. package/dist/cjs/evaluator/dependency-nodes/cell-value-node.cjs +54 -0
  83. package/dist/cjs/evaluator/dependency-nodes/cell-value-node.cjs.map +10 -0
  84. package/dist/cjs/evaluator/dependency-nodes/empty-cell-evaluation-node.cjs +108 -0
  85. package/dist/cjs/evaluator/dependency-nodes/empty-cell-evaluation-node.cjs.map +10 -0
  86. package/dist/cjs/evaluator/dependency-nodes/spill-meta-node.cjs +50 -0
  87. package/dist/cjs/evaluator/dependency-nodes/spill-meta-node.cjs.map +10 -0
  88. package/dist/cjs/evaluator/evaluate-scalar-operator.cjs +254 -0
  89. package/dist/cjs/evaluator/evaluate-scalar-operator.cjs.map +10 -0
  90. package/dist/cjs/evaluator/evaluation-context.cjs +154 -0
  91. package/dist/cjs/evaluator/evaluation-context.cjs.map +10 -0
  92. package/dist/cjs/evaluator/evaluation-error.cjs +75 -0
  93. package/dist/cjs/evaluator/evaluation-error.cjs.map +10 -0
  94. package/dist/cjs/evaluator/formula-evaluator.cjs +797 -0
  95. package/dist/cjs/evaluator/formula-evaluator.cjs.map +10 -0
  96. package/dist/cjs/evaluator/range-evaluation-node.cjs +88 -0
  97. package/dist/cjs/evaluator/range-evaluation-node.cjs.map +10 -0
  98. package/dist/cjs/functions/_template/template.cjs +42 -0
  99. package/dist/cjs/functions/_template/template.cjs.map +10 -0
  100. package/dist/cjs/functions/array/sequence/sequence.cjs +315 -0
  101. package/dist/cjs/functions/array/sequence/sequence.cjs.map +10 -0
  102. package/dist/cjs/functions/criteria-parser.cjs +217 -0
  103. package/dist/cjs/functions/criteria-parser.cjs.map +10 -0
  104. package/dist/cjs/functions/criteria-utils.cjs +291 -0
  105. package/dist/cjs/functions/criteria-utils.cjs.map +10 -0
  106. package/dist/cjs/functions/function-utils.cjs +63 -0
  107. package/dist/cjs/functions/function-utils.cjs.map +10 -0
  108. package/dist/cjs/functions/index.cjs +125 -0
  109. package/dist/cjs/functions/index.cjs.map +10 -0
  110. package/dist/cjs/functions/information/cell/cell.cjs +196 -0
  111. package/dist/cjs/functions/information/cell/cell.cjs.map +10 -0
  112. package/dist/cjs/functions/information/column/column.cjs +144 -0
  113. package/dist/cjs/functions/information/column/column.cjs.map +10 -0
  114. package/dist/cjs/functions/information/row/row.cjs +150 -0
  115. package/dist/cjs/functions/information/row/row.cjs.map +10 -0
  116. package/dist/cjs/functions/logical/and/and.cjs +112 -0
  117. package/dist/cjs/functions/logical/and/and.cjs.map +10 -0
  118. package/dist/cjs/functions/logical/if/if.cjs +195 -0
  119. package/dist/cjs/functions/logical/if/if.cjs.map +10 -0
  120. package/dist/cjs/functions/logical/iferror/iferror.cjs +126 -0
  121. package/dist/cjs/functions/logical/iferror/iferror.cjs.map +10 -0
  122. package/dist/cjs/functions/logical/or/or.cjs +112 -0
  123. package/dist/cjs/functions/logical/or/or.cjs.map +10 -0
  124. package/dist/cjs/functions/lookup/count/count-utils.cjs +65 -0
  125. package/dist/cjs/functions/lookup/count/count-utils.cjs.map +10 -0
  126. package/dist/cjs/functions/lookup/count/count.cjs +48 -0
  127. package/dist/cjs/functions/lookup/count/count.cjs.map +10 -0
  128. package/dist/cjs/functions/lookup/count/countif.cjs +94 -0
  129. package/dist/cjs/functions/lookup/count/countif.cjs.map +10 -0
  130. package/dist/cjs/functions/lookup/count/countifs.cjs +63 -0
  131. package/dist/cjs/functions/lookup/count/countifs.cjs.map +10 -0
  132. package/dist/cjs/functions/lookup/index-lookup/index-lookup.cjs +187 -0
  133. package/dist/cjs/functions/lookup/index-lookup/index-lookup.cjs.map +10 -0
  134. package/dist/cjs/functions/lookup/match/match.cjs +168 -0
  135. package/dist/cjs/functions/lookup/match/match.cjs.map +10 -0
  136. package/dist/cjs/functions/lookup/xlookup/xlookup.cjs +410 -0
  137. package/dist/cjs/functions/lookup/xlookup/xlookup.cjs.map +10 -0
  138. package/dist/cjs/functions/math/average/average-utils.cjs +72 -0
  139. package/dist/cjs/functions/math/average/average-utils.cjs.map +10 -0
  140. package/dist/cjs/functions/math/average/average.cjs +48 -0
  141. package/dist/cjs/functions/math/average/average.cjs.map +10 -0
  142. package/dist/cjs/functions/math/average/averageif.cjs +83 -0
  143. package/dist/cjs/functions/math/average/averageif.cjs.map +10 -0
  144. package/dist/cjs/functions/math/average/averageifs.cjs +61 -0
  145. package/dist/cjs/functions/math/average/averageifs.cjs.map +10 -0
  146. package/dist/cjs/functions/math/ceiling/ceiling.cjs +219 -0
  147. package/dist/cjs/functions/math/ceiling/ceiling.cjs.map +10 -0
  148. package/dist/cjs/functions/math/max/max-utils.cjs +71 -0
  149. package/dist/cjs/functions/math/max/max-utils.cjs.map +10 -0
  150. package/dist/cjs/functions/math/max/max.cjs +48 -0
  151. package/dist/cjs/functions/math/max/max.cjs.map +10 -0
  152. package/dist/cjs/functions/math/max/maxif.cjs +83 -0
  153. package/dist/cjs/functions/math/max/maxif.cjs.map +10 -0
  154. package/dist/cjs/functions/math/max/maxifs.cjs +61 -0
  155. package/dist/cjs/functions/math/max/maxifs.cjs.map +10 -0
  156. package/dist/cjs/functions/math/min/min-utils.cjs +71 -0
  157. package/dist/cjs/functions/math/min/min-utils.cjs.map +10 -0
  158. package/dist/cjs/functions/math/min/min.cjs +48 -0
  159. package/dist/cjs/functions/math/min/min.cjs.map +10 -0
  160. package/dist/cjs/functions/math/min/minif.cjs +83 -0
  161. package/dist/cjs/functions/math/min/minif.cjs.map +10 -0
  162. package/dist/cjs/functions/math/min/minifs.cjs +61 -0
  163. package/dist/cjs/functions/math/min/minifs.cjs.map +10 -0
  164. package/dist/cjs/functions/math/sum/sum.cjs +48 -0
  165. package/dist/cjs/functions/math/sum/sum.cjs.map +10 -0
  166. package/dist/cjs/functions/math/sum/sumif.cjs +83 -0
  167. package/dist/cjs/functions/math/sum/sumif.cjs.map +10 -0
  168. package/dist/cjs/functions/math/sum/sumifs.cjs +60 -0
  169. package/dist/cjs/functions/math/sum/sumifs.cjs.map +10 -0
  170. package/dist/cjs/functions/math/sum/summation-utils.cjs +57 -0
  171. package/dist/cjs/functions/math/sum/summation-utils.cjs.map +10 -0
  172. package/dist/cjs/functions/reference/address/address.cjs +163 -0
  173. package/dist/cjs/functions/reference/address/address.cjs.map +10 -0
  174. package/dist/cjs/functions/reference/indirect/indirect.cjs +102 -0
  175. package/dist/cjs/functions/reference/indirect/indirect.cjs.map +10 -0
  176. package/dist/cjs/functions/reference/offset/offset.cjs +233 -0
  177. package/dist/cjs/functions/reference/offset/offset.cjs.map +10 -0
  178. package/dist/cjs/functions/text/concatenate/concatenate.cjs +167 -0
  179. package/dist/cjs/functions/text/concatenate/concatenate.cjs.map +10 -0
  180. package/dist/cjs/functions/text/exact/exact.cjs +171 -0
  181. package/dist/cjs/functions/text/exact/exact.cjs.map +10 -0
  182. package/dist/cjs/functions/text/find/find.cjs +397 -0
  183. package/dist/cjs/functions/text/find/find.cjs.map +10 -0
  184. package/dist/cjs/functions/text/left/left.cjs +109 -0
  185. package/dist/cjs/functions/text/left/left.cjs.map +10 -0
  186. package/dist/cjs/functions/text/len/len.cjs +119 -0
  187. package/dist/cjs/functions/text/len/len.cjs.map +10 -0
  188. package/dist/cjs/functions/text/mid/mid.cjs +103 -0
  189. package/dist/cjs/functions/text/mid/mid.cjs.map +10 -0
  190. package/dist/cjs/functions/text/right/right.cjs +167 -0
  191. package/dist/cjs/functions/text/right/right.cjs.map +10 -0
  192. package/dist/cjs/functions/text/text-helpers.cjs +179 -0
  193. package/dist/cjs/functions/text/text-helpers.cjs.map +10 -0
  194. package/dist/cjs/functions/text/textjoin/textjoin.cjs +173 -0
  195. package/dist/cjs/functions/text/textjoin/textjoin.cjs.map +10 -0
  196. package/dist/cjs/package.json +5 -0
  197. package/dist/cjs/parser/ast.cjs +175 -0
  198. package/dist/cjs/parser/ast.cjs.map +10 -0
  199. package/dist/cjs/parser/formatter.cjs +319 -0
  200. package/dist/cjs/parser/formatter.cjs.map +10 -0
  201. package/dist/cjs/parser/grammar.cjs +375 -0
  202. package/dist/cjs/parser/grammar.cjs.map +10 -0
  203. package/dist/cjs/parser/lexer.cjs +443 -0
  204. package/dist/cjs/parser/lexer.cjs.map +10 -0
  205. package/dist/cjs/parser/parser.cjs +1700 -0
  206. package/dist/cjs/parser/parser.cjs.map +10 -0
  207. package/dist/cjs/react/hooks.cjs +59 -0
  208. package/dist/cjs/react/hooks.cjs.map +10 -0
  209. package/dist/mjs/core/ast-traverser.mjs +94 -0
  210. package/dist/mjs/core/ast-traverser.mjs.map +10 -0
  211. package/dist/mjs/core/autofill-utils.mjs +274 -0
  212. package/dist/mjs/core/autofill-utils.mjs.map +10 -0
  213. package/dist/mjs/core/engine.mjs +366 -0
  214. package/dist/mjs/core/engine.mjs.map +10 -0
  215. package/dist/mjs/core/managers/cache-manager.mjs +27 -0
  216. package/dist/mjs/core/managers/cache-manager.mjs.map +10 -0
  217. package/dist/mjs/core/managers/dependency-manager.mjs +593 -0
  218. package/dist/mjs/core/managers/dependency-manager.mjs.map +10 -0
  219. package/dist/mjs/core/managers/dependency-node.mjs +2 -0
  220. package/dist/mjs/core/managers/dependency-node.mjs.map +9 -0
  221. package/dist/mjs/core/managers/evaluation-manager.mjs +415 -0
  222. package/dist/mjs/core/managers/evaluation-manager.mjs.map +10 -0
  223. package/dist/mjs/core/managers/event-manager.mjs +18 -0
  224. package/dist/mjs/core/managers/event-manager.mjs.map +10 -0
  225. package/dist/mjs/core/managers/frontier-dependency-manager.mjs +151 -0
  226. package/dist/mjs/core/managers/frontier-dependency-manager.mjs.map +10 -0
  227. package/dist/mjs/core/managers/index.mjs +21 -0
  228. package/dist/mjs/core/managers/index.mjs.map +10 -0
  229. package/dist/mjs/core/managers/isDependencyNode.mjs +14 -0
  230. package/dist/mjs/core/managers/isDependencyNode.mjs.map +10 -0
  231. package/dist/mjs/core/managers/named-expression-manager.mjs +348 -0
  232. package/dist/mjs/core/managers/named-expression-manager.mjs.map +10 -0
  233. package/dist/mjs/core/managers/range-eval-order-builder.mjs +618 -0
  234. package/dist/mjs/core/managers/range-eval-order-builder.mjs.map +10 -0
  235. package/dist/mjs/core/managers/table-manager.mjs +224 -0
  236. package/dist/mjs/core/managers/table-manager.mjs.map +10 -0
  237. package/dist/mjs/core/managers/workbook-manager.mjs +447 -0
  238. package/dist/mjs/core/managers/workbook-manager.mjs.map +10 -0
  239. package/dist/mjs/core/map-serializer.mjs +39 -0
  240. package/dist/mjs/core/map-serializer.mjs.map +10 -0
  241. package/dist/mjs/core/named-expression-renamer.mjs +58 -0
  242. package/dist/mjs/core/named-expression-renamer.mjs.map +10 -0
  243. package/dist/mjs/core/sheet-renamer.mjs +59 -0
  244. package/dist/mjs/core/sheet-renamer.mjs.map +10 -0
  245. package/dist/mjs/core/sheet-utils.mjs +8 -0
  246. package/dist/mjs/core/sheet-utils.mjs.map +10 -0
  247. package/dist/mjs/core/table-renamer.mjs +58 -0
  248. package/dist/mjs/core/table-renamer.mjs.map +10 -0
  249. package/dist/mjs/core/types.mjs +18 -0
  250. package/dist/mjs/core/types.mjs.map +10 -0
  251. package/dist/mjs/core/utils/range-serializer.mjs +35 -0
  252. package/dist/mjs/core/utils/range-serializer.mjs.map +10 -0
  253. package/dist/mjs/core/utils/spreadsheet-visualizer.mjs +112 -0
  254. package/dist/mjs/core/utils/spreadsheet-visualizer.mjs.map +10 -0
  255. package/dist/mjs/core/utils.mjs +409 -0
  256. package/dist/mjs/core/utils.mjs.map +10 -0
  257. package/dist/mjs/core/workbook-renamer.mjs +76 -0
  258. package/dist/mjs/core/workbook-renamer.mjs.map +10 -0
  259. package/dist/mjs/debug/flags.mjs +17 -0
  260. package/dist/mjs/debug/flags.mjs.map +10 -0
  261. package/dist/mjs/evaluator/arithmetic/add/add.mjs +52 -0
  262. package/dist/mjs/evaluator/arithmetic/add/add.mjs.map +10 -0
  263. package/dist/mjs/evaluator/arithmetic/divide/divide.mjs +77 -0
  264. package/dist/mjs/evaluator/arithmetic/divide/divide.mjs.map +10 -0
  265. package/dist/mjs/evaluator/arithmetic/multiply/multiply.mjs +63 -0
  266. package/dist/mjs/evaluator/arithmetic/multiply/multiply.mjs.map +10 -0
  267. package/dist/mjs/evaluator/arithmetic/power/power.mjs +95 -0
  268. package/dist/mjs/evaluator/arithmetic/power/power.mjs.map +10 -0
  269. package/dist/mjs/evaluator/arithmetic/subtract/subtract.mjs +54 -0
  270. package/dist/mjs/evaluator/arithmetic/subtract/subtract.mjs.map +10 -0
  271. package/dist/mjs/evaluator/comparison/equals.mjs +34 -0
  272. package/dist/mjs/evaluator/comparison/equals.mjs.map +10 -0
  273. package/dist/mjs/evaluator/comparison/greater-than-or-equal.mjs +31 -0
  274. package/dist/mjs/evaluator/comparison/greater-than-or-equal.mjs.map +10 -0
  275. package/dist/mjs/evaluator/comparison/greater-than.mjs +31 -0
  276. package/dist/mjs/evaluator/comparison/greater-than.mjs.map +10 -0
  277. package/dist/mjs/evaluator/comparison/less-than-or-equal.mjs +39 -0
  278. package/dist/mjs/evaluator/comparison/less-than-or-equal.mjs.map +10 -0
  279. package/dist/mjs/evaluator/comparison/less-than.mjs +38 -0
  280. package/dist/mjs/evaluator/comparison/less-than.mjs.map +10 -0
  281. package/dist/mjs/evaluator/comparison/not-equals.mjs +23 -0
  282. package/dist/mjs/evaluator/comparison/not-equals.mjs.map +10 -0
  283. package/dist/mjs/evaluator/concatenation/concatenate.mjs +42 -0
  284. package/dist/mjs/evaluator/concatenation/concatenate.mjs.map +10 -0
  285. package/dist/mjs/evaluator/dependency-nodes/ast-evaluation-node.mjs +28 -0
  286. package/dist/mjs/evaluator/dependency-nodes/ast-evaluation-node.mjs.map +10 -0
  287. package/dist/mjs/evaluator/dependency-nodes/base-eval-node.mjs +81 -0
  288. package/dist/mjs/evaluator/dependency-nodes/base-eval-node.mjs.map +10 -0
  289. package/dist/mjs/evaluator/dependency-nodes/cell-value-node.mjs +24 -0
  290. package/dist/mjs/evaluator/dependency-nodes/cell-value-node.mjs.map +10 -0
  291. package/dist/mjs/evaluator/dependency-nodes/empty-cell-evaluation-node.mjs +78 -0
  292. package/dist/mjs/evaluator/dependency-nodes/empty-cell-evaluation-node.mjs.map +10 -0
  293. package/dist/mjs/evaluator/dependency-nodes/spill-meta-node.mjs +20 -0
  294. package/dist/mjs/evaluator/dependency-nodes/spill-meta-node.mjs.map +10 -0
  295. package/dist/mjs/evaluator/evaluate-scalar-operator.mjs +226 -0
  296. package/dist/mjs/evaluator/evaluate-scalar-operator.mjs.map +10 -0
  297. package/dist/mjs/evaluator/evaluation-context.mjs +123 -0
  298. package/dist/mjs/evaluator/evaluation-context.mjs.map +10 -0
  299. package/dist/mjs/evaluator/evaluation-error.mjs +44 -0
  300. package/dist/mjs/evaluator/evaluation-error.mjs.map +10 -0
  301. package/dist/mjs/evaluator/formula-evaluator.mjs +780 -0
  302. package/dist/mjs/evaluator/formula-evaluator.mjs.map +10 -0
  303. package/dist/mjs/evaluator/range-evaluation-node.mjs +58 -0
  304. package/dist/mjs/evaluator/range-evaluation-node.mjs.map +10 -0
  305. package/dist/mjs/functions/_template/template.mjs +12 -0
  306. package/dist/mjs/functions/_template/template.mjs.map +10 -0
  307. package/dist/mjs/functions/array/sequence/sequence.mjs +287 -0
  308. package/dist/mjs/functions/array/sequence/sequence.mjs.map +10 -0
  309. package/dist/mjs/functions/criteria-parser.mjs +187 -0
  310. package/dist/mjs/functions/criteria-parser.mjs.map +10 -0
  311. package/dist/mjs/functions/criteria-utils.mjs +268 -0
  312. package/dist/mjs/functions/criteria-utils.mjs.map +10 -0
  313. package/dist/mjs/functions/function-utils.mjs +33 -0
  314. package/dist/mjs/functions/function-utils.mjs.map +10 -0
  315. package/dist/mjs/functions/index.mjs +95 -0
  316. package/dist/mjs/functions/index.mjs.map +10 -0
  317. package/dist/mjs/functions/information/cell/cell.mjs +168 -0
  318. package/dist/mjs/functions/information/cell/cell.mjs.map +10 -0
  319. package/dist/mjs/functions/information/column/column.mjs +120 -0
  320. package/dist/mjs/functions/information/column/column.mjs.map +10 -0
  321. package/dist/mjs/functions/information/row/row.mjs +126 -0
  322. package/dist/mjs/functions/information/row/row.mjs.map +10 -0
  323. package/dist/mjs/functions/logical/and/and.mjs +84 -0
  324. package/dist/mjs/functions/logical/and/and.mjs.map +10 -0
  325. package/dist/mjs/functions/logical/if/if.mjs +167 -0
  326. package/dist/mjs/functions/logical/if/if.mjs.map +10 -0
  327. package/dist/mjs/functions/logical/iferror/iferror.mjs +98 -0
  328. package/dist/mjs/functions/logical/iferror/iferror.mjs.map +10 -0
  329. package/dist/mjs/functions/logical/or/or.mjs +84 -0
  330. package/dist/mjs/functions/logical/or/or.mjs.map +10 -0
  331. package/dist/mjs/functions/lookup/count/count-utils.mjs +35 -0
  332. package/dist/mjs/functions/lookup/count/count-utils.mjs.map +10 -0
  333. package/dist/mjs/functions/lookup/count/count.mjs +18 -0
  334. package/dist/mjs/functions/lookup/count/count.mjs.map +10 -0
  335. package/dist/mjs/functions/lookup/count/countif.mjs +68 -0
  336. package/dist/mjs/functions/lookup/count/countif.mjs.map +10 -0
  337. package/dist/mjs/functions/lookup/count/countifs.mjs +37 -0
  338. package/dist/mjs/functions/lookup/count/countifs.mjs.map +10 -0
  339. package/dist/mjs/functions/lookup/index-lookup/index-lookup.mjs +159 -0
  340. package/dist/mjs/functions/lookup/index-lookup/index-lookup.mjs.map +10 -0
  341. package/dist/mjs/functions/lookup/match/match.mjs +140 -0
  342. package/dist/mjs/functions/lookup/match/match.mjs.map +10 -0
  343. package/dist/mjs/functions/lookup/xlookup/xlookup.mjs +382 -0
  344. package/dist/mjs/functions/lookup/xlookup/xlookup.mjs.map +10 -0
  345. package/dist/mjs/functions/math/average/average-utils.mjs +44 -0
  346. package/dist/mjs/functions/math/average/average-utils.mjs.map +10 -0
  347. package/dist/mjs/functions/math/average/average.mjs +18 -0
  348. package/dist/mjs/functions/math/average/average.mjs.map +10 -0
  349. package/dist/mjs/functions/math/average/averageif.mjs +58 -0
  350. package/dist/mjs/functions/math/average/averageif.mjs.map +10 -0
  351. package/dist/mjs/functions/math/average/averageifs.mjs +35 -0
  352. package/dist/mjs/functions/math/average/averageifs.mjs.map +10 -0
  353. package/dist/mjs/functions/math/ceiling/ceiling.mjs +191 -0
  354. package/dist/mjs/functions/math/ceiling/ceiling.mjs.map +10 -0
  355. package/dist/mjs/functions/math/max/max-utils.mjs +43 -0
  356. package/dist/mjs/functions/math/max/max-utils.mjs.map +10 -0
  357. package/dist/mjs/functions/math/max/max.mjs +18 -0
  358. package/dist/mjs/functions/math/max/max.mjs.map +10 -0
  359. package/dist/mjs/functions/math/max/maxif.mjs +58 -0
  360. package/dist/mjs/functions/math/max/maxif.mjs.map +10 -0
  361. package/dist/mjs/functions/math/max/maxifs.mjs +35 -0
  362. package/dist/mjs/functions/math/max/maxifs.mjs.map +10 -0
  363. package/dist/mjs/functions/math/min/min-utils.mjs +43 -0
  364. package/dist/mjs/functions/math/min/min-utils.mjs.map +10 -0
  365. package/dist/mjs/functions/math/min/min.mjs +18 -0
  366. package/dist/mjs/functions/math/min/min.mjs.map +10 -0
  367. package/dist/mjs/functions/math/min/minif.mjs +58 -0
  368. package/dist/mjs/functions/math/min/minif.mjs.map +10 -0
  369. package/dist/mjs/functions/math/min/minifs.mjs +35 -0
  370. package/dist/mjs/functions/math/min/minifs.mjs.map +10 -0
  371. package/dist/mjs/functions/math/sum/sum.mjs +18 -0
  372. package/dist/mjs/functions/math/sum/sum.mjs.map +10 -0
  373. package/dist/mjs/functions/math/sum/sumif.mjs +58 -0
  374. package/dist/mjs/functions/math/sum/sumif.mjs.map +10 -0
  375. package/dist/mjs/functions/math/sum/sumifs.mjs +34 -0
  376. package/dist/mjs/functions/math/sum/sumifs.mjs.map +10 -0
  377. package/dist/mjs/functions/math/sum/summation-utils.mjs +27 -0
  378. package/dist/mjs/functions/math/sum/summation-utils.mjs.map +10 -0
  379. package/dist/mjs/functions/reference/address/address.mjs +135 -0
  380. package/dist/mjs/functions/reference/address/address.mjs.map +10 -0
  381. package/dist/mjs/functions/reference/indirect/indirect.mjs +74 -0
  382. package/dist/mjs/functions/reference/indirect/indirect.mjs.map +10 -0
  383. package/dist/mjs/functions/reference/offset/offset.mjs +205 -0
  384. package/dist/mjs/functions/reference/offset/offset.mjs.map +10 -0
  385. package/dist/mjs/functions/text/concatenate/concatenate.mjs +139 -0
  386. package/dist/mjs/functions/text/concatenate/concatenate.mjs.map +10 -0
  387. package/dist/mjs/functions/text/exact/exact.mjs +143 -0
  388. package/dist/mjs/functions/text/exact/exact.mjs.map +10 -0
  389. package/dist/mjs/functions/text/find/find.mjs +369 -0
  390. package/dist/mjs/functions/text/find/find.mjs.map +10 -0
  391. package/dist/mjs/functions/text/left/left.mjs +81 -0
  392. package/dist/mjs/functions/text/left/left.mjs.map +10 -0
  393. package/dist/mjs/functions/text/len/len.mjs +91 -0
  394. package/dist/mjs/functions/text/len/len.mjs.map +10 -0
  395. package/dist/mjs/functions/text/mid/mid.mjs +75 -0
  396. package/dist/mjs/functions/text/mid/mid.mjs.map +10 -0
  397. package/dist/mjs/functions/text/right/right.mjs +143 -0
  398. package/dist/mjs/functions/text/right/right.mjs.map +10 -0
  399. package/dist/mjs/functions/text/text-helpers.mjs +151 -0
  400. package/dist/mjs/functions/text/text-helpers.mjs.map +10 -0
  401. package/dist/mjs/functions/text/textjoin/textjoin.mjs +145 -0
  402. package/dist/mjs/functions/text/textjoin/textjoin.mjs.map +10 -0
  403. package/dist/mjs/package.json +5 -0
  404. package/dist/mjs/parser/ast.mjs +145 -0
  405. package/dist/mjs/parser/ast.mjs.map +10 -0
  406. package/dist/mjs/parser/formatter.mjs +289 -0
  407. package/dist/mjs/parser/formatter.mjs.map +10 -0
  408. package/dist/mjs/parser/grammar.mjs +345 -0
  409. package/dist/mjs/parser/grammar.mjs.map +10 -0
  410. package/dist/mjs/parser/lexer.mjs +412 -0
  411. package/dist/mjs/parser/lexer.mjs.map +10 -0
  412. package/dist/mjs/parser/parser.mjs +1692 -0
  413. package/dist/mjs/parser/parser.mjs.map +10 -0
  414. package/dist/mjs/react/hooks.mjs +16 -0
  415. package/dist/mjs/react/hooks.mjs.map +10 -0
  416. package/dist/types/core/ast-traverser.d.ts +28 -0
  417. package/dist/types/core/autofill-utils.d.ts +32 -0
  418. package/dist/types/core/engine.d.ts +184 -0
  419. package/dist/types/core/managers/cache-manager.d.ts +14 -0
  420. package/dist/types/core/managers/dependency-manager.d.ts +147 -0
  421. package/dist/types/core/managers/dependency-node.d.ts +13 -0
  422. package/dist/types/core/managers/evaluation-manager.d.ts +30 -0
  423. package/dist/types/core/managers/event-manager.d.ts +8 -0
  424. package/dist/types/core/managers/frontier-dependency-manager.d.ts +69 -0
  425. package/dist/types/core/managers/index.d.ts +7 -0
  426. package/dist/types/core/managers/isDependencyNode.d.ts +2 -0
  427. package/dist/types/core/managers/named-expression-manager.d.ts +101 -0
  428. package/dist/types/core/managers/range-eval-order-builder.d.ts +33 -0
  429. package/dist/types/core/managers/table-manager.d.ts +84 -0
  430. package/dist/types/core/managers/workbook-manager.d.ts +136 -0
  431. package/dist/types/core/map-serializer.d.ts +4 -0
  432. package/dist/types/core/named-expression-renamer.d.ts +21 -0
  433. package/dist/types/core/sheet-renamer.d.ts +28 -0
  434. package/dist/types/core/sheet-utils.d.ts +2 -0
  435. package/dist/types/core/table-renamer.d.ts +21 -0
  436. package/dist/types/core/types.d.ts +272 -0
  437. package/dist/types/core/utils/cell-address-parsing.test.d.ts +1 -0
  438. package/dist/types/core/utils/range-serializer.d.ts +22 -0
  439. package/dist/types/core/utils/range-serializer.test.d.ts +1 -0
  440. package/dist/types/core/utils/spreadsheet-visualizer.d.ts +30 -0
  441. package/dist/types/core/utils.d.ts +48 -0
  442. package/dist/types/core/workbook-renamer.d.ts +28 -0
  443. package/dist/types/debug/flags.d.ts +11 -0
  444. package/dist/types/evaluator/arithmetic/add/add.d.ts +2 -0
  445. package/dist/types/evaluator/arithmetic/add/add.test.d.ts +1 -0
  446. package/dist/types/evaluator/arithmetic/divide/divide.d.ts +2 -0
  447. package/dist/types/evaluator/arithmetic/divide/divide.test.d.ts +1 -0
  448. package/dist/types/evaluator/arithmetic/multiply/multiply.d.ts +2 -0
  449. package/dist/types/evaluator/arithmetic/multiply/multiply.test.d.ts +1 -0
  450. package/dist/types/evaluator/arithmetic/power/power.d.ts +2 -0
  451. package/dist/types/evaluator/arithmetic/power/power.test.d.ts +1 -0
  452. package/dist/types/evaluator/arithmetic/subtract/subtract.d.ts +2 -0
  453. package/dist/types/evaluator/arithmetic/subtract/subtract.test.d.ts +1 -0
  454. package/dist/types/evaluator/comparison/comparison-operators.test.d.ts +1 -0
  455. package/dist/types/evaluator/comparison/equals.d.ts +6 -0
  456. package/dist/types/evaluator/comparison/greater-than-or-equal.d.ts +6 -0
  457. package/dist/types/evaluator/comparison/greater-than.d.ts +6 -0
  458. package/dist/types/evaluator/comparison/less-than-or-equal.d.ts +6 -0
  459. package/dist/types/evaluator/comparison/less-than.d.ts +6 -0
  460. package/dist/types/evaluator/comparison/not-equals.d.ts +6 -0
  461. package/dist/types/evaluator/concatenation/concatenate.d.ts +6 -0
  462. package/dist/types/evaluator/concatenation/concatenate.test.d.ts +1 -0
  463. package/dist/types/evaluator/dependency-nodes/ast-evaluation-node.d.ts +12 -0
  464. package/dist/types/evaluator/dependency-nodes/base-eval-node.d.ts +31 -0
  465. package/dist/types/evaluator/dependency-nodes/cell-value-node.d.ts +10 -0
  466. package/dist/types/evaluator/dependency-nodes/empty-cell-evaluation-node.d.ts +17 -0
  467. package/dist/types/evaluator/dependency-nodes/spill-meta-node.d.ts +7 -0
  468. package/dist/types/evaluator/evaluate-scalar-operator.d.ts +12 -0
  469. package/dist/types/evaluator/evaluation-context.d.ts +66 -0
  470. package/dist/types/evaluator/evaluation-error.d.ts +20 -0
  471. package/dist/types/evaluator/formula-evaluator.d.ts +67 -0
  472. package/dist/types/evaluator/open-range-evaluator.test.d.ts +1 -0
  473. package/dist/types/evaluator/range-evaluation-node.d.ts +16 -0
  474. package/dist/types/functions/_template/template.d.ts +5 -0
  475. package/dist/types/functions/_template/template.test.d.ts +1 -0
  476. package/dist/types/functions/array/sequence/performance-test.d.ts +1 -0
  477. package/dist/types/functions/array/sequence/sequence.d.ts +14 -0
  478. package/dist/types/functions/array/sequence/sequence.test.d.ts +1 -0
  479. package/dist/types/functions/criteria-parser.d.ts +27 -0
  480. package/dist/types/functions/criteria-utils.d.ts +61 -0
  481. package/dist/types/functions/function-utils.d.ts +21 -0
  482. package/dist/types/functions/index.d.ts +2 -0
  483. package/dist/types/functions/information/cell/cell.d.ts +24 -0
  484. package/dist/types/functions/information/cell/cell.test.d.ts +1 -0
  485. package/dist/types/functions/information/column/column.d.ts +14 -0
  486. package/dist/types/functions/information/column/column.test.d.ts +1 -0
  487. package/dist/types/functions/information/row/row.d.ts +14 -0
  488. package/dist/types/functions/information/row/row.test.d.ts +1 -0
  489. package/dist/types/functions/logical/and/and.d.ts +5 -0
  490. package/dist/types/functions/logical/and/and.test.d.ts +1 -0
  491. package/dist/types/functions/logical/if/if.d.ts +5 -0
  492. package/dist/types/functions/logical/if/if.test.d.ts +1 -0
  493. package/dist/types/functions/logical/iferror/iferror.d.ts +5 -0
  494. package/dist/types/functions/logical/iferror/iferror.test.d.ts +1 -0
  495. package/dist/types/functions/logical/or/or.d.ts +5 -0
  496. package/dist/types/functions/logical/or/or.test.d.ts +1 -0
  497. package/dist/types/functions/lookup/count/count-utils.d.ts +14 -0
  498. package/dist/types/functions/lookup/count/count.d.ts +21 -0
  499. package/dist/types/functions/lookup/count/count.test.d.ts +1 -0
  500. package/dist/types/functions/lookup/count/countif.d.ts +26 -0
  501. package/dist/types/functions/lookup/count/countif.test.d.ts +1 -0
  502. package/dist/types/functions/lookup/count/countifs.d.ts +21 -0
  503. package/dist/types/functions/lookup/count/countifs.test.d.ts +1 -0
  504. package/dist/types/functions/lookup/index-lookup/index-lookup.d.ts +2 -0
  505. package/dist/types/functions/lookup/index-lookup/index-lookup.test.d.ts +1 -0
  506. package/dist/types/functions/lookup/match/match.d.ts +2 -0
  507. package/dist/types/functions/lookup/match/match.test.d.ts +1 -0
  508. package/dist/types/functions/lookup/xlookup/xlookup.d.ts +2 -0
  509. package/dist/types/functions/lookup/xlookup/xlookup.test.d.ts +1 -0
  510. package/dist/types/functions/math/average/average-utils.d.ts +10 -0
  511. package/dist/types/functions/math/average/average.d.ts +18 -0
  512. package/dist/types/functions/math/average/average.test.d.ts +1 -0
  513. package/dist/types/functions/math/average/averageif.d.ts +23 -0
  514. package/dist/types/functions/math/average/averageif.test.d.ts +1 -0
  515. package/dist/types/functions/math/average/averageifs.d.ts +21 -0
  516. package/dist/types/functions/math/average/averageifs.test.d.ts +1 -0
  517. package/dist/types/functions/math/ceiling/ceiling.d.ts +5 -0
  518. package/dist/types/functions/math/ceiling/ceiling.test.d.ts +1 -0
  519. package/dist/types/functions/math/max/max-utils.d.ts +20 -0
  520. package/dist/types/functions/math/max/max.d.ts +18 -0
  521. package/dist/types/functions/math/max/max.test.d.ts +1 -0
  522. package/dist/types/functions/math/max/maxif.d.ts +23 -0
  523. package/dist/types/functions/math/max/maxif.test.d.ts +1 -0
  524. package/dist/types/functions/math/max/maxifs.d.ts +21 -0
  525. package/dist/types/functions/math/max/maxifs.test.d.ts +1 -0
  526. package/dist/types/functions/math/min/min-utils.d.ts +20 -0
  527. package/dist/types/functions/math/min/min.d.ts +5 -0
  528. package/dist/types/functions/math/min/min.test.d.ts +1 -0
  529. package/dist/types/functions/math/min/minif.d.ts +23 -0
  530. package/dist/types/functions/math/min/minif.test.d.ts +1 -0
  531. package/dist/types/functions/math/min/minifs.d.ts +21 -0
  532. package/dist/types/functions/math/min/minifs.test.d.ts +1 -0
  533. package/dist/types/functions/math/sum/sum.d.ts +5 -0
  534. package/dist/types/functions/math/sum/sum.test.d.ts +1 -0
  535. package/dist/types/functions/math/sum/sumif.d.ts +23 -0
  536. package/dist/types/functions/math/sum/sumif.test.d.ts +1 -0
  537. package/dist/types/functions/math/sum/sumifs.d.ts +21 -0
  538. package/dist/types/functions/math/sum/sumifs.test.d.ts +1 -0
  539. package/dist/types/functions/math/sum/summation-utils.d.ts +19 -0
  540. package/dist/types/functions/reference/address/address.d.ts +18 -0
  541. package/dist/types/functions/reference/address/address.test.d.ts +1 -0
  542. package/dist/types/functions/reference/indirect/indirect.d.ts +20 -0
  543. package/dist/types/functions/reference/indirect/indirect.test.d.ts +1 -0
  544. package/dist/types/functions/reference/offset/offset.d.ts +23 -0
  545. package/dist/types/functions/reference/offset/offset.test.d.ts +1 -0
  546. package/dist/types/functions/text/concatenate/concatenate.d.ts +5 -0
  547. package/dist/types/functions/text/concatenate/concatenate.test.d.ts +1 -0
  548. package/dist/types/functions/text/exact/exact.d.ts +5 -0
  549. package/dist/types/functions/text/exact/exact.test.d.ts +1 -0
  550. package/dist/types/functions/text/find/find.d.ts +20 -0
  551. package/dist/types/functions/text/find/find.test.d.ts +1 -0
  552. package/dist/types/functions/text/left/left.d.ts +19 -0
  553. package/dist/types/functions/text/left/left.test.d.ts +1 -0
  554. package/dist/types/functions/text/len/len.d.ts +16 -0
  555. package/dist/types/functions/text/len/len.test.d.ts +1 -0
  556. package/dist/types/functions/text/mid/mid.d.ts +20 -0
  557. package/dist/types/functions/text/mid/mid.test.d.ts +1 -0
  558. package/dist/types/functions/text/right/right.d.ts +2 -0
  559. package/dist/types/functions/text/right/right.test.d.ts +1 -0
  560. package/dist/types/functions/text/text-helpers.d.ts +27 -0
  561. package/dist/types/functions/text/textjoin/textjoin.d.ts +5 -0
  562. package/dist/types/functions/text/textjoin/textjoin.test.d.ts +1 -0
  563. package/dist/types/parser/ast.d.ts +275 -0
  564. package/dist/types/parser/formatter.d.ts +6 -0
  565. package/dist/types/parser/grammar.d.ts +203 -0
  566. package/dist/types/parser/lexer.d.ts +144 -0
  567. package/dist/types/parser/parser.d.ts +159 -0
  568. package/dist/types/react/hooks.d.ts +5 -0
  569. package/package.json +41 -0
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/functions/criteria-utils.ts"],
4
+ "sourcesContent": [
5
+ "import {\n FormulaError,\n type FunctionDefinition,\n type FunctionEvaluationResult,\n type SingleEvaluationResult,\n type CellInfinity,\n type ValueEvaluationResult,\n type ErrorEvaluationResult,\n} from \"src/core/types\";\nimport type { EvaluationContext } from \"src/evaluator/evaluation-context\";\nimport type { FormulaEvaluator } from \"src/evaluator/formula-evaluator\";\nimport type { FunctionNode, ASTNode } from \"src/parser/ast\";\nimport {\n parseCriteria,\n matchesParsedCriteria,\n type ParsedCriteria,\n} from \"./criteria-parser.cjs\";\nimport { flags } from \"src/debug/flags\";\nimport { getRelativeRange } from \"src/core/utils\";\nimport type { LookupOrder } from \"src/core/managers\";\nimport {\n AwaitingEvaluationError,\n EvaluationError,\n} from \"src/evaluator/evaluation-error\";\n\n/**\n * Criteria pair for criteria-based functions\n */\nexport interface CriteriaPair {\n rangeResult: FunctionEvaluationResult;\n parsedCriteria: ParsedCriteria;\n}\n\n/**\n * Parse criteria pairs from function arguments\n * @param node - The function node\n * @param context - Evaluation context\n * @param evaluateNode - Node evaluation function\n * @param startIndex - Index to start parsing criteria pairs from (1 for IFS functions, 0 for COUNTIFS)\n * @returns Array of criteria pairs or error\n */\nexport function parseCriteriaPairs(\n this: FormulaEvaluator,\n node: FunctionNode,\n context: EvaluationContext,\n evaluateNode: (\n node: ASTNode,\n context: EvaluationContext\n ) => FunctionEvaluationResult,\n startIndex: number = 1\n): CriteriaPair[] | ErrorEvaluationResult {\n const criteriaPairs: CriteriaPair[] = [];\n\n for (let i = startIndex; i < node.args.length; i += 2) {\n const criteriaRangeResult = evaluateNode.call(this, node.args[i]!, context);\n if (\n criteriaRangeResult.type === \"error\" ||\n criteriaRangeResult.type === \"awaiting-evaluation\"\n ) {\n return criteriaRangeResult;\n }\n\n const criteriaResult = evaluateNode.call(this, node.args[i + 1]!, context);\n if (\n criteriaResult.type === \"error\" ||\n criteriaResult.type === \"awaiting-evaluation\"\n ) {\n return criteriaResult;\n }\n\n let result: ValueEvaluationResult;\n\n if (criteriaResult.type === \"spilled-values\") {\n // just take the first spilled value\n const firstSpilledValue = criteriaResult.evaluate(\n { x: 0, y: 0 },\n context\n );\n if (\n firstSpilledValue.type === \"error\" ||\n firstSpilledValue.type === \"awaiting-evaluation\"\n ) {\n return firstSpilledValue;\n } else {\n result = firstSpilledValue;\n }\n } else {\n result = criteriaResult;\n }\n\n const parsedCriteria = parseCriteria(result.result);\n if (parsedCriteria.type === \"error\") {\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n message: parsedCriteria.message,\n errAddress: context.dependencyNode,\n };\n }\n\n criteriaPairs.push({\n rangeResult: criteriaRangeResult,\n parsedCriteria,\n });\n }\n\n return criteriaPairs;\n}\n\n/**\n * Check if any criteria involves empty/non-empty cell matching\n */\nexport function hasEmptyCriteria(criteriaPairs: CriteriaPair[]): boolean {\n return criteriaPairs.some(\n ({ parsedCriteria }) =>\n parsedCriteria.type === \"exact\" &&\n parsedCriteria.value.type === \"string\" &&\n parsedCriteria.value.value === \"\"\n );\n}\n\n/**\n * Returns matching values from ranges based on criteria\n * @param evaluator - The function evaluator context\n * @param valueRangeResult - The range of values to process\n * @param criteriaPairs - Array of criteria pairs to match against\n * @param context - Evaluation context\n * @returns Array of SingleEvaluationResult for each matching cell - includes both values and errors\n * Consuming functions decide whether to skip errors or propagate them\n */\nexport function processMultiCriteriaValues(\n evaluator: FormulaEvaluator,\n valueRangeResult: FunctionEvaluationResult,\n criteriaPairs: CriteriaPair[],\n context: EvaluationContext,\n lookupOrder: LookupOrder\n):\n | { type: \"values\"; values: SingleEvaluationResult[] }\n | ErrorEvaluationResult {\n const results: SingleEvaluationResult[] = [];\n\n const criteriaPairWithError = criteriaPairs\n .map((pair) => pair.rangeResult)\n .find(\n (result) =>\n result.type === \"error\" || result.type === \"awaiting-evaluation\"\n );\n if (criteriaPairWithError) {\n return criteriaPairWithError;\n }\n\n // Check if this is an empty criteria case\n if (\n hasEmptyCriteria(criteriaPairs) &&\n valueRangeResult.type === \"spilled-values\"\n ) {\n return handleEmptyCriteriaSpilledValues(\n valueRangeResult,\n criteriaPairs,\n context\n );\n }\n\n // Handle different value range types\n if (valueRangeResult.type === \"value\") {\n // Single value case - check if all criteria match\n let allMatch = true;\n for (const { rangeResult, parsedCriteria } of criteriaPairs) {\n if (rangeResult.type === \"value\") {\n if (!matchesParsedCriteria(rangeResult.result, parsedCriteria)) {\n allMatch = false;\n break;\n }\n } else {\n // Single value but range criteria - doesn't make sense\n allMatch = false;\n break;\n }\n }\n\n if (allMatch) {\n results.push(valueRangeResult); // Add the entire result (ValueEvaluationResult)\n }\n } else if (valueRangeResult.type === \"spilled-values\") {\n // Range case - first validate dimensions using spillArea for efficiency\n const valueSpillArea = valueRangeResult.spillArea(context.cellAddress);\n\n // Check that all criteria ranges have compatible dimensions\n for (const { rangeResult } of criteriaPairs) {\n if (rangeResult.type === \"spilled-values\") {\n const criteriaSpillArea = rangeResult.spillArea(context.cellAddress);\n\n // Compare dimensions using relative ranges to get width/height\n const valueRelRange = getRelativeRange(\n valueSpillArea,\n context.cellAddress\n );\n const criteriaRelRange = getRelativeRange(\n criteriaSpillArea,\n context.cellAddress\n );\n\n // Check if dimensions are compatible\n const widthsMatch =\n (valueRelRange.width.type === \"infinity\" &&\n criteriaRelRange.width.type === \"infinity\") ||\n (valueRelRange.width.type === \"number\" &&\n criteriaRelRange.width.type === \"number\" &&\n valueRelRange.width.value === criteriaRelRange.width.value);\n\n const heightsMatch =\n (valueRelRange.height.type === \"infinity\" &&\n criteriaRelRange.height.type === \"infinity\") ||\n (valueRelRange.height.type === \"number\" &&\n criteriaRelRange.height.type === \"number\" &&\n valueRelRange.height.value === criteriaRelRange.height.value);\n\n if (!widthsMatch || !heightsMatch) {\n // Return #VALUE! error for dimension mismatch\n throw new EvaluationError(\n FormulaError.VALUE,\n \"Criteria range dimensions do not match value range dimensions\"\n );\n }\n }\n // Single values (type === \"value\") are compatible with any range size\n }\n\n // Get all cells to simplify position-based pairing\n const valueResults = valueRangeResult.evaluateAllCells.call(evaluator, {\n context,\n evaluate: valueRangeResult.evaluate,\n origin: context.cellAddress,\n lookupOrder,\n });\n\n // Get criteria ranges (or track if single value)\n const criteriaResultsArrays = criteriaPairs.map(({ rangeResult }) => {\n if (rangeResult.type === \"spilled-values\") {\n const criteriaResults = rangeResult.evaluateAllCells.call(evaluator, {\n context,\n evaluate: rangeResult.evaluate,\n origin: context.cellAddress,\n lookupOrder,\n });\n return { type: \"array\" as const, results: criteriaResults };\n } else {\n // Single value - we'll use it for all positions\n return { type: \"single\" as const, value: rangeResult };\n }\n });\n\n // Create maps from position to value for each criteria range\n const criteriaMaps = criteriaResultsArrays.map((criteriaData) => {\n if (criteriaData.type === \"single\") {\n return null; // Single values don't need a map\n }\n if (criteriaData.results.type !== \"values\") {\n return null;\n }\n const map = new Map<string, SingleEvaluationResult>();\n for (const { result, relativePos } of criteriaData.results.values) {\n const key = `${relativePos.x},${relativePos.y}`;\n map.set(key, result);\n }\n return map;\n });\n\n if (valueResults.type !== \"values\") {\n return valueResults;\n }\n\n // Iterate through each value position\n for (const valueCell of valueResults.values) {\n if (!valueCell) {\n continue;\n }\n\n const posKey = `${valueCell.relativePos.x},${valueCell.relativePos.y}`;\n\n // Check if all criteria match for this position\n let allMatch = true;\n for (let j = 0; j < criteriaPairs.length; j++) {\n let criteriaCell: SingleEvaluationResult | undefined;\n\n if (criteriaResultsArrays[j]!.type === \"single\") {\n // Single value - use it for all positions\n criteriaCell = criteriaResultsArrays[j]!.value;\n } else {\n // Array - look up by position, treat missing as empty\n criteriaCell = criteriaMaps[j]?.get(posKey);\n }\n\n // If criteriaCell is undefined, treat it as an empty cell\n if (!criteriaCell) {\n // Check if the criteria matches empty cells\n const parsedCriteria = criteriaPairs[j]!.parsedCriteria;\n const emptyValue = { type: \"string\" as const, value: \"\" };\n if (!matchesParsedCriteria(emptyValue, parsedCriteria)) {\n allMatch = false;\n break;\n }\n } else if (criteriaCell.type === \"error\") {\n allMatch = false;\n break;\n } else if (criteriaCell.type === \"value\") {\n if (\n !matchesParsedCriteria(\n criteriaCell.result,\n criteriaPairs[j]!.parsedCriteria\n )\n ) {\n allMatch = false;\n break;\n }\n } else if (criteriaCell.type === \"awaiting-evaluation\") {\n return criteriaCell;\n } else {\n allMatch = false;\n break;\n }\n }\n\n if (allMatch) {\n results.push(valueCell.result); // Add the entire SingleEvaluationResult (includes errors and values)\n }\n }\n }\n\n return { type: \"values\", values: results };\n}\n\n/**\n * Validate multi-criteria function arguments (odd number, min 3)\n */\nexport function validateMultiCriteriaArgs(\n functionName: string,\n argCount: number,\n context: EvaluationContext\n): ErrorEvaluationResult | null {\n if (argCount < 3 || (argCount - 1) % 2 !== 0) {\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n message: `${functionName} function requires an odd number of arguments (min 3): value_range, criteria_range1, criteria1, [criteria_range2, criteria2], ...`,\n errAddress: context.dependencyNode,\n };\n }\n return null;\n}\n\n/**\n * Validate COUNTIFS function arguments (even number, min 2)\n */\nexport function validateCountifsArgs(\n argCount: number,\n context: EvaluationContext\n): ErrorEvaluationResult | null {\n if (argCount < 2 || argCount % 2 !== 0) {\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n message:\n \"COUNTIFS function requires an even number of arguments (min 2): criteria_range1, criteria1, [criteria_range2, criteria2], ...\",\n errAddress: context.dependencyNode,\n };\n }\n return null;\n}\n\n/**\n * Validate single criteria function arguments (2 or 3)\n */\nexport function validateSingleCriteriaArgs(\n functionName: string,\n argCount: number,\n context: EvaluationContext\n): ErrorEvaluationResult | null {\n if (argCount < 2 || argCount > 3) {\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n message: `${functionName} function takes 2 or 3 arguments`,\n errAddress: context.dependencyNode,\n };\n }\n return null;\n}\n\n/**\n * Result type for processInfinity - either return infinity immediately or continue with updated state\n */\nexport type ProcessInfinityResult<T> =\n | { type: \"infinity\"; infinity: CellInfinity }\n | { type: \"state\"; state: T };\n\n/**\n * Handle empty cell criteria for spilled values - returns matching values for empty criteria cases\n * This is needed when criteria like \"=\" (empty) or \"<>\" (non-empty) are used with ranges\n *\n * @param valueRangeResult - The range of values to process\n * @param criteriaPairs - Array of criteria pairs\n * @param context - Evaluation context\n * @returns Array of matching values\n */\nfunction handleEmptyCriteriaSpilledValues(\n valueRangeResult: FunctionEvaluationResult,\n criteriaPairs: CriteriaPair[],\n context: EvaluationContext\n):\n | { type: \"values\"; values: SingleEvaluationResult[] }\n | ErrorEvaluationResult {\n if (\n !hasEmptyCriteria(criteriaPairs) ||\n valueRangeResult.type !== \"spilled-values\"\n ) {\n throw new Error(\"Not an empty criteria case\");\n }\n const results: SingleEvaluationResult[] = [];\n const valueSpillArea = valueRangeResult.spillArea(context.cellAddress);\n\n // Check if this is an infinite range and we are counting empty cells - throw error\n if (\n valueSpillArea.end.col.type === \"infinity\" ||\n valueSpillArea.end.row.type === \"infinity\"\n ) {\n throw new EvaluationError(\n FormulaError.VALUE,\n \"Can not process infinite ranges with empty cell criteria\"\n );\n }\n\n // Finite range - iterate over all cells in spill areas\n if (\n valueSpillArea.end.col.type === \"number\" &&\n valueSpillArea.end.row.type === \"number\"\n ) {\n for (\n let row = valueSpillArea.start.row;\n row <= valueSpillArea.end.row.value;\n row++\n ) {\n for (\n let col = valueSpillArea.start.col;\n col <= valueSpillArea.end.col.value;\n col++\n ) {\n const valueCell = valueRangeResult.evaluate(\n {\n x: col - valueSpillArea.start.col,\n y: row - valueSpillArea.start.row,\n },\n context\n );\n\n // Check all criteria for this position\n let allMatch = true;\n for (const { rangeResult, parsedCriteria } of criteriaPairs) {\n let criteriaCell: SingleEvaluationResult | undefined;\n\n if (rangeResult.type === \"spilled-values\") {\n const criteriaSpillArea = rangeResult.spillArea(\n context.cellAddress\n );\n const criteriaRow =\n row - valueSpillArea.start.row + criteriaSpillArea.start.row;\n const criteriaCol =\n col - valueSpillArea.start.col + criteriaSpillArea.start.col;\n\n if (\n criteriaRow <=\n (criteriaSpillArea.end.row.type === \"number\"\n ? criteriaSpillArea.end.row.value\n : Infinity) &&\n criteriaCol <=\n (criteriaSpillArea.end.col.type === \"number\"\n ? criteriaSpillArea.end.col.value\n : Infinity)\n ) {\n criteriaCell = rangeResult.evaluate(\n {\n x: criteriaCol - criteriaSpillArea.start.col,\n y: criteriaRow - criteriaSpillArea.start.row,\n },\n context\n );\n }\n } else if (rangeResult.type === \"value\") {\n criteriaCell = rangeResult;\n }\n\n // Check if criteria matches (including empty cell logic)\n const isEmptyCriteria =\n (parsedCriteria.type === \"exact\" &&\n parsedCriteria.value.type === \"string\" &&\n parsedCriteria.value.value === \"\") ||\n (parsedCriteria.type === \"comparison\" &&\n parsedCriteria.operator === \"<>\" &&\n parsedCriteria.value.type === \"string\" &&\n parsedCriteria.value.value === \"\");\n\n if (isEmptyCriteria) {\n // Check if criteria cell matches empty condition\n const isEmpty =\n !criteriaCell ||\n (criteriaCell.type === \"value\" &&\n criteriaCell.result.type === \"string\" &&\n criteriaCell.result.value === \"\");\n\n const shouldMatch =\n parsedCriteria.type === \"exact\" ? isEmpty : !isEmpty;\n if (!shouldMatch) {\n allMatch = false;\n break;\n }\n } else {\n // Regular criteria matching\n if (\n !criteriaCell ||\n criteriaCell.type !== \"value\" ||\n !matchesParsedCriteria(criteriaCell.result, parsedCriteria)\n ) {\n allMatch = false;\n break;\n }\n }\n }\n\n if (allMatch && valueCell) {\n results.push(valueCell); // Add the matching cell result\n }\n }\n }\n }\n\n return { type: \"values\", values: results };\n}\n"
6
+ ],
7
+ "mappings": "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",
8
+ "debugId": "5ACCD9DEBF70FD2764756E2164756E21",
9
+ "names": []
10
+ }
@@ -0,0 +1,63 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropNames = Object.getOwnPropertyNames;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __moduleCache = /* @__PURE__ */ new WeakMap;
6
+ var __toCommonJS = (from) => {
7
+ var entry = __moduleCache.get(from), desc;
8
+ if (entry)
9
+ return entry;
10
+ entry = __defProp({}, "__esModule", { value: true });
11
+ if (from && typeof from === "object" || typeof from === "function")
12
+ __getOwnPropNames(from).map((key) => !__hasOwnProp.call(entry, key) && __defProp(entry, key, {
13
+ get: () => from[key],
14
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
15
+ }));
16
+ __moduleCache.set(from, entry);
17
+ return entry;
18
+ };
19
+ var __export = (target, all) => {
20
+ for (var name in all)
21
+ __defProp(target, name, {
22
+ get: all[name],
23
+ enumerable: true,
24
+ configurable: true,
25
+ set: (newValue) => all[name] = () => newValue
26
+ });
27
+ };
28
+
29
+ // src/functions/function-utils.ts
30
+ var exports_function_utils = {};
31
+ __export(exports_function_utils, {
32
+ createArgumentIterator: () => createArgumentIterator
33
+ });
34
+ module.exports = __toCommonJS(exports_function_utils);
35
+ function createArgumentIterator(evaluator, node, context, lookupOrder) {
36
+ const results = [];
37
+ for (const arg of node.args) {
38
+ const result = evaluator.evaluateNode(arg, context);
39
+ if (result.type === "spilled-values") {
40
+ const cellValues = result.evaluateAllCells.call(evaluator, {
41
+ context,
42
+ evaluate: result.evaluate,
43
+ origin: context.cellAddress,
44
+ lookupOrder
45
+ });
46
+ if (cellValues.type === "awaiting-evaluation") {
47
+ return cellValues;
48
+ }
49
+ if (cellValues.type === "error") {
50
+ results.push(cellValues);
51
+ } else {
52
+ for (const cellValue of cellValues.values) {
53
+ results.push(cellValue.result);
54
+ }
55
+ }
56
+ } else {
57
+ results.push(result);
58
+ }
59
+ }
60
+ return { type: "values", values: results };
61
+ }
62
+
63
+ //# debugId=ACA075060E20030D64756E2164756E21
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/functions/function-utils.ts"],
4
+ "sourcesContent": [
5
+ "import type { LookupOrder } from \"src/core/managers\";\nimport {\n type ErrorEvaluationResult,\n type SingleEvaluationResult,\n} from \"src/core/types\";\nimport { getCellReference } from \"src/core/utils\";\nimport type { EvaluationContext } from \"src/evaluator/evaluation-context\";\nimport { AwaitingEvaluationError } from \"src/evaluator/evaluation-error\";\nimport type { FormulaEvaluator } from \"src/evaluator/formula-evaluator\";\nimport type { FunctionNode } from \"src/parser/ast\";\n\n/**\n * Creates an array of all values from arguments of a function node\n * Returns SingleEvaluationResult for each value found in the arguments\n *\n * This is a shared utility used by all basic aggregation functions (SUM, MIN, MAX, AVERAGE)\n * to iterate over their arguments in a consistent way.\n *\n * @param evaluator - The formula evaluator instance\n * @param node - The function node containing arguments\n * @param context - The evaluation context\n * @returns Array of SingleEvaluationResult for each value in the arguments\n */\nexport function createArgumentIterator(\n evaluator: FormulaEvaluator,\n node: FunctionNode,\n context: EvaluationContext,\n lookupOrder: LookupOrder\n): { type: \"values\"; values: SingleEvaluationResult[] } | ErrorEvaluationResult {\n const results: SingleEvaluationResult[] = [];\n\n for (const arg of node.args) {\n const result = evaluator.evaluateNode(arg, context);\n\n if (result.type === \"spilled-values\") {\n // Get all cells in the spilled range\n const cellValues = result.evaluateAllCells.call(evaluator, {\n context,\n evaluate: result.evaluate,\n origin: context.cellAddress,\n lookupOrder,\n });\n\n if (cellValues.type === \"awaiting-evaluation\") {\n return cellValues;\n }\n\n if (cellValues.type === \"error\") {\n results.push(cellValues);\n } else {\n for (const cellValue of cellValues.values) {\n results.push(cellValue.result);\n }\n }\n } else {\n results.push(result);\n }\n }\n\n return { type: \"values\", values: results };\n}\n"
6
+ ],
7
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuBO,SAAS,sBAAsB,CACpC,WACA,MACA,SACA,aAC8E;AAAA,EAC9E,MAAM,UAAoC,CAAC;AAAA,EAE3C,WAAW,OAAO,KAAK,MAAM;AAAA,IAC3B,MAAM,SAAS,UAAU,aAAa,KAAK,OAAO;AAAA,IAElD,IAAI,OAAO,SAAS,kBAAkB;AAAA,MAEpC,MAAM,aAAa,OAAO,iBAAiB,KAAK,WAAW;AAAA,QACzD;AAAA,QACA,UAAU,OAAO;AAAA,QACjB,QAAQ,QAAQ;AAAA,QAChB;AAAA,MACF,CAAC;AAAA,MAED,IAAI,WAAW,SAAS,uBAAuB;AAAA,QAC7C,OAAO;AAAA,MACT;AAAA,MAEA,IAAI,WAAW,SAAS,SAAS;AAAA,QAC/B,QAAQ,KAAK,UAAU;AAAA,MACzB,EAAO;AAAA,QACL,WAAW,aAAa,WAAW,QAAQ;AAAA,UACzC,QAAQ,KAAK,UAAU,MAAM;AAAA,QAC/B;AAAA;AAAA,IAEJ,EAAO;AAAA,MACL,QAAQ,KAAK,MAAM;AAAA;AAAA,EAEvB;AAAA,EAEA,OAAO,EAAE,MAAM,UAAU,QAAQ,QAAQ;AAAA;",
8
+ "debugId": "ACA075060E20030D64756E2164756E21",
9
+ "names": []
10
+ }
@@ -0,0 +1,125 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropNames = Object.getOwnPropertyNames;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __moduleCache = /* @__PURE__ */ new WeakMap;
6
+ var __toCommonJS = (from) => {
7
+ var entry = __moduleCache.get(from), desc;
8
+ if (entry)
9
+ return entry;
10
+ entry = __defProp({}, "__esModule", { value: true });
11
+ if (from && typeof from === "object" || typeof from === "function")
12
+ __getOwnPropNames(from).map((key) => !__hasOwnProp.call(entry, key) && __defProp(entry, key, {
13
+ get: () => from[key],
14
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
15
+ }));
16
+ __moduleCache.set(from, entry);
17
+ return entry;
18
+ };
19
+ var __export = (target, all) => {
20
+ for (var name in all)
21
+ __defProp(target, name, {
22
+ get: all[name],
23
+ enumerable: true,
24
+ configurable: true,
25
+ set: (newValue) => all[name] = () => newValue
26
+ });
27
+ };
28
+
29
+ // src/functions/index.ts
30
+ var exports_functions = {};
31
+ __export(exports_functions, {
32
+ functions: () => functions
33
+ });
34
+ module.exports = __toCommonJS(exports_functions);
35
+ var import_sequence = require("./array/sequence/sequence.cjs");
36
+ var import_index_lookup = require("./lookup/index-lookup/index-lookup.cjs");
37
+ var import_match = require("./lookup/match/match.cjs");
38
+ var import_count = require("./lookup/count/count.cjs");
39
+ var import_countif = require("./lookup/count/countif.cjs");
40
+ var import_average = require("./math/average/average.cjs");
41
+ var import_averageif = require("./math/average/averageif.cjs");
42
+ var import_averageifs = require("./math/average/averageifs.cjs");
43
+ var import_max = require("./math/max/max.cjs");
44
+ var import_maxifs = require("./math/max/maxifs.cjs");
45
+ var import_min = require("./math/min/min.cjs");
46
+ var import_minifs = require("./math/min/minifs.cjs");
47
+ var import_sum = require("./math/sum/sum.cjs");
48
+ var import_sumif = require("./math/sum/sumif.cjs");
49
+ var import_sumifs = require("./math/sum/sumifs.cjs");
50
+ var import_countifs = require("./lookup/count/countifs.cjs");
51
+ var import_maxif = require("./math/max/maxif.cjs");
52
+ var import_minif = require("./math/min/minif.cjs");
53
+ var import_ceiling = require("./math/ceiling/ceiling.cjs");
54
+ var import_exact = require("./text/exact/exact.cjs");
55
+ var import_find = require("./text/find/find.cjs");
56
+ var import_left = require("./text/left/left.cjs");
57
+ var import_mid = require("./text/mid/mid.cjs");
58
+ var import_len = require("./text/len/len.cjs");
59
+ var import_right = require("./text/right/right.cjs");
60
+ var import_concatenate = require("./text/concatenate/concatenate.cjs");
61
+ var import_and = require("./logical/and/and.cjs");
62
+ var import_if = require("./logical/if/if.cjs");
63
+ var import_iferror = require("./logical/iferror/iferror.cjs");
64
+ var import_xlookup = require("./lookup/xlookup/xlookup.cjs");
65
+ var import_or = require("./logical/or/or.cjs");
66
+ var import_textjoin = require("./text/textjoin/textjoin.cjs");
67
+ var import_row = require("./information/row/row.cjs");
68
+ var import_column = require("./information/column/column.cjs");
69
+ var import_cell = require("./information/cell/cell.cjs");
70
+ var import_address = require("./reference/address/address.cjs");
71
+ var import_indirect = require("./reference/indirect/indirect.cjs");
72
+ var import_offset = require("./reference/offset/offset.cjs");
73
+ var buildFunctionIndex = (functions) => {
74
+ return Object.fromEntries(Object.entries(functions).flatMap(([name, func]) => {
75
+ const base = [[name, func]];
76
+ if (func.aliases) {
77
+ func.aliases.forEach((alias) => {
78
+ base.push([alias, func]);
79
+ });
80
+ }
81
+ return base;
82
+ }));
83
+ };
84
+ var functions = buildFunctionIndex({
85
+ ADDRESS: import_address.ADDRESS,
86
+ AND: import_and.AND,
87
+ AVERAGE: import_average.AVERAGE,
88
+ AVERAGEIF: import_averageif.AVERAGEIF,
89
+ AVERAGEIFS: import_averageifs.AVERAGEIFS,
90
+ CEILING: import_ceiling.CEILING,
91
+ CELL: import_cell.CELL,
92
+ COLUMN: import_column.COLUMN,
93
+ CONCATENATE: import_concatenate.CONCATENATE,
94
+ COUNT: import_count.COUNT,
95
+ COUNTIF: import_countif.COUNTIF,
96
+ COUNTIFS: import_countifs.COUNTIFS,
97
+ EXACT: import_exact.EXACT,
98
+ FIND: import_find.FIND,
99
+ IF: import_if.IF,
100
+ IFERROR: import_iferror.IFERROR,
101
+ INDEX: import_index_lookup.INDEX,
102
+ INDIRECT: import_indirect.INDIRECT,
103
+ LEFT: import_left.LEFT,
104
+ LEN: import_len.LEN,
105
+ MATCH: import_match.MATCH,
106
+ MAX: import_max.MAX,
107
+ MAXIF: import_maxif.MAXIF,
108
+ MAXIFS: import_maxifs.MAXIFS,
109
+ MID: import_mid.MID,
110
+ MIN: import_min.MIN,
111
+ MINIF: import_minif.MINIF,
112
+ MINIFS: import_minifs.MINIFS,
113
+ OFFSET: import_offset.OFFSET,
114
+ OR: import_or.OR,
115
+ RIGHT: import_right.RIGHT,
116
+ ROW: import_row.ROW,
117
+ SEQUENCE: import_sequence.SEQUENCE,
118
+ SUM: import_sum.SUM,
119
+ SUMIF: import_sumif.SUMIF,
120
+ SUMIFS: import_sumifs.SUMIFS,
121
+ TEXTJOIN: import_textjoin.TEXTJOIN,
122
+ XLOOKUP: import_xlookup.XLOOKUP
123
+ });
124
+
125
+ //# debugId=DFDC71312AB793C064756E2164756E21
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/functions/index.ts"],
4
+ "sourcesContent": [
5
+ "import type { FunctionDefinition } from \"src/core/types\";\n// import { arrayFunctions } from \"./array/array-functions.cjs\";\n// import { infoFunctions } from \"./info/info-functions.cjs\";\n// import { logicalComparisonFunctions } from \"./logical/comparisons.cjs\";\n// import { logicalConditionFunctions } from \"./logical/conditions.cjs\";\n// import { lookupFunctions } from \"./lookup/lookup-functions.cjs\";\n// import { advancedMathFunctions } from \"./math/advanced.cjs\";\n// import { basicMathFunctions } from \"./math/basic.cjs\";\n// import { textFunctions } from \"./text/string-functions.cjs\";\nimport { SEQUENCE } from \"./array/sequence/sequence.cjs\";\nimport { INDEX } from \"./lookup/index-lookup/index-lookup.cjs\"; // Fixed import path\nimport { MATCH } from \"./lookup/match/match.cjs\";\nimport { COUNT } from \"./lookup/count/count.cjs\";\nimport { COUNTIF } from \"./lookup/count/countif.cjs\";\nimport { AVERAGE } from \"./math/average/average.cjs\";\nimport { AVERAGEIF } from \"./math/average/averageif.cjs\";\nimport { AVERAGEIFS } from \"./math/average/averageifs.cjs\";\nimport { MAX } from \"./math/max/max.cjs\";\nimport { MAXIFS } from \"./math/max/maxifs.cjs\";\nimport { MIN } from \"./math/min/min.cjs\";\nimport { MINIFS } from \"./math/min/minifs.cjs\";\nimport { SUM } from \"./math/sum/sum.cjs\";\nimport { SUMIF } from \"./math/sum/sumif.cjs\";\nimport { SUMIFS } from \"./math/sum/sumifs.cjs\";\nimport { COUNTIFS } from \"./lookup/count/countifs.cjs\";\nimport { MAXIF } from \"./math/max/maxif.cjs\";\nimport { MINIF } from \"./math/min/minif.cjs\";\nimport { CEILING } from \"./math/ceiling/ceiling.cjs\";\nimport { EXACT } from \"./text/exact/exact.cjs\";\nimport { FIND } from \"./text/find/find.cjs\";\nimport { LEFT } from \"./text/left/left.cjs\";\nimport { MID } from \"./text/mid/mid.cjs\";\nimport { LEN } from \"./text/len/len.cjs\";\nimport { RIGHT } from \"./text/right/right.cjs\";\nimport { CONCATENATE } from \"./text/concatenate/concatenate.cjs\";\nimport { AND } from \"./logical/and/and.cjs\";\nimport { IF } from \"./logical/if/if.cjs\";\nimport { IFERROR } from \"./logical/iferror/iferror.cjs\";\nimport { XLOOKUP } from \"./lookup/xlookup/xlookup.cjs\";\nimport { OR } from \"./logical/or/or.cjs\";\nimport { TEXTJOIN } from \"./text/textjoin/textjoin.cjs\";\nimport { ROW } from \"./information/row/row.cjs\";\nimport { COLUMN } from \"./information/column/column.cjs\";\nimport { CELL } from \"./information/cell/cell.cjs\";\nimport { ADDRESS } from \"./reference/address/address.cjs\";\nimport { INDIRECT } from \"./reference/indirect/indirect.cjs\";\nimport { OFFSET } from \"./reference/offset/offset.cjs\";\n\nconst buildFunctionIndex = (functions: Record<string, FunctionDefinition>) => {\n return Object.fromEntries(\n Object.entries(functions).flatMap(([name, func]) => {\n const base: [string, FunctionDefinition][] = [[name, func]];\n if (func.aliases) {\n func.aliases.forEach((alias) => {\n base.push([alias, func]);\n });\n }\n return base;\n })\n );\n};\n\nexport const functions: Record<string, FunctionDefinition> = buildFunctionIndex(\n {\n ADDRESS,\n AND,\n AVERAGE,\n AVERAGEIF,\n AVERAGEIFS,\n CEILING,\n CELL,\n COLUMN,\n CONCATENATE,\n COUNT,\n COUNTIF,\n COUNTIFS,\n EXACT,\n FIND,\n IF,\n IFERROR,\n INDEX,\n INDIRECT,\n LEFT,\n LEN,\n MATCH,\n MAX,\n MAXIF,\n MAXIFS,\n MID,\n MIN,\n MINIF,\n MINIFS,\n OFFSET,\n OR,\n RIGHT,\n ROW,\n SEQUENCE,\n SUM,\n SUMIF,\n SUMIFS,\n TEXTJOIN,\n XLOOKUP,\n }\n);\n"
6
+ ],
7
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AASyB,IAAzB;AACsB,IAAtB;AACsB,IAAtB;AACsB,IAAtB;AACwB,IAAxB;AACwB,IAAxB;AAC0B,IAA1B;AAC2B,IAA3B;AACoB,IAApB;AACuB,IAAvB;AACoB,IAApB;AACuB,IAAvB;AACoB,IAApB;AACsB,IAAtB;AACuB,IAAvB;AACyB,IAAzB;AACsB,IAAtB;AACsB,IAAtB;AACwB,IAAxB;AACsB,IAAtB;AACqB,IAArB;AACqB,IAArB;AACoB,IAApB;AACoB,IAApB;AACsB,IAAtB;AAC4B,IAA5B;AACoB,IAApB;AACmB,IAAnB;AACwB,IAAxB;AACwB,IAAxB;AACmB,IAAnB;AACyB,IAAzB;AACoB,IAApB;AACuB,IAAvB;AACqB,IAArB;AACwB,IAAxB;AACyB,IAAzB;AACuB,IAAvB;AAEA,IAAM,qBAAqB,CAAC,cAAkD;AAAA,EAC5E,OAAO,OAAO,YACZ,OAAO,QAAQ,SAAS,EAAE,QAAQ,EAAE,MAAM,UAAU;AAAA,IAClD,MAAM,OAAuC,CAAC,CAAC,MAAM,IAAI,CAAC;AAAA,IAC1D,IAAI,KAAK,SAAS;AAAA,MAChB,KAAK,QAAQ,QAAQ,CAAC,UAAU;AAAA,QAC9B,KAAK,KAAK,CAAC,OAAO,IAAI,CAAC;AAAA,OACxB;AAAA,IACH;AAAA,IACA,OAAO;AAAA,GACR,CACH;AAAA;AAGK,IAAM,YAAgD,mBAC3D;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CACF;",
8
+ "debugId": "DFDC71312AB793C064756E2164756E21",
9
+ "names": []
10
+ }
@@ -0,0 +1,196 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropNames = Object.getOwnPropertyNames;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __moduleCache = /* @__PURE__ */ new WeakMap;
6
+ var __toCommonJS = (from) => {
7
+ var entry = __moduleCache.get(from), desc;
8
+ if (entry)
9
+ return entry;
10
+ entry = __defProp({}, "__esModule", { value: true });
11
+ if (from && typeof from === "object" || typeof from === "function")
12
+ __getOwnPropNames(from).map((key) => !__hasOwnProp.call(entry, key) && __defProp(entry, key, {
13
+ get: () => from[key],
14
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
15
+ }));
16
+ __moduleCache.set(from, entry);
17
+ return entry;
18
+ };
19
+ var __export = (target, all) => {
20
+ for (var name in all)
21
+ __defProp(target, name, {
22
+ get: all[name],
23
+ enumerable: true,
24
+ configurable: true,
25
+ set: (newValue) => all[name] = () => newValue
26
+ });
27
+ };
28
+
29
+ // src/functions/information/cell/cell.ts
30
+ var exports_cell = {};
31
+ __export(exports_cell, {
32
+ CELL: () => CELL
33
+ });
34
+ module.exports = __toCommonJS(exports_cell);
35
+ var import_types = require("src/core/types");
36
+ var import_utils = require("src/core/utils");
37
+ var CELL = {
38
+ name: "CELL",
39
+ evaluate: function(node, context) {
40
+ if (node.args.length === 0 || node.args.length > 2) {
41
+ return {
42
+ type: "error",
43
+ err: import_types.FormulaError.VALUE,
44
+ message: "CELL function requires 1 or 2 arguments",
45
+ errAddress: context.dependencyNode
46
+ };
47
+ }
48
+ const infoTypeResult = this.evaluateNode(node.args[0], context);
49
+ if (infoTypeResult.type === "error" || infoTypeResult.type === "awaiting-evaluation") {
50
+ return infoTypeResult;
51
+ }
52
+ if (infoTypeResult.type !== "value" || infoTypeResult.result.type !== "string") {
53
+ return {
54
+ type: "error",
55
+ err: import_types.FormulaError.VALUE,
56
+ message: "CELL function info_type must be a string",
57
+ errAddress: context.dependencyNode
58
+ };
59
+ }
60
+ const infoType = infoTypeResult.result.value.toLowerCase();
61
+ let referenceCell = context.cellAddress;
62
+ let referenceValue = null;
63
+ if (node.args.length === 2) {
64
+ const refArg = node.args[1];
65
+ const refResult = this.evaluateNode(refArg, context);
66
+ if (refResult.type === "error" || refResult.type === "awaiting-evaluation") {
67
+ return refResult;
68
+ }
69
+ const cellOrRange = refResult.type === "spilled-values" ? refResult.sourceCell ?? refResult.sourceRange : refResult.sourceCell;
70
+ if (!cellOrRange) {
71
+ return {
72
+ type: "error",
73
+ err: import_types.FormulaError.VALUE,
74
+ message: "CELL function requires a cell or range reference",
75
+ errAddress: context.dependencyNode
76
+ };
77
+ }
78
+ if (import_utils.isCellAddress(cellOrRange)) {
79
+ referenceCell = cellOrRange;
80
+ } else if (import_utils.isRangeAddress(cellOrRange)) {
81
+ referenceCell = {
82
+ sheetName: cellOrRange.sheetName,
83
+ workbookName: cellOrRange.workbookName,
84
+ colIndex: cellOrRange.range.start.col,
85
+ rowIndex: cellOrRange.range.start.row
86
+ };
87
+ } else {
88
+ return {
89
+ type: "error",
90
+ err: import_types.FormulaError.VALUE,
91
+ message: "CELL function requires a cell or range reference",
92
+ errAddress: context.dependencyNode
93
+ };
94
+ }
95
+ if (infoType === "contents" || infoType === "type") {
96
+ if (refResult.type === "value") {
97
+ referenceValue = refResult.result;
98
+ } else if (refResult.type === "spilled-values") {
99
+ const cellResult = refResult.evaluate({ x: 0, y: 0 }, context);
100
+ if (cellResult && cellResult.type === "value") {
101
+ referenceValue = cellResult.result;
102
+ }
103
+ }
104
+ }
105
+ }
106
+ switch (infoType) {
107
+ case "row":
108
+ return {
109
+ type: "value",
110
+ result: { type: "number", value: referenceCell.rowIndex + 1 }
111
+ };
112
+ case "col":
113
+ return {
114
+ type: "value",
115
+ result: { type: "number", value: referenceCell.colIndex + 1 }
116
+ };
117
+ case "address": {
118
+ const col = columnNumberToLetter(referenceCell.colIndex + 1);
119
+ const row = referenceCell.rowIndex + 1;
120
+ let address = `$${col}$${row}`;
121
+ if (referenceCell.sheetName !== context.cellAddress.sheetName) {
122
+ address = `${referenceCell.sheetName}!${address}`;
123
+ }
124
+ return {
125
+ type: "value",
126
+ result: { type: "string", value: address }
127
+ };
128
+ }
129
+ case "contents":
130
+ if (referenceValue !== null) {
131
+ if (referenceValue.type === "string" && referenceValue.value === "") {
132
+ return {
133
+ type: "value",
134
+ result: { type: "number", value: 0 }
135
+ };
136
+ }
137
+ return {
138
+ type: "value",
139
+ result: referenceValue
140
+ };
141
+ }
142
+ return {
143
+ type: "value",
144
+ result: { type: "number", value: 0 }
145
+ };
146
+ case "type": {
147
+ if (referenceValue === null) {
148
+ return {
149
+ type: "value",
150
+ result: { type: "string", value: "b" }
151
+ };
152
+ }
153
+ if (referenceValue.type === "string" && referenceValue.value === "") {
154
+ return {
155
+ type: "value",
156
+ result: { type: "string", value: "b" }
157
+ };
158
+ }
159
+ if (referenceValue.type === "string") {
160
+ return {
161
+ type: "value",
162
+ result: { type: "string", value: "l" }
163
+ };
164
+ }
165
+ if (referenceValue.type === "number") {
166
+ return {
167
+ type: "value",
168
+ result: { type: "string", value: "v" }
169
+ };
170
+ }
171
+ return {
172
+ type: "value",
173
+ result: { type: "string", value: "v" }
174
+ };
175
+ }
176
+ default:
177
+ return {
178
+ type: "error",
179
+ err: import_types.FormulaError.VALUE,
180
+ message: `CELL function unknown info_type: "${infoType}"`,
181
+ errAddress: context.dependencyNode
182
+ };
183
+ }
184
+ }
185
+ };
186
+ function columnNumberToLetter(num) {
187
+ let letter = "";
188
+ while (num > 0) {
189
+ const remainder = (num - 1) % 26;
190
+ letter = String.fromCharCode(65 + remainder) + letter;
191
+ num = Math.floor((num - 1) / 26);
192
+ }
193
+ return letter;
194
+ }
195
+
196
+ //# debugId=C3C09EC006226F5764756E2164756E21
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/functions/information/cell/cell.ts"],
4
+ "sourcesContent": [
5
+ "import {\n FormulaError,\n type CellValue,\n type CellNumber,\n type FunctionDefinition,\n type FunctionEvaluationResult,\n type ValueEvaluationResult,\n type CellAddress,\n type SpreadsheetRange,\n type SpilledValuesEvaluationResult,\n type SingleEvaluationResult,\n} from \"src/core/types\";\nimport type { EvaluationContext } from \"src/evaluator/evaluation-context\";\nimport type { ReferenceNode } from \"src/parser/ast\";\nimport { isCellAddress, isRangeAddress } from \"src/core/utils\";\n\n/**\n * CELL function - Returns information about the formatting, location, or contents of a cell\n * \n * Usage: CELL(info_type, [reference])\n * \n * info_type: Text value that specifies what type of cell information you want\n * reference: The cell or range to get information about (defaults to current cell if omitted)\n * \n * Supported info_types:\n * - \"address\" - Returns the reference of the first cell in reference, as text\n * - \"col\" - Returns the column number of the cell\n * - \"row\" - Returns the row number of the cell\n * - \"contents\" - Returns the value of the upper-left cell\n * - \"type\" - Returns \"b\" for blank, \"l\" for label (text), \"v\" for value (number)\n * - \"width\" - Returns the column width\n * - \"filename\" - Returns the filename (including full path) of the file\n * \n * Examples:\n * - CELL(\"address\", A1) returns \"$A$1\"\n * - CELL(\"row\", B5) returns 5\n * - CELL(\"col\", C3) returns 3\n */\nexport const CELL: FunctionDefinition = {\n name: \"CELL\",\n evaluate: function (node, context): FunctionEvaluationResult {\n if (node.args.length === 0 || node.args.length > 2) {\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n message: \"CELL function requires 1 or 2 arguments\",\n errAddress: context.dependencyNode,\n };\n }\n\n // Evaluate the info_type argument\n const infoTypeResult = this.evaluateNode(node.args[0]!, context);\n if (\n infoTypeResult.type === \"error\" ||\n infoTypeResult.type === \"awaiting-evaluation\"\n ) {\n return infoTypeResult;\n }\n\n if (infoTypeResult.type !== \"value\" || infoTypeResult.result.type !== \"string\") {\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n message: \"CELL function info_type must be a string\",\n errAddress: context.dependencyNode,\n };\n }\n\n const infoType = infoTypeResult.result.value.toLowerCase();\n\n // Determine the reference cell\n let referenceCell: CellAddress = context.cellAddress;\n let referenceValue: CellValue | null = null;\n \n if (node.args.length === 2) {\n const refArg = node.args[1]!;\n \n // Evaluate the reference argument\n const refResult = this.evaluateNode(refArg, context);\n if (\n refResult.type === \"error\" ||\n refResult.type === \"awaiting-evaluation\"\n ) {\n return refResult;\n }\n \n // Check if we have a cell or range reference\n const cellOrRange =\n refResult.type === \"spilled-values\"\n ? (refResult.sourceCell ?? refResult.sourceRange)\n : refResult.sourceCell;\n \n if (!cellOrRange) {\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n message: \"CELL function requires a cell or range reference\",\n errAddress: context.dependencyNode,\n };\n }\n \n // Extract the cell address\n if (isCellAddress(cellOrRange)) {\n // It's a CellAddress\n referenceCell = cellOrRange;\n } else if (isRangeAddress(cellOrRange)) {\n // It's a RangeAddress - use the upper-left cell\n referenceCell = {\n sheetName: cellOrRange.sheetName,\n workbookName: cellOrRange.workbookName,\n colIndex: cellOrRange.range.start.col,\n rowIndex: cellOrRange.range.start.row,\n };\n } else {\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n message: \"CELL function requires a cell or range reference\",\n errAddress: context.dependencyNode,\n };\n }\n \n // For \"contents\" and \"type\", we need to get the cell value\n if (infoType === \"contents\" || infoType === \"type\") {\n if (refResult.type === \"value\") {\n referenceValue = refResult.result;\n } else if (refResult.type === \"spilled-values\") {\n const cellResult = refResult.evaluate({ x: 0, y: 0 }, context);\n if (cellResult && cellResult.type === \"value\") {\n referenceValue = cellResult.result;\n }\n }\n }\n }\n\n // Handle different info types (return 1-based row/column numbers)\n switch (infoType) {\n case \"row\":\n return {\n type: \"value\",\n result: { type: \"number\", value: referenceCell.rowIndex + 1 },\n };\n \n case \"col\":\n return {\n type: \"value\",\n result: { type: \"number\", value: referenceCell.colIndex + 1 },\n };\n \n case \"address\": {\n // Return the cell address as text in A1 format\n const col = columnNumberToLetter(referenceCell.colIndex + 1);\n const row = referenceCell.rowIndex + 1;\n let address = `$${col}$${row}`;\n \n // Include sheet name if it's different from current sheet\n if (referenceCell.sheetName !== context.cellAddress.sheetName) {\n address = `${referenceCell.sheetName}!${address}`;\n }\n \n return {\n type: \"value\",\n result: { type: \"string\", value: address },\n };\n }\n \n case \"contents\":\n // Return the value of the cell\n if (referenceValue !== null) {\n // Empty string counts as empty cell in Excel\n if (referenceValue.type === \"string\" && referenceValue.value === \"\") {\n return {\n type: \"value\",\n result: { type: \"number\", value: 0 },\n };\n }\n return {\n type: \"value\",\n result: referenceValue,\n };\n }\n // If we couldn't get the value, return 0 (empty cell)\n return {\n type: \"value\",\n result: { type: \"number\", value: 0 },\n };\n \n case \"type\": {\n // Return \"b\" for blank, \"l\" for label (text), \"v\" for value (number)\n if (referenceValue === null) {\n return {\n type: \"value\",\n result: { type: \"string\", value: \"b\" },\n };\n }\n // Empty string counts as blank cell in Excel\n if (referenceValue.type === \"string\" && referenceValue.value === \"\") {\n return {\n type: \"value\",\n result: { type: \"string\", value: \"b\" },\n };\n }\n if (referenceValue.type === \"string\") {\n return {\n type: \"value\",\n result: { type: \"string\", value: \"l\" },\n };\n }\n if (referenceValue.type === \"number\") {\n return {\n type: \"value\",\n result: { type: \"string\", value: \"v\" },\n };\n }\n // Boolean or other types default to \"v\"\n return {\n type: \"value\",\n result: { type: \"string\", value: \"v\" },\n };\n }\n \n default:\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n message: `CELL function unknown info_type: \"${infoType}\"`,\n errAddress: context.dependencyNode,\n };\n }\n },\n};\n\n/**\n * Helper function to convert column number (1-based) to letter(s)\n */\nfunction columnNumberToLetter(num: number): string {\n let letter = \"\";\n while (num > 0) {\n const remainder = (num - 1) % 26;\n letter = String.fromCharCode(65 + remainder) + letter;\n num = Math.floor((num - 1) / 26);\n }\n return letter;\n}\n"
6
+ ],
7
+ "mappings": "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",
8
+ "debugId": "C3C09EC006226F5764756E2164756E21",
9
+ "names": []
10
+ }