@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,144 @@
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/column/column.ts
30
+ var exports_column = {};
31
+ __export(exports_column, {
32
+ COLUMN: () => COLUMN
33
+ });
34
+ module.exports = __toCommonJS(exports_column);
35
+ var import_types = require("src/core/types");
36
+ var import_evaluation_error = require("src/evaluator/evaluation-error");
37
+ var import_utils = require("src/core/utils");
38
+ var COLUMN = {
39
+ name: "COLUMN",
40
+ evaluate: function(node, context) {
41
+ if (node.args.length === 0) {
42
+ context.addContextDependency("col");
43
+ return {
44
+ type: "value",
45
+ result: { type: "number", value: context.cellAddress.colIndex + 1 }
46
+ };
47
+ }
48
+ if (node.args.length > 1) {
49
+ return {
50
+ type: "error",
51
+ err: import_types.FormulaError.VALUE,
52
+ message: "COLUMN function takes at most 1 argument",
53
+ errAddress: context.dependencyNode
54
+ };
55
+ }
56
+ const argNode = node.args[0];
57
+ const argResult = this.evaluateNode(argNode, context);
58
+ if (argResult.type === "error" || argResult.type === "awaiting-evaluation") {
59
+ return argResult;
60
+ }
61
+ const cellOrRange = argResult.type === "spilled-values" ? argResult.sourceCell ?? argResult.sourceRange : argResult.sourceCell;
62
+ if (!cellOrRange) {
63
+ return {
64
+ type: "error",
65
+ err: import_types.FormulaError.VALUE,
66
+ message: "COLUMN function requires a cell or range reference",
67
+ errAddress: context.dependencyNode
68
+ };
69
+ }
70
+ if (import_utils.isCellAddress(cellOrRange)) {
71
+ return {
72
+ type: "value",
73
+ result: { type: "number", value: cellOrRange.colIndex + 1 }
74
+ };
75
+ }
76
+ if (import_utils.isRangeAddress(cellOrRange) && argResult.type === "spilled-values") {
77
+ const sourceRange = cellOrRange.range;
78
+ return {
79
+ type: "spilled-values",
80
+ spillArea: (origin) => argResult.spillArea(origin),
81
+ sourceRange: cellOrRange,
82
+ source: "COLUMN with range/array argument",
83
+ evaluate: (spillOffset, evalContext) => {
84
+ if (sourceRange) {
85
+ const actualCol2 = sourceRange.start.col + spillOffset.x;
86
+ return {
87
+ type: "value",
88
+ result: { type: "number", value: actualCol2 + 1 }
89
+ };
90
+ }
91
+ const spillArea = argResult.spillArea(evalContext.cellAddress);
92
+ const actualCol = spillArea.start.col + spillOffset.x;
93
+ return {
94
+ type: "value",
95
+ result: { type: "number", value: actualCol + 1 }
96
+ };
97
+ },
98
+ evaluateAllCells: ({ evaluate, intersection, context: context2, origin }) => {
99
+ let rangeToEvaluate = cellOrRange.range;
100
+ if (intersection) {
101
+ const newRange = import_utils.getRangeIntersection(rangeToEvaluate, intersection);
102
+ if (!newRange) {
103
+ return {
104
+ type: "error",
105
+ err: import_types.FormulaError.VALUE,
106
+ message: "Invalid intersection range for COLUMN function",
107
+ errAddress: context2.dependencyNode
108
+ };
109
+ }
110
+ rangeToEvaluate = newRange;
111
+ }
112
+ if (rangeToEvaluate.end.row.type === "infinity" || rangeToEvaluate.end.col.type === "infinity") {
113
+ throw new import_evaluation_error.EvaluationError(import_types.FormulaError.VALUE, "COLUMN function cannot evaluate all cells over an infinite range");
114
+ }
115
+ const startCol = rangeToEvaluate.start.col;
116
+ const endCol = rangeToEvaluate.end.col.value;
117
+ const colSet = new Set;
118
+ for (let col = startCol;col <= endCol; col++) {
119
+ colSet.add(col + 1);
120
+ }
121
+ const cols = Array.from(colSet).sort((a, b) => a - b);
122
+ const results = [];
123
+ for (let i = 0;i < cols.length; i++) {
124
+ const relativePos = { x: i, y: 0 };
125
+ const evaled = evaluate(relativePos, context2);
126
+ results.push({
127
+ result: evaled,
128
+ relativePos
129
+ });
130
+ }
131
+ return { type: "values", values: results };
132
+ }
133
+ };
134
+ }
135
+ return {
136
+ type: "error",
137
+ err: import_types.FormulaError.VALUE,
138
+ message: "COLUMN function requires a cell or range reference",
139
+ errAddress: context.dependencyNode
140
+ };
141
+ }
142
+ };
143
+
144
+ //# debugId=CE387FC5C24B1D2264756E2164756E21
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/functions/information/column/column.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 type CellInRangeResult,\n} from \"src/core/types\";\nimport type { EvaluationContext } from \"src/evaluator/evaluation-context\";\nimport type { ReferenceNode, RangeNode } from \"src/parser/ast\";\nimport { EvaluationError } from \"src/evaluator/evaluation-error\";\nimport {\n getRangeIntersection,\n isCellAddress,\n isRangeAddress,\n} from \"src/core/utils\";\n\n/**\n * COLUMN function - Returns the column number of a reference\n *\n * Usage: COLUMN([reference])\n *\n * If reference is omitted, returns the column number of the cell in which the formula appears.\n *\n * Examples:\n * - COLUMN() returns the column number of the current cell\n * - COLUMN(C5) returns 3\n * - COLUMN(A1:E1) returns an array of column numbers {1,2,3,4,5}\n */\nexport const COLUMN: FunctionDefinition = {\n name: \"COLUMN\",\n evaluate: function (node, context): FunctionEvaluationResult {\n // If no arguments, return the column of the current cell (1-based)\n if (node.args.length === 0) {\n context.addContextDependency(\"col\");\n return {\n type: \"value\",\n result: { type: \"number\", value: context.cellAddress.colIndex + 1 },\n };\n }\n\n if (node.args.length > 1) {\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n message: \"COLUMN function takes at most 1 argument\",\n errAddress: context.dependencyNode,\n };\n }\n\n const argNode = node.args[0]!;\n\n // Evaluate the argument\n const argResult = this.evaluateNode(argNode, context);\n\n // Handle errors and awaiting evaluation\n if (\n argResult.type === \"error\" ||\n argResult.type === \"awaiting-evaluation\"\n ) {\n return argResult;\n }\n\n // Check if we have a cell or range reference\n const cellOrRange =\n argResult.type === \"spilled-values\"\n ? (argResult.sourceCell ?? argResult.sourceRange)\n : argResult.sourceCell;\n\n // If we don't have a sourceCell or sourceRange, the argument is invalid\n if (!cellOrRange) {\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n message: \"COLUMN function requires a cell or range reference\",\n errAddress: context.dependencyNode,\n };\n }\n\n // If we have a sourceCell (single cell reference), return its column\n if (isCellAddress(cellOrRange)) {\n return {\n type: \"value\",\n result: { type: \"number\", value: cellOrRange.colIndex + 1 },\n };\n }\n\n // If we have a sourceRange, return spilled column numbers\n if (isRangeAddress(cellOrRange) && argResult.type === \"spilled-values\") {\n const sourceRange = cellOrRange.range;\n\n // Return as spilled values - evaluate returns column numbers based on position\n return {\n type: \"spilled-values\",\n spillArea: (origin) => argResult.spillArea(origin),\n sourceRange: cellOrRange,\n source: \"COLUMN with range/array argument\",\n evaluate: (spillOffset, evalContext) => {\n // If we have a sourceRange, use it to get the actual column number\n if (sourceRange) {\n const actualCol = sourceRange.start.col + spillOffset.x;\n return {\n type: \"value\",\n result: { type: \"number\", value: actualCol + 1 }, // 1-based\n };\n }\n\n // Otherwise, use spillArea to get the column number relative to where it appears\n const spillArea = argResult.spillArea(evalContext.cellAddress);\n const actualCol = spillArea.start.col + spillOffset.x;\n return {\n type: \"value\",\n result: { type: \"number\", value: actualCol + 1 }, // 1-based\n };\n },\n evaluateAllCells: ({ evaluate, intersection, context, origin }) => {\n // Determine the actual range to evaluate\n let rangeToEvaluate = cellOrRange.range;\n\n // Apply intersection if provided\n if (intersection) {\n // Use the intersection range\n const newRange = getRangeIntersection(\n rangeToEvaluate,\n intersection\n );\n if (!newRange) {\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n message:\n \"Invalid intersection range for COLUMN function\",\n errAddress: context.dependencyNode,\n };\n }\n rangeToEvaluate = newRange;\n }\n\n // Check if the range is infinite\n if (\n rangeToEvaluate.end.row.type === \"infinity\" ||\n rangeToEvaluate.end.col.type === \"infinity\"\n ) {\n throw new EvaluationError(\n FormulaError.VALUE,\n \"COLUMN function cannot evaluate all cells over an infinite range\"\n );\n }\n\n // Extract unique column numbers from the range\n const startCol = rangeToEvaluate.start.col;\n const endCol = rangeToEvaluate.end.col.value;\n\n const colSet = new Set<number>();\n for (let col = startCol; col <= endCol; col++) {\n colSet.add(col + 1); // 1-based\n }\n const cols = Array.from(colSet).sort((a, b) => a - b);\n\n const results: CellInRangeResult[] = [];\n for (let i = 0; i < cols.length; i++) {\n const relativePos = { x: i, y: 0 };\n const evaled = evaluate(relativePos, context);\n results.push({\n result: evaled!,\n relativePos,\n });\n }\n return { type: \"values\", values: results };\n },\n };\n }\n\n // If we reach here, cellOrRange type is unknown\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n message: \"COLUMN function requires a cell or range reference\",\n errAddress: context.dependencyNode,\n };\n },\n};\n"
6
+ ],
7
+ "mappings": "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",
8
+ "debugId": "CE387FC5C24B1D2264756E2164756E21",
9
+ "names": []
10
+ }
@@ -0,0 +1,150 @@
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/row/row.ts
30
+ var exports_row = {};
31
+ __export(exports_row, {
32
+ ROW: () => ROW
33
+ });
34
+ module.exports = __toCommonJS(exports_row);
35
+ var import_types = require("src/core/types");
36
+ var import_evaluation_error = require("src/evaluator/evaluation-error");
37
+ var import_utils = require("src/core/utils");
38
+ var ROW = {
39
+ name: "ROW",
40
+ evaluate: function(node, context) {
41
+ if (node.args.length === 0) {
42
+ context.addContextDependency("row");
43
+ return {
44
+ type: "value",
45
+ result: {
46
+ type: "number",
47
+ value: context.cellAddress.rowIndex + 1
48
+ }
49
+ };
50
+ }
51
+ if (node.args.length > 1) {
52
+ return {
53
+ type: "error",
54
+ err: import_types.FormulaError.VALUE,
55
+ message: "ROW function takes at most 1 argument",
56
+ errAddress: context.dependencyNode
57
+ };
58
+ }
59
+ const argNode = node.args[0];
60
+ const argResult = this.evaluateNode(argNode, context);
61
+ if (argResult.type === "error" || argResult.type === "awaiting-evaluation") {
62
+ return argResult;
63
+ }
64
+ const cellOrRange = argResult.type === "spilled-values" ? argResult.sourceCell ?? argResult.sourceRange : argResult.sourceCell;
65
+ if (!cellOrRange) {
66
+ return {
67
+ type: "error",
68
+ err: import_types.FormulaError.VALUE,
69
+ message: "ROW function requires a cell or range reference",
70
+ errAddress: context.dependencyNode
71
+ };
72
+ }
73
+ if (import_utils.isCellAddress(cellOrRange)) {
74
+ return {
75
+ type: "value",
76
+ result: { type: "number", value: cellOrRange.rowIndex + 1 }
77
+ };
78
+ }
79
+ if (import_utils.isRangeAddress(cellOrRange) && argResult.type === "spilled-values") {
80
+ const sourceRange = cellOrRange.range;
81
+ return {
82
+ type: "spilled-values",
83
+ spillArea: (origin) => argResult.spillArea(origin),
84
+ sourceRange: cellOrRange,
85
+ source: "ROW with range/array argument",
86
+ evaluate: (spillOffset, evalContext) => {
87
+ if (sourceRange) {
88
+ const actualRow2 = sourceRange.start.row + spillOffset.y;
89
+ return {
90
+ type: "value",
91
+ result: { type: "number", value: actualRow2 + 1 }
92
+ };
93
+ }
94
+ const spillArea = argResult.spillArea(evalContext.cellAddress);
95
+ const actualRow = spillArea.start.row + spillOffset.y;
96
+ return {
97
+ type: "value",
98
+ result: { type: "number", value: actualRow + 1 }
99
+ };
100
+ },
101
+ evaluateAllCells: ({ evaluate, intersection, context: context2, origin }) => {
102
+ let rangeToEvaluate = cellOrRange.range;
103
+ if (intersection) {
104
+ const newRange = import_utils.getRangeIntersection(rangeToEvaluate, intersection);
105
+ if (!newRange) {
106
+ return {
107
+ type: "error",
108
+ err: import_types.FormulaError.VALUE,
109
+ message: "Intersection range is not valid",
110
+ errAddress: context2.dependencyNode
111
+ };
112
+ }
113
+ rangeToEvaluate = newRange;
114
+ }
115
+ if (rangeToEvaluate.end.row.type === "infinity" || rangeToEvaluate.end.col.type === "infinity") {
116
+ throw new import_evaluation_error.EvaluationError(import_types.FormulaError.VALUE, "ROW function cannot evaluate all cells over an infinite range");
117
+ }
118
+ const startRow = rangeToEvaluate.start.row;
119
+ const endRow = rangeToEvaluate.end.row.value;
120
+ const rowSet = new Set;
121
+ for (let row = startRow;row <= endRow; row++) {
122
+ rowSet.add(row + 1);
123
+ }
124
+ const rows = Array.from(rowSet).sort((a, b) => a - b);
125
+ const results = [];
126
+ for (let i = 0;i < rows.length; i++) {
127
+ const relativePos = { x: 0, y: i };
128
+ const evaled = evaluate(relativePos, context2);
129
+ results.push({
130
+ result: evaled,
131
+ relativePos
132
+ });
133
+ }
134
+ return {
135
+ type: "values",
136
+ values: results
137
+ };
138
+ }
139
+ };
140
+ }
141
+ return {
142
+ type: "error",
143
+ err: import_types.FormulaError.VALUE,
144
+ message: "ROW function requires a cell or range reference",
145
+ errAddress: context.dependencyNode
146
+ };
147
+ }
148
+ };
149
+
150
+ //# debugId=F401C5A2A4B1B2BE64756E2164756E21
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/functions/information/row/row.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 type CellInRangeResult,\n} from \"src/core/types\";\nimport type { EvaluationContext } from \"src/evaluator/evaluation-context\";\nimport type { ReferenceNode, RangeNode } from \"src/parser/ast\";\nimport { EvaluationError } from \"src/evaluator/evaluation-error\";\nimport {\n getRangeIntersection,\n isCellAddress,\n isRangeAddress,\n} from \"src/core/utils\";\n\n/**\n * ROW function - Returns the row number of a reference\n *\n * Usage: ROW([reference])\n *\n * If reference is omitted, returns the row number of the cell in which the formula appears.\n *\n * Examples:\n * - ROW() returns the row number of the current cell\n * - ROW(A5) returns 5\n * - ROW(A5:A10) returns an array of row numbers {5;6;7;8;9;10}\n */\nexport const ROW: FunctionDefinition = {\n name: \"ROW\",\n evaluate: function (node, context): FunctionEvaluationResult {\n // If no arguments, return the row of the current cell (1-based)\n if (node.args.length === 0) {\n context.addContextDependency(\"row\");\n return {\n type: \"value\",\n result: {\n type: \"number\",\n value: context.cellAddress.rowIndex + 1,\n },\n };\n }\n\n if (node.args.length > 1) {\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n message: \"ROW function takes at most 1 argument\",\n errAddress: context.dependencyNode,\n };\n }\n\n const argNode = node.args[0]!;\n\n // Evaluate the argument\n const argResult = this.evaluateNode(argNode, context);\n\n // Handle errors and awaiting evaluation\n if (\n argResult.type === \"error\" ||\n argResult.type === \"awaiting-evaluation\"\n ) {\n return argResult;\n }\n\n // Check if we have a cell or range reference\n const cellOrRange =\n argResult.type === \"spilled-values\"\n ? (argResult.sourceCell ?? argResult.sourceRange)\n : argResult.sourceCell;\n\n // If we don't have a sourceCell or sourceRange, the argument is invalid\n if (!cellOrRange) {\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n message: \"ROW function requires a cell or range reference\",\n errAddress: context.dependencyNode,\n };\n }\n\n // If we have a sourceCell (single cell reference), return its row\n if (isCellAddress(cellOrRange)) {\n return {\n type: \"value\",\n result: { type: \"number\", value: cellOrRange.rowIndex + 1 },\n };\n }\n\n // If we have a sourceRange, return spilled row numbers\n if (isRangeAddress(cellOrRange) && argResult.type === \"spilled-values\") {\n const sourceRange = cellOrRange.range;\n\n // Return as spilled values - evaluate returns row numbers based on position\n return {\n type: \"spilled-values\",\n spillArea: (origin) => argResult.spillArea(origin),\n sourceRange: cellOrRange,\n source: \"ROW with range/array argument\",\n evaluate: (spillOffset, evalContext) => {\n // If we have a sourceRange, use it to get the actual row number\n if (sourceRange) {\n const actualRow = sourceRange.start.row + spillOffset.y;\n return {\n type: \"value\",\n result: { type: \"number\", value: actualRow + 1 }, // 1-based\n };\n }\n\n // Otherwise, use spillArea to get the row number relative to where it appears\n const spillArea = argResult.spillArea(evalContext.cellAddress);\n const actualRow = spillArea.start.row + spillOffset.y;\n return {\n type: \"value\",\n result: { type: \"number\", value: actualRow + 1 }, // 1-based\n };\n },\n evaluateAllCells: ({ evaluate, intersection, context, origin }) => {\n // Determine the actual range to evaluate\n let rangeToEvaluate = cellOrRange.range;\n\n // Apply intersection if provided\n if (intersection) {\n // Use the intersection range\n const newRange = getRangeIntersection(\n rangeToEvaluate,\n intersection\n );\n if (!newRange) {\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n message: \"Intersection range is not valid\",\n errAddress: context.dependencyNode,\n };\n }\n rangeToEvaluate = newRange;\n }\n\n // Check if the range is infinite\n if (\n rangeToEvaluate.end.row.type === \"infinity\" ||\n rangeToEvaluate.end.col.type === \"infinity\"\n ) {\n throw new EvaluationError(\n FormulaError.VALUE,\n \"ROW function cannot evaluate all cells over an infinite range\"\n );\n }\n\n // Extract unique row numbers from the range\n const startRow = rangeToEvaluate.start.row;\n const endRow = rangeToEvaluate.end.row.value;\n\n const rowSet = new Set<number>();\n for (let row = startRow; row <= endRow; row++) {\n rowSet.add(row + 1); // 1-based\n }\n const rows = Array.from(rowSet).sort((a, b) => a - b);\n\n const results: CellInRangeResult[] = [];\n for (let i = 0; i < rows.length; i++) {\n const relativePos = { x: 0, y: i };\n const evaled = evaluate(relativePos, context);\n results.push({\n result: evaled,\n relativePos,\n });\n }\n return {\n type: \"values\",\n values: results,\n };\n },\n };\n }\n\n // If we reach here, cellOrRange type is unknown\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n message: \"ROW function requires a cell or range reference\",\n errAddress: context.dependencyNode,\n };\n },\n};\n"
6
+ ],
7
+ "mappings": "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",
8
+ "debugId": "F401C5A2A4B1B2BE64756E2164756E21",
9
+ "names": []
10
+ }
@@ -0,0 +1,112 @@
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/logical/and/and.ts
30
+ var exports_and = {};
31
+ __export(exports_and, {
32
+ AND: () => AND
33
+ });
34
+ module.exports = __toCommonJS(exports_and);
35
+ var import_types = require("src/core/types");
36
+ function isTruthy(value) {
37
+ switch (value.type) {
38
+ case "boolean":
39
+ return value.value;
40
+ case "number":
41
+ return value.value !== 0;
42
+ case "string":
43
+ return value.value !== "";
44
+ case "infinity":
45
+ return true;
46
+ default:
47
+ return false;
48
+ }
49
+ }
50
+ var AND = {
51
+ name: "AND",
52
+ evaluate: function(node, context) {
53
+ if (node.args.length === 0) {
54
+ return {
55
+ type: "error",
56
+ err: import_types.FormulaError.VALUE,
57
+ message: "AND function requires at least one argument",
58
+ errAddress: context.dependencyNode
59
+ };
60
+ }
61
+ for (const arg of node.args) {
62
+ const argResult = this.evaluateNode(arg, context);
63
+ if (argResult.type === "error" || argResult.type === "awaiting-evaluation") {
64
+ return argResult;
65
+ }
66
+ if (argResult.type === "value") {
67
+ if (!isTruthy(argResult.result)) {
68
+ return {
69
+ type: "value",
70
+ result: { type: "boolean", value: false }
71
+ };
72
+ }
73
+ } else if (argResult.type === "spilled-values") {
74
+ const cellValues = argResult.evaluateAllCells.call(this, {
75
+ context,
76
+ origin: context.cellAddress,
77
+ evaluate: argResult.evaluate,
78
+ lookupOrder: "col-major"
79
+ });
80
+ if (cellValues.type === "error" || cellValues.type === "awaiting-evaluation") {
81
+ return cellValues;
82
+ }
83
+ for (const cellValue of cellValues.values) {
84
+ if (cellValue.result.type === "error") {
85
+ return cellValue.result;
86
+ }
87
+ if (cellValue.result.type === "value") {
88
+ if (!isTruthy(cellValue.result.result)) {
89
+ return {
90
+ type: "value",
91
+ result: { type: "boolean", value: false }
92
+ };
93
+ }
94
+ }
95
+ }
96
+ } else {
97
+ return {
98
+ type: "error",
99
+ err: import_types.FormulaError.VALUE,
100
+ message: "Invalid argument type for AND function",
101
+ errAddress: context.dependencyNode
102
+ };
103
+ }
104
+ }
105
+ return {
106
+ type: "value",
107
+ result: { type: "boolean", value: true }
108
+ };
109
+ }
110
+ };
111
+
112
+ //# debugId=A0E644E550D6D44364756E2164756E21
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/functions/logical/and/and.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 type ErrorEvaluationResult,\n} from \"src/core/types\";\nimport type { FormulaEvaluator } from \"src/evaluator/formula-evaluator\";\nimport type { EvaluationContext } from \"src/evaluator/evaluation-context\";\n\n/**\n * AND function - Returns TRUE if all arguments are TRUE, FALSE otherwise\n *\n * Usage: AND(logical1, [logical2], ...)\n *\n * logical1, logical2, ...: Logical values or expressions to evaluate\n *\n * Examples:\n * AND(TRUE, TRUE) - returns TRUE\n * AND(TRUE, FALSE) - returns FALSE\n * AND(A1>10, B1<20) - returns TRUE if both conditions are met\n * AND(A1:A3) - returns TRUE if all values in A1:A3 are truthy\n *\n * Note:\n * - Supports spilled values (dynamic arrays) for arguments\n * - Logical evaluation: 0 and empty string are FALSE, everything else is TRUE\n * - If any argument is spilled, returns spilled results\n * - Short-circuit evaluation: stops at first FALSE value\n */\n\n/**\n * Convert a cell value to boolean for logical evaluation\n */\nfunction isTruthy(value: CellValue): boolean {\n switch (value.type) {\n case \"boolean\":\n return value.value;\n case \"number\":\n return value.value !== 0;\n case \"string\":\n return value.value !== \"\";\n case \"infinity\":\n return true; // Infinity is truthy\n default:\n return false;\n }\n}\n\n// AND function does not create spilled results - it processes all values in ranges\n// as individual logical tests and returns a single boolean result\n\n/**\n * AND function implementation\n */\nexport const AND: FunctionDefinition = {\n name: \"AND\",\n evaluate: function (node, context): FunctionEvaluationResult {\n if (node.args.length === 0) {\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n message: \"AND function requires at least one argument\",\n errAddress: context.dependencyNode,\n };\n }\n\n // Process arguments one by one (like SUM function)\n for (const arg of node.args) {\n const argResult = this.evaluateNode(arg, context);\n\n if (argResult.type === \"error\" || argResult.type === \"awaiting-evaluation\") {\n return argResult;\n }\n\n if (argResult.type === \"value\") {\n // Single value - check if truthy\n if (!isTruthy(argResult.result)) {\n return {\n type: \"value\",\n result: { type: \"boolean\", value: false },\n };\n }\n } else if (argResult.type === \"spilled-values\") {\n // Range - check all values in the range\n const cellValues = argResult.evaluateAllCells.call(this, {\n context,\n origin: context.cellAddress,\n evaluate: argResult.evaluate,\n lookupOrder: \"col-major\",\n });\n\n if (cellValues.type === \"error\" || cellValues.type === \"awaiting-evaluation\") {\n return cellValues;\n }\n\n for (const cellValue of cellValues.values) {\n if (cellValue.result.type === \"error\") {\n return cellValue.result;\n }\n if (cellValue.result.type === \"value\") {\n if (!isTruthy(cellValue.result.result)) {\n return {\n type: \"value\",\n result: { type: \"boolean\", value: false },\n };\n }\n }\n }\n } else {\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n message: \"Invalid argument type for AND function\",\n errAddress: context.dependencyNode,\n };\n }\n }\n\n // All arguments are truthy\n return {\n type: \"value\",\n result: { type: \"boolean\", value: true },\n };\n },\n};\n"
6
+ ],
7
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYO,IAZP;AAuCA,SAAS,QAAQ,CAAC,OAA2B;AAAA,EAC3C,QAAQ,MAAM;AAAA,SACP;AAAA,MACH,OAAO,MAAM;AAAA,SACV;AAAA,MACH,OAAO,MAAM,UAAU;AAAA,SACpB;AAAA,MACH,OAAO,MAAM,UAAU;AAAA,SACpB;AAAA,MACH,OAAO;AAAA;AAAA,MAEP,OAAO;AAAA;AAAA;AAUN,IAAM,MAA0B;AAAA,EACrC,MAAM;AAAA,EACN,UAAU,QAAS,CAAC,MAAM,SAAmC;AAAA,IAC3D,IAAI,KAAK,KAAK,WAAW,GAAG;AAAA,MAC1B,OAAO;AAAA,QACL,MAAM;AAAA,QACN,KAAK,0BAAa;AAAA,QAClB,SAAS;AAAA,QACT,YAAY,QAAQ;AAAA,MACtB;AAAA,IACF;AAAA,IAGA,WAAW,OAAO,KAAK,MAAM;AAAA,MAC3B,MAAM,YAAY,KAAK,aAAa,KAAK,OAAO;AAAA,MAEhD,IAAI,UAAU,SAAS,WAAW,UAAU,SAAS,uBAAuB;AAAA,QAC1E,OAAO;AAAA,MACT;AAAA,MAEA,IAAI,UAAU,SAAS,SAAS;AAAA,QAE9B,IAAI,CAAC,SAAS,UAAU,MAAM,GAAG;AAAA,UAC/B,OAAO;AAAA,YACL,MAAM;AAAA,YACN,QAAQ,EAAE,MAAM,WAAW,OAAO,MAAM;AAAA,UAC1C;AAAA,QACF;AAAA,MACF,EAAO,SAAI,UAAU,SAAS,kBAAkB;AAAA,QAE9C,MAAM,aAAa,UAAU,iBAAiB,KAAK,MAAM;AAAA,UACvD;AAAA,UACA,QAAQ,QAAQ;AAAA,UAChB,UAAU,UAAU;AAAA,UACpB,aAAa;AAAA,QACf,CAAC;AAAA,QAED,IAAI,WAAW,SAAS,WAAW,WAAW,SAAS,uBAAuB;AAAA,UAC5E,OAAO;AAAA,QACT;AAAA,QAEA,WAAW,aAAa,WAAW,QAAQ;AAAA,UACzC,IAAI,UAAU,OAAO,SAAS,SAAS;AAAA,YACrC,OAAO,UAAU;AAAA,UACnB;AAAA,UACA,IAAI,UAAU,OAAO,SAAS,SAAS;AAAA,YACrC,IAAI,CAAC,SAAS,UAAU,OAAO,MAAM,GAAG;AAAA,cACtC,OAAO;AAAA,gBACL,MAAM;AAAA,gBACN,QAAQ,EAAE,MAAM,WAAW,OAAO,MAAM;AAAA,cAC1C;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF,EAAO;AAAA,QACL,OAAO;AAAA,UACL,MAAM;AAAA,UACN,KAAK,0BAAa;AAAA,UAClB,SAAS;AAAA,UACT,YAAY,QAAQ;AAAA,QACtB;AAAA;AAAA,IAEJ;AAAA,IAGA,OAAO;AAAA,MACL,MAAM;AAAA,MACN,QAAQ,EAAE,MAAM,WAAW,OAAO,KAAK;AAAA,IACzC;AAAA;AAEJ;",
8
+ "debugId": "A0E644E550D6D44364756E2164756E21",
9
+ "names": []
10
+ }