@ricsam/formula-engine 0.2.2 → 0.2.4

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 (337) hide show
  1. package/dist/cjs/core/ast-traverser.cjs +19 -9
  2. package/dist/cjs/core/ast-traverser.cjs.map +2 -2
  3. package/dist/cjs/core/autofill-utils.cjs +19 -9
  4. package/dist/cjs/core/autofill-utils.cjs.map +2 -2
  5. package/dist/cjs/core/cell-mover.cjs +19 -9
  6. package/dist/cjs/core/cell-mover.cjs.map +2 -2
  7. package/dist/cjs/core/commands/command-executor.cjs +24 -13
  8. package/dist/cjs/core/commands/command-executor.cjs.map +3 -3
  9. package/dist/cjs/core/commands/content-commands.cjs +292 -9
  10. package/dist/cjs/core/commands/content-commands.cjs.map +3 -3
  11. package/dist/cjs/core/commands/metadata-commands.cjs +19 -9
  12. package/dist/cjs/core/commands/metadata-commands.cjs.map +2 -2
  13. package/dist/cjs/core/commands/named-expression-commands.cjs +138 -13
  14. package/dist/cjs/core/commands/named-expression-commands.cjs.map +3 -3
  15. package/dist/cjs/core/commands/structure-commands.cjs +216 -15
  16. package/dist/cjs/core/commands/structure-commands.cjs.map +3 -3
  17. package/dist/cjs/core/commands/style-commands.cjs +19 -9
  18. package/dist/cjs/core/commands/style-commands.cjs.map +2 -2
  19. package/dist/cjs/core/commands/table-commands.cjs +134 -13
  20. package/dist/cjs/core/commands/table-commands.cjs.map +3 -3
  21. package/dist/cjs/core/commands/types.cjs +36 -9
  22. package/dist/cjs/core/commands/types.cjs.map +3 -3
  23. package/dist/cjs/core/engine-snapshot.cjs +51 -0
  24. package/dist/cjs/core/engine-snapshot.cjs.map +10 -0
  25. package/dist/cjs/core/engine.cjs +51 -34
  26. package/dist/cjs/core/engine.cjs.map +3 -3
  27. package/dist/cjs/core/managers/cache-manager.cjs +123 -9
  28. package/dist/cjs/core/managers/cache-manager.cjs.map +3 -3
  29. package/dist/cjs/core/managers/copy-manager.cjs +19 -9
  30. package/dist/cjs/core/managers/copy-manager.cjs.map +2 -2
  31. package/dist/cjs/core/managers/dependency-manager.cjs +697 -9
  32. package/dist/cjs/core/managers/dependency-manager.cjs.map +3 -3
  33. package/dist/cjs/core/managers/dependency-node.cjs +14 -8
  34. package/dist/cjs/core/managers/dependency-node.cjs.map +1 -1
  35. package/dist/cjs/core/managers/evaluation-manager.cjs +296 -11
  36. package/dist/cjs/core/managers/evaluation-manager.cjs.map +3 -3
  37. package/dist/cjs/core/managers/event-manager.cjs +19 -9
  38. package/dist/cjs/core/managers/event-manager.cjs.map +2 -2
  39. package/dist/cjs/core/managers/frontier-dependency-manager.cjs +65 -12
  40. package/dist/cjs/core/managers/frontier-dependency-manager.cjs.map +3 -3
  41. package/dist/cjs/core/managers/isDependencyNode.cjs +19 -9
  42. package/dist/cjs/core/managers/isDependencyNode.cjs.map +2 -2
  43. package/dist/cjs/core/managers/named-expression-manager.cjs +121 -29
  44. package/dist/cjs/core/managers/named-expression-manager.cjs.map +3 -3
  45. package/dist/cjs/core/managers/range-eval-order-builder.cjs +19 -9
  46. package/dist/cjs/core/managers/range-eval-order-builder.cjs.map +2 -2
  47. package/dist/cjs/core/managers/reference-manager.cjs +25 -9
  48. package/dist/cjs/core/managers/reference-manager.cjs.map +3 -3
  49. package/dist/cjs/core/managers/schema-manager.cjs +19 -9
  50. package/dist/cjs/core/managers/schema-manager.cjs.map +2 -2
  51. package/dist/cjs/core/managers/style-manager.cjs +28 -9
  52. package/dist/cjs/core/managers/style-manager.cjs.map +3 -3
  53. package/dist/cjs/core/managers/table-manager.cjs +27 -11
  54. package/dist/cjs/core/managers/table-manager.cjs.map +3 -3
  55. package/dist/cjs/core/managers/workbook-manager.cjs +38 -13
  56. package/dist/cjs/core/managers/workbook-manager.cjs.map +3 -3
  57. package/dist/cjs/core/map-serializer.cjs +19 -9
  58. package/dist/cjs/core/map-serializer.cjs.map +2 -2
  59. package/dist/cjs/core/named-expression-renamer.cjs +19 -9
  60. package/dist/cjs/core/named-expression-renamer.cjs.map +2 -2
  61. package/dist/cjs/core/resource-keys.cjs +67 -0
  62. package/dist/cjs/core/resource-keys.cjs.map +10 -0
  63. package/dist/cjs/core/schema/cell-orm.cjs +19 -9
  64. package/dist/cjs/core/schema/cell-orm.cjs.map +2 -2
  65. package/dist/cjs/core/schema/grid-orm.cjs +19 -9
  66. package/dist/cjs/core/schema/grid-orm.cjs.map +2 -2
  67. package/dist/cjs/core/schema/schema-builder.cjs +19 -9
  68. package/dist/cjs/core/schema/schema-builder.cjs.map +2 -2
  69. package/dist/cjs/core/schema/schema-helpers.cjs +19 -9
  70. package/dist/cjs/core/schema/schema-helpers.cjs.map +2 -2
  71. package/dist/cjs/core/schema/schema.cjs +19 -9
  72. package/dist/cjs/core/schema/schema.cjs.map +2 -2
  73. package/dist/cjs/core/schema/table-orm.cjs +19 -9
  74. package/dist/cjs/core/schema/table-orm.cjs.map +2 -2
  75. package/dist/cjs/core/sheet-renamer.cjs +19 -9
  76. package/dist/cjs/core/sheet-renamer.cjs.map +2 -2
  77. package/dist/cjs/core/sheet-utils.cjs +19 -9
  78. package/dist/cjs/core/sheet-utils.cjs.map +2 -2
  79. package/dist/cjs/core/table-renamer.cjs +19 -9
  80. package/dist/cjs/core/table-renamer.cjs.map +2 -2
  81. package/dist/cjs/core/types.cjs +19 -9
  82. package/dist/cjs/core/types.cjs.map +2 -2
  83. package/dist/cjs/core/utils/color-utils.cjs +19 -9
  84. package/dist/cjs/core/utils/color-utils.cjs.map +2 -2
  85. package/dist/cjs/core/utils/range-serializer.cjs +19 -9
  86. package/dist/cjs/core/utils/range-serializer.cjs.map +2 -2
  87. package/dist/cjs/core/utils/range-utils.cjs +19 -9
  88. package/dist/cjs/core/utils/range-utils.cjs.map +2 -2
  89. package/dist/cjs/core/utils/spreadsheet-visualizer.cjs +19 -9
  90. package/dist/cjs/core/utils/spreadsheet-visualizer.cjs.map +2 -2
  91. package/dist/cjs/core/utils.cjs +19 -9
  92. package/dist/cjs/core/utils.cjs.map +2 -2
  93. package/dist/cjs/core/workbook-renamer.cjs +19 -9
  94. package/dist/cjs/core/workbook-renamer.cjs.map +2 -2
  95. package/dist/cjs/debug/flags.cjs +19 -9
  96. package/dist/cjs/debug/flags.cjs.map +2 -2
  97. package/dist/cjs/evaluator/arithmetic/add/add.cjs +19 -9
  98. package/dist/cjs/evaluator/arithmetic/add/add.cjs.map +2 -2
  99. package/dist/cjs/evaluator/arithmetic/divide/divide.cjs +19 -9
  100. package/dist/cjs/evaluator/arithmetic/divide/divide.cjs.map +2 -2
  101. package/dist/cjs/evaluator/arithmetic/multiply/multiply.cjs +19 -9
  102. package/dist/cjs/evaluator/arithmetic/multiply/multiply.cjs.map +2 -2
  103. package/dist/cjs/evaluator/arithmetic/power/power.cjs +19 -9
  104. package/dist/cjs/evaluator/arithmetic/power/power.cjs.map +2 -2
  105. package/dist/cjs/evaluator/arithmetic/subtract/subtract.cjs +19 -9
  106. package/dist/cjs/evaluator/arithmetic/subtract/subtract.cjs.map +2 -2
  107. package/dist/cjs/evaluator/comparison/equals.cjs +19 -9
  108. package/dist/cjs/evaluator/comparison/equals.cjs.map +2 -2
  109. package/dist/cjs/evaluator/comparison/greater-than-or-equal.cjs +19 -9
  110. package/dist/cjs/evaluator/comparison/greater-than-or-equal.cjs.map +2 -2
  111. package/dist/cjs/evaluator/comparison/greater-than.cjs +19 -9
  112. package/dist/cjs/evaluator/comparison/greater-than.cjs.map +2 -2
  113. package/dist/cjs/evaluator/comparison/less-than-or-equal.cjs +19 -9
  114. package/dist/cjs/evaluator/comparison/less-than-or-equal.cjs.map +2 -2
  115. package/dist/cjs/evaluator/comparison/less-than.cjs +19 -9
  116. package/dist/cjs/evaluator/comparison/less-than.cjs.map +2 -2
  117. package/dist/cjs/evaluator/comparison/not-equals.cjs +19 -9
  118. package/dist/cjs/evaluator/comparison/not-equals.cjs.map +2 -2
  119. package/dist/cjs/evaluator/concatenation/concatenate.cjs +19 -9
  120. package/dist/cjs/evaluator/concatenation/concatenate.cjs.map +2 -2
  121. package/dist/cjs/evaluator/dependency-nodes/ast-evaluation-node.cjs +19 -9
  122. package/dist/cjs/evaluator/dependency-nodes/ast-evaluation-node.cjs.map +2 -2
  123. package/dist/cjs/evaluator/dependency-nodes/base-eval-node.cjs +35 -9
  124. package/dist/cjs/evaluator/dependency-nodes/base-eval-node.cjs.map +3 -3
  125. package/dist/cjs/evaluator/dependency-nodes/cell-value-node.cjs +22 -9
  126. package/dist/cjs/evaluator/dependency-nodes/cell-value-node.cjs.map +3 -3
  127. package/dist/cjs/evaluator/dependency-nodes/empty-cell-evaluation-node.cjs +35 -11
  128. package/dist/cjs/evaluator/dependency-nodes/empty-cell-evaluation-node.cjs.map +3 -3
  129. package/dist/cjs/evaluator/dependency-nodes/resource-dependency-node.cjs +61 -0
  130. package/dist/cjs/evaluator/dependency-nodes/resource-dependency-node.cjs.map +10 -0
  131. package/dist/cjs/evaluator/dependency-nodes/spill-meta-node.cjs +19 -9
  132. package/dist/cjs/evaluator/dependency-nodes/spill-meta-node.cjs.map +2 -2
  133. package/dist/cjs/evaluator/dependency-nodes/virtual-cell-value-node.cjs +22 -9
  134. package/dist/cjs/evaluator/dependency-nodes/virtual-cell-value-node.cjs.map +3 -3
  135. package/dist/cjs/evaluator/evaluate-scalar-operator.cjs +19 -9
  136. package/dist/cjs/evaluator/evaluate-scalar-operator.cjs.map +2 -2
  137. package/dist/cjs/evaluator/evaluation-context.cjs +19 -9
  138. package/dist/cjs/evaluator/evaluation-context.cjs.map +2 -2
  139. package/dist/cjs/evaluator/evaluation-error.cjs +19 -9
  140. package/dist/cjs/evaluator/evaluation-error.cjs.map +2 -2
  141. package/dist/cjs/evaluator/formula-evaluator.cjs +55 -12
  142. package/dist/cjs/evaluator/formula-evaluator.cjs.map +3 -3
  143. package/dist/cjs/evaluator/range-evaluation-node.cjs +35 -11
  144. package/dist/cjs/evaluator/range-evaluation-node.cjs.map +3 -3
  145. package/dist/cjs/functions/_template/template.cjs +19 -9
  146. package/dist/cjs/functions/_template/template.cjs.map +2 -2
  147. package/dist/cjs/functions/array/sequence/sequence.cjs +19 -9
  148. package/dist/cjs/functions/array/sequence/sequence.cjs.map +2 -2
  149. package/dist/cjs/functions/criteria-parser.cjs +19 -9
  150. package/dist/cjs/functions/criteria-parser.cjs.map +2 -2
  151. package/dist/cjs/functions/criteria-utils.cjs +19 -9
  152. package/dist/cjs/functions/criteria-utils.cjs.map +2 -2
  153. package/dist/cjs/functions/function-registry.cjs +19 -9
  154. package/dist/cjs/functions/function-registry.cjs.map +2 -2
  155. package/dist/cjs/functions/function-utils.cjs +19 -9
  156. package/dist/cjs/functions/function-utils.cjs.map +2 -2
  157. package/dist/cjs/functions/information/cell/cell.cjs +19 -9
  158. package/dist/cjs/functions/information/cell/cell.cjs.map +2 -2
  159. package/dist/cjs/functions/information/column/column.cjs +19 -9
  160. package/dist/cjs/functions/information/column/column.cjs.map +2 -2
  161. package/dist/cjs/functions/information/row/row.cjs +19 -9
  162. package/dist/cjs/functions/information/row/row.cjs.map +2 -2
  163. package/dist/cjs/functions/logical/and/and.cjs +19 -9
  164. package/dist/cjs/functions/logical/and/and.cjs.map +2 -2
  165. package/dist/cjs/functions/logical/if/if.cjs +19 -9
  166. package/dist/cjs/functions/logical/if/if.cjs.map +2 -2
  167. package/dist/cjs/functions/logical/iferror/iferror.cjs +19 -9
  168. package/dist/cjs/functions/logical/iferror/iferror.cjs.map +2 -2
  169. package/dist/cjs/functions/logical/or/or.cjs +19 -9
  170. package/dist/cjs/functions/logical/or/or.cjs.map +2 -2
  171. package/dist/cjs/functions/lookup/count/count-utils.cjs +19 -9
  172. package/dist/cjs/functions/lookup/count/count-utils.cjs.map +2 -2
  173. package/dist/cjs/functions/lookup/count/count.cjs +19 -9
  174. package/dist/cjs/functions/lookup/count/count.cjs.map +2 -2
  175. package/dist/cjs/functions/lookup/count/countif.cjs +19 -9
  176. package/dist/cjs/functions/lookup/count/countif.cjs.map +2 -2
  177. package/dist/cjs/functions/lookup/count/countifs.cjs +19 -9
  178. package/dist/cjs/functions/lookup/count/countifs.cjs.map +2 -2
  179. package/dist/cjs/functions/lookup/index-lookup/index-lookup.cjs +19 -9
  180. package/dist/cjs/functions/lookup/index-lookup/index-lookup.cjs.map +2 -2
  181. package/dist/cjs/functions/lookup/match/match.cjs +21 -10
  182. package/dist/cjs/functions/lookup/match/match.cjs.map +3 -3
  183. package/dist/cjs/functions/lookup/xlookup/xlookup.cjs +19 -9
  184. package/dist/cjs/functions/lookup/xlookup/xlookup.cjs.map +2 -2
  185. package/dist/cjs/functions/math/average/average-utils.cjs +19 -9
  186. package/dist/cjs/functions/math/average/average-utils.cjs.map +2 -2
  187. package/dist/cjs/functions/math/average/average.cjs +19 -9
  188. package/dist/cjs/functions/math/average/average.cjs.map +2 -2
  189. package/dist/cjs/functions/math/average/averageif.cjs +19 -9
  190. package/dist/cjs/functions/math/average/averageif.cjs.map +2 -2
  191. package/dist/cjs/functions/math/average/averageifs.cjs +19 -9
  192. package/dist/cjs/functions/math/average/averageifs.cjs.map +2 -2
  193. package/dist/cjs/functions/math/ceiling/ceiling.cjs +19 -9
  194. package/dist/cjs/functions/math/ceiling/ceiling.cjs.map +2 -2
  195. package/dist/cjs/functions/math/max/max-utils.cjs +19 -9
  196. package/dist/cjs/functions/math/max/max-utils.cjs.map +2 -2
  197. package/dist/cjs/functions/math/max/max.cjs +19 -9
  198. package/dist/cjs/functions/math/max/max.cjs.map +2 -2
  199. package/dist/cjs/functions/math/max/maxif.cjs +19 -9
  200. package/dist/cjs/functions/math/max/maxif.cjs.map +2 -2
  201. package/dist/cjs/functions/math/max/maxifs.cjs +19 -9
  202. package/dist/cjs/functions/math/max/maxifs.cjs.map +2 -2
  203. package/dist/cjs/functions/math/min/min-utils.cjs +19 -9
  204. package/dist/cjs/functions/math/min/min-utils.cjs.map +2 -2
  205. package/dist/cjs/functions/math/min/min.cjs +19 -9
  206. package/dist/cjs/functions/math/min/min.cjs.map +2 -2
  207. package/dist/cjs/functions/math/min/minif.cjs +19 -9
  208. package/dist/cjs/functions/math/min/minif.cjs.map +2 -2
  209. package/dist/cjs/functions/math/min/minifs.cjs +19 -9
  210. package/dist/cjs/functions/math/min/minifs.cjs.map +2 -2
  211. package/dist/cjs/functions/math/sum/sum.cjs +19 -9
  212. package/dist/cjs/functions/math/sum/sum.cjs.map +2 -2
  213. package/dist/cjs/functions/math/sum/sumif.cjs +19 -9
  214. package/dist/cjs/functions/math/sum/sumif.cjs.map +2 -2
  215. package/dist/cjs/functions/math/sum/sumifs.cjs +19 -9
  216. package/dist/cjs/functions/math/sum/sumifs.cjs.map +2 -2
  217. package/dist/cjs/functions/math/sum/summation-utils.cjs +19 -9
  218. package/dist/cjs/functions/math/sum/summation-utils.cjs.map +2 -2
  219. package/dist/cjs/functions/reference/address/address.cjs +19 -9
  220. package/dist/cjs/functions/reference/address/address.cjs.map +2 -2
  221. package/dist/cjs/functions/reference/indirect/indirect.cjs +19 -9
  222. package/dist/cjs/functions/reference/indirect/indirect.cjs.map +2 -2
  223. package/dist/cjs/functions/reference/offset/offset.cjs +19 -9
  224. package/dist/cjs/functions/reference/offset/offset.cjs.map +2 -2
  225. package/dist/cjs/functions/text/concatenate/concatenate.cjs +21 -9
  226. package/dist/cjs/functions/text/concatenate/concatenate.cjs.map +3 -3
  227. package/dist/cjs/functions/text/exact/exact.cjs +19 -9
  228. package/dist/cjs/functions/text/exact/exact.cjs.map +2 -2
  229. package/dist/cjs/functions/text/find/find.cjs +19 -9
  230. package/dist/cjs/functions/text/find/find.cjs.map +2 -2
  231. package/dist/cjs/functions/text/left/left.cjs +19 -9
  232. package/dist/cjs/functions/text/left/left.cjs.map +2 -2
  233. package/dist/cjs/functions/text/len/len.cjs +19 -9
  234. package/dist/cjs/functions/text/len/len.cjs.map +2 -2
  235. package/dist/cjs/functions/text/mid/mid.cjs +19 -9
  236. package/dist/cjs/functions/text/mid/mid.cjs.map +2 -2
  237. package/dist/cjs/functions/text/right/right.cjs +19 -9
  238. package/dist/cjs/functions/text/right/right.cjs.map +2 -2
  239. package/dist/cjs/functions/text/text-helpers.cjs +19 -9
  240. package/dist/cjs/functions/text/text-helpers.cjs.map +2 -2
  241. package/dist/cjs/functions/text/textjoin/textjoin.cjs +19 -9
  242. package/dist/cjs/functions/text/textjoin/textjoin.cjs.map +2 -2
  243. package/dist/cjs/lib.cjs +24 -13
  244. package/dist/cjs/lib.cjs.map +2 -2
  245. package/dist/cjs/package.json +1 -1
  246. package/dist/cjs/parser/ast.cjs +19 -9
  247. package/dist/cjs/parser/ast.cjs.map +2 -2
  248. package/dist/cjs/parser/formatter.cjs +19 -9
  249. package/dist/cjs/parser/formatter.cjs.map +2 -2
  250. package/dist/cjs/parser/grammar.cjs +19 -9
  251. package/dist/cjs/parser/grammar.cjs.map +2 -2
  252. package/dist/cjs/parser/lexer.cjs +19 -9
  253. package/dist/cjs/parser/lexer.cjs.map +2 -2
  254. package/dist/cjs/parser/parser.cjs +19 -9
  255. package/dist/cjs/parser/parser.cjs.map +2 -2
  256. package/dist/cjs/react/hooks.cjs +31 -10
  257. package/dist/cjs/react/hooks.cjs.map +2 -2
  258. package/dist/mjs/core/commands/command-executor.mjs +7 -5
  259. package/dist/mjs/core/commands/command-executor.mjs.map +3 -3
  260. package/dist/mjs/core/commands/content-commands.mjs +279 -2
  261. package/dist/mjs/core/commands/content-commands.mjs.map +3 -3
  262. package/dist/mjs/core/commands/named-expression-commands.mjs +121 -6
  263. package/dist/mjs/core/commands/named-expression-commands.mjs.map +3 -3
  264. package/dist/mjs/core/commands/structure-commands.mjs +204 -8
  265. package/dist/mjs/core/commands/structure-commands.mjs.map +3 -3
  266. package/dist/mjs/core/commands/table-commands.mjs +117 -6
  267. package/dist/mjs/core/commands/table-commands.mjs.map +3 -3
  268. package/dist/mjs/core/commands/types.mjs +18 -1
  269. package/dist/mjs/core/commands/types.mjs.map +3 -3
  270. package/dist/mjs/core/engine-snapshot.mjs +11 -0
  271. package/dist/mjs/core/engine-snapshot.mjs.map +10 -0
  272. package/dist/mjs/core/engine.mjs +35 -26
  273. package/dist/mjs/core/engine.mjs.map +3 -3
  274. package/dist/mjs/core/managers/cache-manager.mjs +105 -1
  275. package/dist/mjs/core/managers/cache-manager.mjs.map +3 -3
  276. package/dist/mjs/core/managers/dependency-manager.mjs +687 -2
  277. package/dist/mjs/core/managers/dependency-manager.mjs.map +3 -3
  278. package/dist/mjs/core/managers/evaluation-manager.mjs +283 -4
  279. package/dist/mjs/core/managers/evaluation-manager.mjs.map +3 -3
  280. package/dist/mjs/core/managers/frontier-dependency-manager.mjs +47 -4
  281. package/dist/mjs/core/managers/frontier-dependency-manager.mjs.map +3 -3
  282. package/dist/mjs/core/managers/named-expression-manager.mjs +104 -21
  283. package/dist/mjs/core/managers/named-expression-manager.mjs.map +3 -3
  284. package/dist/mjs/core/managers/reference-manager.mjs +7 -1
  285. package/dist/mjs/core/managers/reference-manager.mjs.map +3 -3
  286. package/dist/mjs/core/managers/style-manager.mjs +10 -1
  287. package/dist/mjs/core/managers/style-manager.mjs.map +3 -3
  288. package/dist/mjs/core/managers/table-manager.mjs +14 -4
  289. package/dist/mjs/core/managers/table-manager.mjs.map +3 -3
  290. package/dist/mjs/core/managers/workbook-manager.mjs +20 -5
  291. package/dist/mjs/core/managers/workbook-manager.mjs.map +3 -3
  292. package/dist/mjs/core/resource-keys.mjs +27 -0
  293. package/dist/mjs/core/resource-keys.mjs.map +10 -0
  294. package/dist/mjs/evaluator/dependency-nodes/base-eval-node.mjs +17 -1
  295. package/dist/mjs/evaluator/dependency-nodes/base-eval-node.mjs.map +3 -3
  296. package/dist/mjs/evaluator/dependency-nodes/cell-value-node.mjs +4 -1
  297. package/dist/mjs/evaluator/dependency-nodes/cell-value-node.mjs.map +3 -3
  298. package/dist/mjs/evaluator/dependency-nodes/empty-cell-evaluation-node.mjs +17 -3
  299. package/dist/mjs/evaluator/dependency-nodes/empty-cell-evaluation-node.mjs.map +3 -3
  300. package/dist/mjs/evaluator/dependency-nodes/resource-dependency-node.mjs +21 -0
  301. package/dist/mjs/evaluator/dependency-nodes/resource-dependency-node.mjs.map +10 -0
  302. package/dist/mjs/evaluator/dependency-nodes/virtual-cell-value-node.mjs +4 -1
  303. package/dist/mjs/evaluator/dependency-nodes/virtual-cell-value-node.mjs.map +3 -3
  304. package/dist/mjs/evaluator/formula-evaluator.mjs +42 -4
  305. package/dist/mjs/evaluator/formula-evaluator.mjs.map +3 -3
  306. package/dist/mjs/evaluator/range-evaluation-node.mjs +17 -3
  307. package/dist/mjs/evaluator/range-evaluation-node.mjs.map +3 -3
  308. package/dist/mjs/functions/lookup/match/match.mjs +3 -2
  309. package/dist/mjs/functions/lookup/match/match.mjs.map +3 -3
  310. package/dist/mjs/functions/text/concatenate/concatenate.mjs +3 -1
  311. package/dist/mjs/functions/text/concatenate/concatenate.mjs.map +3 -3
  312. package/dist/mjs/package.json +1 -1
  313. package/dist/types/core/commands/content-commands.d.ts +31 -1
  314. package/dist/types/core/commands/named-expression-commands.d.ts +16 -1
  315. package/dist/types/core/commands/structure-commands.d.ts +24 -1
  316. package/dist/types/core/commands/table-commands.d.ts +16 -1
  317. package/dist/types/core/commands/types.d.ts +25 -1
  318. package/dist/types/core/engine-snapshot.d.ts +138 -0
  319. package/dist/types/core/engine.d.ts +1 -0
  320. package/dist/types/core/managers/cache-manager.d.ts +9 -0
  321. package/dist/types/core/managers/dependency-manager.d.ts +56 -1
  322. package/dist/types/core/managers/dependency-node.d.ts +2 -1
  323. package/dist/types/core/managers/evaluation-manager.d.ts +21 -1
  324. package/dist/types/core/managers/frontier-dependency-manager.d.ts +12 -2
  325. package/dist/types/core/managers/named-expression-manager.d.ts +17 -1
  326. package/dist/types/core/managers/reference-manager.d.ts +3 -0
  327. package/dist/types/core/managers/style-manager.d.ts +3 -0
  328. package/dist/types/core/managers/table-manager.d.ts +3 -0
  329. package/dist/types/core/managers/workbook-manager.d.ts +4 -1
  330. package/dist/types/core/resource-keys.d.ts +14 -0
  331. package/dist/types/evaluator/dependency-nodes/base-eval-node.d.ts +5 -0
  332. package/dist/types/evaluator/dependency-nodes/cell-value-node.d.ts +1 -0
  333. package/dist/types/evaluator/dependency-nodes/empty-cell-evaluation-node.d.ts +8 -1
  334. package/dist/types/evaluator/dependency-nodes/resource-dependency-node.d.ts +8 -0
  335. package/dist/types/evaluator/dependency-nodes/virtual-cell-value-node.d.ts +1 -0
  336. package/dist/types/evaluator/range-evaluation-node.d.ts +8 -1
  337. package/package.json +6 -2
@@ -2,27 +2,37 @@ var __defProp = Object.defineProperty;
2
2
  var __getOwnPropNames = Object.getOwnPropertyNames;
3
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
4
  var __hasOwnProp = Object.prototype.hasOwnProperty;
5
- var __moduleCache = /* @__PURE__ */ new WeakMap;
5
+ function __accessProp(key) {
6
+ return this[key];
7
+ }
6
8
  var __toCommonJS = (from) => {
7
- var entry = __moduleCache.get(from), desc;
9
+ var entry = (__moduleCache ??= new WeakMap).get(from), desc;
8
10
  if (entry)
9
11
  return entry;
10
12
  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
- }));
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (var key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(entry, key))
16
+ __defProp(entry, key, {
17
+ get: __accessProp.bind(from, key),
18
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
19
+ });
20
+ }
16
21
  __moduleCache.set(from, entry);
17
22
  return entry;
18
23
  };
24
+ var __moduleCache;
25
+ var __returnValue = (v) => v;
26
+ function __exportSetter(name, newValue) {
27
+ this[name] = __returnValue.bind(null, newValue);
28
+ }
19
29
  var __export = (target, all) => {
20
30
  for (var name in all)
21
31
  __defProp(target, name, {
22
32
  get: all[name],
23
33
  enumerable: true,
24
34
  configurable: true,
25
- set: (newValue) => all[name] = () => newValue
35
+ set: __exportSetter.bind(all, name)
26
36
  });
27
37
  };
28
38
 
@@ -62,4 +72,4 @@ function countEmptyCells(criteriaRangeResult, parsedCriteria, currentCell) {
62
72
  }
63
73
  }
64
74
 
65
- //# debugId=F23B55D13D52789A64756E2164756E21
75
+ //# debugId=87741DEBA9CEF82F64756E2164756E21
@@ -4,7 +4,7 @@
4
4
  "sourcesContent": [
5
5
  "import {\n type CellAddress,\n type FunctionEvaluationResult,\n type SingleEvaluationResult,\n} from \"../../../core/types.cjs\";\nimport type { ParsedCriteria } from \"../../criteria-parser.cjs\";\n\n/**\n * Performs counting of numeric values from an iterable of SingleEvaluationResult values\n * Handles numbers and infinities according to Excel's COUNT behavior\n * - Propagates errors immediately\n * - Only counts numeric values (numbers and infinities)\n * - Ignores non-numeric values (strings, booleans, empty cells)\n *\n * @param results - Iterable of SingleEvaluationResult to count\n * @returns FunctionEvaluationResult with the count\n */\nexport function performCount(\n results: Iterable<SingleEvaluationResult>\n): FunctionEvaluationResult {\n let count = 0;\n\n for (const result of results) {\n if (result.type === \"error\" || result.type === \"awaiting-evaluation\") {\n // Propagate errors immediately\n return result;\n }\n\n if (result.type === \"value\") {\n if (\n result.result.type === \"number\" ||\n result.result.type === \"infinity\"\n ) {\n count++;\n }\n // Non-numeric values (strings, booleans) are ignored\n }\n }\n\n return {\n type: \"value\",\n result: { type: \"number\", value: count },\n };\n}\n\nexport function countEmptyCells(\n criteriaRangeResult: FunctionEvaluationResult,\n parsedCriteria: ParsedCriteria,\n currentCell: CellAddress\n): FunctionEvaluationResult | undefined {\n // Special case: counting empty cells over infinite ranges\n if (\n criteriaRangeResult.type === \"spilled-values\" &&\n parsedCriteria.type === \"exact\" &&\n parsedCriteria.value.type === \"string\" &&\n parsedCriteria.value.value === \"\"\n ) {\n const spillArea = criteriaRangeResult.spillArea(currentCell);\n\n // Check if this is an infinite range\n if (\n spillArea.end.col.type === \"infinity\" ||\n spillArea.end.row.type === \"infinity\"\n ) {\n // Return infinity for infinite empty cell count\n return {\n type: \"value\",\n result: { type: \"infinity\", sign: \"positive\" },\n };\n }\n }\n}\n"
6
6
  ],
7
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiBO,SAAS,YAAY,CAC1B,SAC0B;AAAA,EAC1B,IAAI,QAAQ;AAAA,EAEZ,WAAW,UAAU,SAAS;AAAA,IAC5B,IAAI,OAAO,SAAS,WAAW,OAAO,SAAS,uBAAuB;AAAA,MAEpE,OAAO;AAAA,IACT;AAAA,IAEA,IAAI,OAAO,SAAS,SAAS;AAAA,MAC3B,IACE,OAAO,OAAO,SAAS,YACvB,OAAO,OAAO,SAAS,YACvB;AAAA,QACA;AAAA,MACF;AAAA,IAEF;AAAA,EACF;AAAA,EAEA,OAAO;AAAA,IACL,MAAM;AAAA,IACN,QAAQ,EAAE,MAAM,UAAU,OAAO,MAAM;AAAA,EACzC;AAAA;AAGK,SAAS,eAAe,CAC7B,qBACA,gBACA,aACsC;AAAA,EAEtC,IACE,oBAAoB,SAAS,oBAC7B,eAAe,SAAS,WACxB,eAAe,MAAM,SAAS,YAC9B,eAAe,MAAM,UAAU,IAC/B;AAAA,IACA,MAAM,YAAY,oBAAoB,UAAU,WAAW;AAAA,IAG3D,IACE,UAAU,IAAI,IAAI,SAAS,cAC3B,UAAU,IAAI,IAAI,SAAS,YAC3B;AAAA,MAEA,OAAO;AAAA,QACL,MAAM;AAAA,QACN,QAAQ,EAAE,MAAM,YAAY,MAAM,WAAW;AAAA,MAC/C;AAAA,IACF;AAAA,EACF;AAAA;",
8
- "debugId": "F23B55D13D52789A64756E2164756E21",
7
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiBO,SAAS,YAAY,CAC1B,SAC0B;AAAA,EAC1B,IAAI,QAAQ;AAAA,EAEZ,WAAW,UAAU,SAAS;AAAA,IAC5B,IAAI,OAAO,SAAS,WAAW,OAAO,SAAS,uBAAuB;AAAA,MAEpE,OAAO;AAAA,IACT;AAAA,IAEA,IAAI,OAAO,SAAS,SAAS;AAAA,MAC3B,IACE,OAAO,OAAO,SAAS,YACvB,OAAO,OAAO,SAAS,YACvB;AAAA,QACA;AAAA,MACF;AAAA,IAEF;AAAA,EACF;AAAA,EAEA,OAAO;AAAA,IACL,MAAM;AAAA,IACN,QAAQ,EAAE,MAAM,UAAU,OAAO,MAAM;AAAA,EACzC;AAAA;AAGK,SAAS,eAAe,CAC7B,qBACA,gBACA,aACsC;AAAA,EAEtC,IACE,oBAAoB,SAAS,oBAC7B,eAAe,SAAS,WACxB,eAAe,MAAM,SAAS,YAC9B,eAAe,MAAM,UAAU,IAC/B;AAAA,IACA,MAAM,YAAY,oBAAoB,UAAU,WAAW;AAAA,IAG3D,IACE,UAAU,IAAI,IAAI,SAAS,cAC3B,UAAU,IAAI,IAAI,SAAS,YAC3B;AAAA,MAEA,OAAO;AAAA,QACL,MAAM;AAAA,QACN,QAAQ,EAAE,MAAM,YAAY,MAAM,WAAW;AAAA,MAC/C;AAAA,IACF;AAAA,EACF;AAAA;",
8
+ "debugId": "87741DEBA9CEF82F64756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -2,27 +2,37 @@ var __defProp = Object.defineProperty;
2
2
  var __getOwnPropNames = Object.getOwnPropertyNames;
3
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
4
  var __hasOwnProp = Object.prototype.hasOwnProperty;
5
- var __moduleCache = /* @__PURE__ */ new WeakMap;
5
+ function __accessProp(key) {
6
+ return this[key];
7
+ }
6
8
  var __toCommonJS = (from) => {
7
- var entry = __moduleCache.get(from), desc;
9
+ var entry = (__moduleCache ??= new WeakMap).get(from), desc;
8
10
  if (entry)
9
11
  return entry;
10
12
  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
- }));
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (var key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(entry, key))
16
+ __defProp(entry, key, {
17
+ get: __accessProp.bind(from, key),
18
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
19
+ });
20
+ }
16
21
  __moduleCache.set(from, entry);
17
22
  return entry;
18
23
  };
24
+ var __moduleCache;
25
+ var __returnValue = (v) => v;
26
+ function __exportSetter(name, newValue) {
27
+ this[name] = __returnValue.bind(null, newValue);
28
+ }
19
29
  var __export = (target, all) => {
20
30
  for (var name in all)
21
31
  __defProp(target, name, {
22
32
  get: all[name],
23
33
  enumerable: true,
24
34
  configurable: true,
25
- set: (newValue) => all[name] = () => newValue
35
+ set: __exportSetter.bind(all, name)
26
36
  });
27
37
  };
28
38
 
@@ -45,4 +55,4 @@ var COUNT = {
45
55
  }
46
56
  };
47
57
 
48
- //# debugId=B1C51F6CA928891C64756E2164756E21
58
+ //# debugId=908511E6C021B25E64756E2164756E21
@@ -4,7 +4,7 @@
4
4
  "sourcesContent": [
5
5
  "import {\n type FunctionDefinition,\n type FunctionEvaluationResult,\n} from \"../../../core/types.cjs\";\nimport { createArgumentIterator } from \"../../../functions/function-utils.cjs\";\nimport { performCount } from \"./count-utils.cjs\";\n\n/**\n * COUNT function - Counts the number of cells that contain numbers\n * \n * Usage: COUNT(value1, [value2], ...)\n * \n * Examples:\n * COUNT(1, 2, 3) - returns 3\n * COUNT(A1:A10) - counts numeric values in the range A1:A10\n * COUNT(A1:A5, B1:B5) - counts numeric values in both ranges\n * \n * Note:\n * - Only numeric values are counted (numbers and infinities)\n * - Text, logical values, and empty cells are ignored\n * - Errors propagate immediately\n * \n * From Excel documentation:\n * \"The COUNT function counts the number of cells that contain numbers, \n * and counts numbers within the list of arguments.\"\n */\nexport const COUNT: FunctionDefinition = {\n name: \"COUNT\",\n evaluate: function (node, context): FunctionEvaluationResult {\n // Create iterator over all argument values\n const argumentValues = createArgumentIterator(this, node, context, \"col-major\");\n\n if (argumentValues.type !== \"values\") {\n return argumentValues;\n }\n // Use shared counting utility\n return performCount(argumentValues.values);\n },\n};\n"
6
6
  ],
7
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIuC,IAAvC;AAC6B,IAA7B;AAqBO,IAAM,QAA4B;AAAA,EACvC,MAAM;AAAA,EACN,UAAU,QAAS,CAAC,MAAM,SAAmC;AAAA,IAE3D,MAAM,iBAAiB,6CAAuB,MAAM,MAAM,SAAS,WAAW;AAAA,IAE9E,IAAI,eAAe,SAAS,UAAU;AAAA,MACpC,OAAO;AAAA,IACT;AAAA,IAEA,OAAO,gCAAa,eAAe,MAAM;AAAA;AAE7C;",
8
- "debugId": "B1C51F6CA928891C64756E2164756E21",
7
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIuC,IAAvC;AAC6B,IAA7B;AAqBO,IAAM,QAA4B;AAAA,EACvC,MAAM;AAAA,EACN,UAAU,QAAS,CAAC,MAAM,SAAmC;AAAA,IAE3D,MAAM,iBAAiB,6CAAuB,MAAM,MAAM,SAAS,WAAW;AAAA,IAE9E,IAAI,eAAe,SAAS,UAAU;AAAA,MACpC,OAAO;AAAA,IACT;AAAA,IAEA,OAAO,gCAAa,eAAe,MAAM;AAAA;AAE7C;",
8
+ "debugId": "908511E6C021B25E64756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -2,27 +2,37 @@ var __defProp = Object.defineProperty;
2
2
  var __getOwnPropNames = Object.getOwnPropertyNames;
3
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
4
  var __hasOwnProp = Object.prototype.hasOwnProperty;
5
- var __moduleCache = /* @__PURE__ */ new WeakMap;
5
+ function __accessProp(key) {
6
+ return this[key];
7
+ }
6
8
  var __toCommonJS = (from) => {
7
- var entry = __moduleCache.get(from), desc;
9
+ var entry = (__moduleCache ??= new WeakMap).get(from), desc;
8
10
  if (entry)
9
11
  return entry;
10
12
  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
- }));
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (var key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(entry, key))
16
+ __defProp(entry, key, {
17
+ get: __accessProp.bind(from, key),
18
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
19
+ });
20
+ }
16
21
  __moduleCache.set(from, entry);
17
22
  return entry;
18
23
  };
24
+ var __moduleCache;
25
+ var __returnValue = (v) => v;
26
+ function __exportSetter(name, newValue) {
27
+ this[name] = __returnValue.bind(null, newValue);
28
+ }
19
29
  var __export = (target, all) => {
20
30
  for (var name in all)
21
31
  __defProp(target, name, {
22
32
  get: all[name],
23
33
  enumerable: true,
24
34
  configurable: true,
25
- set: (newValue) => all[name] = () => newValue
35
+ set: __exportSetter.bind(all, name)
26
36
  });
27
37
  };
28
38
 
@@ -91,4 +101,4 @@ var COUNTIF = {
91
101
  }
92
102
  };
93
103
 
94
- //# debugId=F14CE5EF11A4B8D564756E2164756E21
104
+ //# debugId=41F8166B5D22651564756E2164756E21
@@ -4,7 +4,7 @@
4
4
  "sourcesContent": [
5
5
  "import {\n FormulaError,\n type FunctionDefinition,\n type FunctionEvaluationResult,\n} from \"../../../core/types.cjs\";\nimport type { EvaluationContext } from \"../../../evaluator/evaluation-context.cjs\";\nimport {\n processMultiCriteriaValues,\n validateSingleCriteriaArgs,\n} from \"../../criteria-utils.cjs\";\nimport { parseCriteria, matchesParsedCriteria } from \"../../criteria-parser.cjs\";\nimport { countEmptyCells } from \"./count-utils.cjs\";\n\n/**\n * COUNTIF function - Counts cells in a range that meet a criteria\n *\n * Usage: COUNTIF(range, criteria)\n *\n * range: The range of cells to evaluate\n * criteria: The criteria to match against. Can be:\n * - Exact value: \"Apple\", 42\n * - Comparison: \">10\", \"<=5\", \"<>0\"\n * - Wildcards: \"App*\", \"?ruit\"\n *\n * Examples:\n * COUNTIF(A1:A10, \"Apple\") - counts cells containing \"Apple\"\n * COUNTIF(B1:B10, \">10\") - counts cells with values greater than 10\n * COUNTIF(C1:C10, \"App*\") - counts cells starting with \"App\"\n *\n * Note:\n * - Supports type coercion for comparisons\n * - Case-sensitive string matching\n * - Wildcards: * matches any sequence, ? matches any single character\n */\n\n/**\n * COUNTIF function implementation\n */\nexport const COUNTIF: FunctionDefinition = {\n name: \"COUNTIF\",\n evaluate: function (node, context): FunctionEvaluationResult {\n // Validate arguments - COUNTIF takes exactly 2 arguments\n if (node.args.length !== 2) {\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n message: \"COUNTIF function takes exactly 2 arguments\",\n errAddress: context.dependencyNode,\n };\n }\n\n // Evaluate criteria range (first argument)\n const criteriaRangeResult = this.evaluateNode(node.args[0]!, context);\n if (criteriaRangeResult.type === \"error\" || criteriaRangeResult.type === \"awaiting-evaluation\") {\n return criteriaRangeResult;\n }\n\n // Evaluate criteria (second argument)\n const criteriaResult = this.evaluateNode(node.args[1]!, context);\n if (criteriaResult.type === \"error\" || criteriaResult.type === \"awaiting-evaluation\") {\n return criteriaResult;\n }\n\n if (criteriaResult.type !== \"value\") {\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n message: \"COUNTIF criteria must be a single value\",\n errAddress: context.dependencyNode,\n };\n }\n\n // Parse criteria\n const parsedCriteria = parseCriteria(criteriaResult.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 // Special case: counting empty cells over infinite ranges\n const countingEmptyCells = countEmptyCells(\n criteriaRangeResult,\n parsedCriteria,\n context.cellAddress\n );\n if (countingEmptyCells) {\n return countingEmptyCells;\n }\n\n // Use shared criteria processing - count all matching values (including non-numeric)\n let count = 0;\n\n const results = processMultiCriteriaValues(\n this,\n criteriaRangeResult,\n [{ rangeResult: criteriaRangeResult, parsedCriteria }],\n context,\n \"col-major\"\n );\n\n if (results.type === \"error\" || results.type === \"awaiting-evaluation\") {\n return results;\n }\n\n for (const result of results.values) {\n // COUNTIF counts all matching cells, including errors and non-numeric values\n count++;\n }\n\n return {\n type: \"value\",\n result: { type: \"number\", value: count },\n };\n },\n};\n"
6
6
  ],
7
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIO,IAJP;AASO,IAHP;AAIqD,IAArD;AACgC,IAAhC;AA2BO,IAAM,UAA8B;AAAA,EACzC,MAAM;AAAA,EACN,UAAU,QAAS,CAAC,MAAM,SAAmC;AAAA,IAE3D,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,MAAM,sBAAsB,KAAK,aAAa,KAAK,KAAK,IAAK,OAAO;AAAA,IACpE,IAAI,oBAAoB,SAAS,WAAW,oBAAoB,SAAS,uBAAuB;AAAA,MAC9F,OAAO;AAAA,IACT;AAAA,IAGA,MAAM,iBAAiB,KAAK,aAAa,KAAK,KAAK,IAAK,OAAO;AAAA,IAC/D,IAAI,eAAe,SAAS,WAAW,eAAe,SAAS,uBAAuB;AAAA,MACpF,OAAO;AAAA,IACT;AAAA,IAEA,IAAI,eAAe,SAAS,SAAS;AAAA,MACnC,OAAO;AAAA,QACL,MAAM;AAAA,QACN,KAAK,0BAAa;AAAA,QAClB,SAAS;AAAA,QACT,YAAY,QAAQ;AAAA,MACtB;AAAA,IACF;AAAA,IAGA,MAAM,iBAAiB,qCAAc,eAAe,MAAM;AAAA,IAC1D,IAAI,eAAe,SAAS,SAAS;AAAA,MACnC,OAAO;AAAA,QACL,MAAM;AAAA,QACN,KAAK,0BAAa;AAAA,QAClB,SAAS,eAAe;AAAA,QACxB,YAAY,QAAQ;AAAA,MACtB;AAAA,IACF;AAAA,IAGA,MAAM,qBAAqB,mCACzB,qBACA,gBACA,QAAQ,WACV;AAAA,IACA,IAAI,oBAAoB;AAAA,MACtB,OAAO;AAAA,IACT;AAAA,IAGA,IAAI,QAAQ;AAAA,IAEZ,MAAM,UAAU,iDACd,MACA,qBACA,CAAC,EAAE,aAAa,qBAAqB,eAAe,CAAC,GACrD,SACA,WACF;AAAA,IAEA,IAAI,QAAQ,SAAS,WAAW,QAAQ,SAAS,uBAAuB;AAAA,MACtE,OAAO;AAAA,IACT;AAAA,IAEA,WAAW,UAAU,QAAQ,QAAQ;AAAA,MAEnC;AAAA,IACF;AAAA,IAEA,OAAO;AAAA,MACL,MAAM;AAAA,MACN,QAAQ,EAAE,MAAM,UAAU,OAAO,MAAM;AAAA,IACzC;AAAA;AAEJ;",
8
- "debugId": "F14CE5EF11A4B8D564756E2164756E21",
7
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIO,IAJP;AASO,IAHP;AAIqD,IAArD;AACgC,IAAhC;AA2BO,IAAM,UAA8B;AAAA,EACzC,MAAM;AAAA,EACN,UAAU,QAAS,CAAC,MAAM,SAAmC;AAAA,IAE3D,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,MAAM,sBAAsB,KAAK,aAAa,KAAK,KAAK,IAAK,OAAO;AAAA,IACpE,IAAI,oBAAoB,SAAS,WAAW,oBAAoB,SAAS,uBAAuB;AAAA,MAC9F,OAAO;AAAA,IACT;AAAA,IAGA,MAAM,iBAAiB,KAAK,aAAa,KAAK,KAAK,IAAK,OAAO;AAAA,IAC/D,IAAI,eAAe,SAAS,WAAW,eAAe,SAAS,uBAAuB;AAAA,MACpF,OAAO;AAAA,IACT;AAAA,IAEA,IAAI,eAAe,SAAS,SAAS;AAAA,MACnC,OAAO;AAAA,QACL,MAAM;AAAA,QACN,KAAK,0BAAa;AAAA,QAClB,SAAS;AAAA,QACT,YAAY,QAAQ;AAAA,MACtB;AAAA,IACF;AAAA,IAGA,MAAM,iBAAiB,qCAAc,eAAe,MAAM;AAAA,IAC1D,IAAI,eAAe,SAAS,SAAS;AAAA,MACnC,OAAO;AAAA,QACL,MAAM;AAAA,QACN,KAAK,0BAAa;AAAA,QAClB,SAAS,eAAe;AAAA,QACxB,YAAY,QAAQ;AAAA,MACtB;AAAA,IACF;AAAA,IAGA,MAAM,qBAAqB,mCACzB,qBACA,gBACA,QAAQ,WACV;AAAA,IACA,IAAI,oBAAoB;AAAA,MACtB,OAAO;AAAA,IACT;AAAA,IAGA,IAAI,QAAQ;AAAA,IAEZ,MAAM,UAAU,iDACd,MACA,qBACA,CAAC,EAAE,aAAa,qBAAqB,eAAe,CAAC,GACrD,SACA,WACF;AAAA,IAEA,IAAI,QAAQ,SAAS,WAAW,QAAQ,SAAS,uBAAuB;AAAA,MACtE,OAAO;AAAA,IACT;AAAA,IAEA,WAAW,UAAU,QAAQ,QAAQ;AAAA,MAEnC;AAAA,IACF;AAAA,IAEA,OAAO;AAAA,MACL,MAAM;AAAA,MACN,QAAQ,EAAE,MAAM,UAAU,OAAO,MAAM;AAAA,IACzC;AAAA;AAEJ;",
8
+ "debugId": "41F8166B5D22651564756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -2,27 +2,37 @@ var __defProp = Object.defineProperty;
2
2
  var __getOwnPropNames = Object.getOwnPropertyNames;
3
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
4
  var __hasOwnProp = Object.prototype.hasOwnProperty;
5
- var __moduleCache = /* @__PURE__ */ new WeakMap;
5
+ function __accessProp(key) {
6
+ return this[key];
7
+ }
6
8
  var __toCommonJS = (from) => {
7
- var entry = __moduleCache.get(from), desc;
9
+ var entry = (__moduleCache ??= new WeakMap).get(from), desc;
8
10
  if (entry)
9
11
  return entry;
10
12
  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
- }));
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (var key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(entry, key))
16
+ __defProp(entry, key, {
17
+ get: __accessProp.bind(from, key),
18
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
19
+ });
20
+ }
16
21
  __moduleCache.set(from, entry);
17
22
  return entry;
18
23
  };
24
+ var __moduleCache;
25
+ var __returnValue = (v) => v;
26
+ function __exportSetter(name, newValue) {
27
+ this[name] = __returnValue.bind(null, newValue);
28
+ }
19
29
  var __export = (target, all) => {
20
30
  for (var name in all)
21
31
  __defProp(target, name, {
22
32
  get: all[name],
23
33
  enumerable: true,
24
34
  configurable: true,
25
- set: (newValue) => all[name] = () => newValue
35
+ set: __exportSetter.bind(all, name)
26
36
  });
27
37
  };
28
38
 
@@ -60,4 +70,4 @@ var COUNTIFS = {
60
70
  }
61
71
  };
62
72
 
63
- //# debugId=E149D62B1FFDA36C64756E2164756E21
73
+ //# debugId=D102B9167A4E88B464756E2164756E21
@@ -4,7 +4,7 @@
4
4
  "sourcesContent": [
5
5
  "import {\n FormulaError,\n type FunctionDefinition,\n type FunctionEvaluationResult,\n} from \"../../../core/types.cjs\";\nimport type { EvaluationContext } from \"../../../evaluator/evaluation-context.cjs\";\nimport { \n parseCriteriaPairs, \n processMultiCriteriaValues, \n validateCountifsArgs \n} from \"../../criteria-utils.cjs\";\n\n/**\n * COUNTIFS function - Counts cells that meet multiple criteria\n * \n * Usage: COUNTIFS(criteria_range1, criteria1, [criteria_range2, criteria2], ...)\n * \n * criteria_range1: The first range to evaluate against criteria1\n * criteria1: The first criteria to match against\n * criteria_range2, criteria2: Optional additional criteria pairs\n * \n * Examples:\n * COUNTIFS(A1:A10, \"Apple\") - counts cells in A1:A10 that equal \"Apple\"\n * COUNTIFS(A1:A10, \"Apple\", B1:B10, \">10\") - counts where A1:A10 = \"Apple\" AND B1:B10 > 10\n * \n * Note:\n * - All criteria must be satisfied for a cell to be counted\n * - Counts all matching cells, not just numeric ones\n * - Returns 0 if no cells match all criteria\n * - Unlike other IFS functions, COUNTIFS counts the first criteria range itself\n */\nexport const COUNTIFS: FunctionDefinition = {\n name: \"COUNTIFS\",\n evaluate: function (node, context): FunctionEvaluationResult {\n // Validate arguments\n const argError = validateCountifsArgs(node.args.length, context);\n if (argError) {\n return argError;\n }\n\n // Parse criteria pairs starting from argument 0 (COUNTIFS has different syntax)\n const criteriaPairsResult = parseCriteriaPairs.call(this, node, context, this.evaluateNode, 0);\n if ('type' in criteriaPairsResult) {\n return criteriaPairsResult;\n }\n\n // The first criteria range is what we count\n const countRangeResult = criteriaPairsResult[0]!.rangeResult;\n\n // Process values with criteria using generator - count all matching cells (including non-numeric)\n let count = 0;\n\n const matchingValues = processMultiCriteriaValues(\n this,\n countRangeResult,\n criteriaPairsResult,\n context,\n \"col-major\"\n );\n \n if (matchingValues.type === \"error\" || matchingValues.type === \"awaiting-evaluation\") {\n return matchingValues;\n }\n\n for (const result of matchingValues.values) {\n // COUNTIFS counts all matching cells, including errors and non-numeric values\n count++;\n }\n\n return {\n type: \"value\",\n result: { type: \"number\", value: count },\n };\n },\n};\n"
6
6
  ],
7
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAUO,IAJP;AAyBO,IAAM,WAA+B;AAAA,EAC1C,MAAM;AAAA,EACN,UAAU,QAAS,CAAC,MAAM,SAAmC;AAAA,IAE3D,MAAM,WAAW,2CAAqB,KAAK,KAAK,QAAQ,OAAO;AAAA,IAC/D,IAAI,UAAU;AAAA,MACZ,OAAO;AAAA,IACT;AAAA,IAGA,MAAM,sBAAsB,yCAAmB,KAAK,MAAM,MAAM,SAAS,KAAK,cAAc,CAAC;AAAA,IAC7F,IAAI,UAAU,qBAAqB;AAAA,MACjC,OAAO;AAAA,IACT;AAAA,IAGA,MAAM,mBAAmB,oBAAoB,GAAI;AAAA,IAGjD,IAAI,QAAQ;AAAA,IAEZ,MAAM,iBAAiB,iDACrB,MACA,kBACA,qBACA,SACA,WACF;AAAA,IAEA,IAAI,eAAe,SAAS,WAAW,eAAe,SAAS,uBAAuB;AAAA,MACpF,OAAO;AAAA,IACT;AAAA,IAEA,WAAW,UAAU,eAAe,QAAQ;AAAA,MAE1C;AAAA,IACF;AAAA,IAEA,OAAO;AAAA,MACL,MAAM;AAAA,MACN,QAAQ,EAAE,MAAM,UAAU,OAAO,MAAM;AAAA,IACzC;AAAA;AAEJ;",
8
- "debugId": "E149D62B1FFDA36C64756E2164756E21",
7
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAUO,IAJP;AAyBO,IAAM,WAA+B;AAAA,EAC1C,MAAM;AAAA,EACN,UAAU,QAAS,CAAC,MAAM,SAAmC;AAAA,IAE3D,MAAM,WAAW,2CAAqB,KAAK,KAAK,QAAQ,OAAO;AAAA,IAC/D,IAAI,UAAU;AAAA,MACZ,OAAO;AAAA,IACT;AAAA,IAGA,MAAM,sBAAsB,yCAAmB,KAAK,MAAM,MAAM,SAAS,KAAK,cAAc,CAAC;AAAA,IAC7F,IAAI,UAAU,qBAAqB;AAAA,MACjC,OAAO;AAAA,IACT;AAAA,IAGA,MAAM,mBAAmB,oBAAoB,GAAI;AAAA,IAGjD,IAAI,QAAQ;AAAA,IAEZ,MAAM,iBAAiB,iDACrB,MACA,kBACA,qBACA,SACA,WACF;AAAA,IAEA,IAAI,eAAe,SAAS,WAAW,eAAe,SAAS,uBAAuB;AAAA,MACpF,OAAO;AAAA,IACT;AAAA,IAEA,WAAW,UAAU,eAAe,QAAQ;AAAA,MAE1C;AAAA,IACF;AAAA,IAEA,OAAO;AAAA,MACL,MAAM;AAAA,MACN,QAAQ,EAAE,MAAM,UAAU,OAAO,MAAM;AAAA,IACzC;AAAA;AAEJ;",
8
+ "debugId": "D102B9167A4E88B464756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -2,27 +2,37 @@ var __defProp = Object.defineProperty;
2
2
  var __getOwnPropNames = Object.getOwnPropertyNames;
3
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
4
  var __hasOwnProp = Object.prototype.hasOwnProperty;
5
- var __moduleCache = /* @__PURE__ */ new WeakMap;
5
+ function __accessProp(key) {
6
+ return this[key];
7
+ }
6
8
  var __toCommonJS = (from) => {
7
- var entry = __moduleCache.get(from), desc;
9
+ var entry = (__moduleCache ??= new WeakMap).get(from), desc;
8
10
  if (entry)
9
11
  return entry;
10
12
  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
- }));
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (var key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(entry, key))
16
+ __defProp(entry, key, {
17
+ get: __accessProp.bind(from, key),
18
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
19
+ });
20
+ }
16
21
  __moduleCache.set(from, entry);
17
22
  return entry;
18
23
  };
24
+ var __moduleCache;
25
+ var __returnValue = (v) => v;
26
+ function __exportSetter(name, newValue) {
27
+ this[name] = __returnValue.bind(null, newValue);
28
+ }
19
29
  var __export = (target, all) => {
20
30
  for (var name in all)
21
31
  __defProp(target, name, {
22
32
  get: all[name],
23
33
  enumerable: true,
24
34
  configurable: true,
25
- set: (newValue) => all[name] = () => newValue
35
+ set: __exportSetter.bind(all, name)
26
36
  });
27
37
  };
28
38
 
@@ -184,4 +194,4 @@ var INDEX = {
184
194
  }
185
195
  };
186
196
 
187
- //# debugId=8779021A2BF7397664756E2164756E21
197
+ //# debugId=800CD92FC61540F364756E2164756E21
@@ -4,7 +4,7 @@
4
4
  "sourcesContent": [
5
5
  "import {\n FormulaError,\n type CellValue,\n type FunctionDefinition,\n type FunctionEvaluationResult,\n type ValueEvaluationResult,\n type SpilledValuesEvaluationResult,\n type CellAddress,\n type SpreadsheetRange,\n type ErrorEvaluationResult,\n} from \"../../../core/types.cjs\";\nimport type { FormulaEngine } from \"../../../core/engine.cjs\";\nimport type { FormulaEvaluator } from \"../../../evaluator/formula-evaluator.cjs\";\nimport type { EvaluationContext } from \"../../../evaluator/evaluation-context.cjs\";\n\n/**\n * INDEX function - Returns a value from a table or array\n * INDEX(array, row_num, [column_num])\n *\n * STRICT TYPE CHECKING:\n * - array: range/array only\n * - row_num: number only (integer, 1-based)\n * - column_num: number only (integer, 1-based, optional)\n *\n * If array is 1-dimensional (single row or column):\n * - Only row_num is used (treats as a linear array)\n * - column_num is ignored if provided\n *\n * If array is 2-dimensional:\n * - Both row_num and column_num can be used\n * - If column_num is omitted, returns entire row\n */\n\n// Helper function to get value from array at specific position\nfunction getValueFromArray(\n this: FormulaEvaluator,\n arrayResult: SpilledValuesEvaluationResult,\n row: number,\n col: number,\n context: EvaluationContext\n): CellValue | ErrorEvaluationResult {\n const dims = arrayResult.spillArea(context.cellAddress);\n\n // Convert 1-based indices to 0-based\n const rowIndex = row - 1;\n const colIndex = col - 1;\n\n // Calculate actual cell position\n const actualRow = dims.start.row + rowIndex;\n const actualCol = dims.start.col + colIndex;\n\n // Check bounds\n if (\n actualRow < 0 ||\n (dims.end.row.type === \"number\" && actualRow > dims.end.row.value)\n ) {\n return {\n type: \"error\",\n err: FormulaError.REF,\n message: `INDEX: row_num ${row} is out of range`,\n errAddress: context.dependencyNode,\n };\n }\n\n if (\n actualCol < 0 ||\n (dims.end.col.type === \"number\" && actualCol > dims.end.col.value)\n ) {\n return {\n type: \"error\",\n err: FormulaError.REF,\n message: `INDEX: column_num ${col} is out of range`,\n errAddress: context.dependencyNode,\n };\n }\n\n const spilledAddress: CellAddress = {\n colIndex: actualCol,\n rowIndex: actualRow,\n sheetName: context.cellAddress.sheetName,\n workbookName: context.cellAddress.workbookName,\n };\n\n const spill = {\n address: spilledAddress,\n spillOffset: {\n x: actualCol - dims.start.col,\n y: actualRow - dims.start.row,\n },\n };\n\n const spillResult = arrayResult.evaluate(spill.spillOffset, context);\n\n if (!spillResult) {\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n message: \"INDEX: Unable to retrieve value from array\",\n errAddress: context.dependencyNode,\n };\n }\n\n if (\n spillResult.type === \"error\" ||\n spillResult.type === \"awaiting-evaluation\"\n ) {\n return spillResult;\n }\n\n return spillResult.result;\n}\n\nexport const INDEX: FunctionDefinition = {\n name: \"INDEX\",\n evaluate: function (node, context): FunctionEvaluationResult {\n if (node.args.length < 2 || node.args.length > 3) {\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n message: \"INDEX function takes 2 or 3 arguments\",\n errAddress: context.dependencyNode,\n };\n }\n\n // Evaluate array argument\n const arrayResult = this.evaluateNode(node.args[0]!, context);\n if (\n arrayResult.type === \"error\" ||\n arrayResult.type === \"awaiting-evaluation\"\n ) {\n return arrayResult;\n }\n\n // Evaluate row_num argument\n const rowNumResult = this.evaluateNode(node.args[1]!, context);\n if (\n rowNumResult.type === \"error\" ||\n rowNumResult.type === \"awaiting-evaluation\"\n ) {\n return rowNumResult;\n }\n\n // Evaluate column_num argument (optional)\n let colNumResult: FunctionEvaluationResult | null = null;\n if (node.args[2]) {\n colNumResult = this.evaluateNode(node.args[2], context);\n if (\n colNumResult.type === \"error\" ||\n colNumResult.type === \"awaiting-evaluation\"\n ) {\n return colNumResult;\n }\n }\n\n // Handle spilled arrays for row_num and col_num (not array which is expected to be a range)\n if (\n rowNumResult.type === \"spilled-values\" ||\n (colNumResult && colNumResult.type === \"spilled-values\")\n ) {\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n message:\n \"INDEX: Spilled row_num/column_num arguments not yet implemented\",\n errAddress: context.dependencyNode,\n };\n }\n\n // Strict type checking for row_num\n if (rowNumResult.result.type !== \"number\") {\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n message: `INDEX row_num must be number, got ${rowNumResult.result.type}`,\n errAddress: context.dependencyNode,\n };\n }\n\n const colNumValue = colNumResult?.result;\n\n // Strict type checking for column_num if provided\n if (colNumValue && colNumValue.type !== \"number\") {\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n message: `INDEX column_num must be number, got ${colNumValue.type}`,\n errAddress: context.dependencyNode,\n };\n }\n\n // Extract row and column numbers (convert to integers)\n const rowNum = Math.floor(rowNumResult.result.value);\n const colNum = colNumValue ? Math.floor(colNumValue.value) : 1;\n\n // Validate that indices are positive\n if (rowNum < 1) {\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n message: `INDEX row_num must be >= 1, got ${rowNum}`,\n errAddress: context.dependencyNode,\n };\n }\n\n if (colNum < 1) {\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n message: `INDEX column_num must be >= 1, got ${colNum}`,\n errAddress: context.dependencyNode,\n };\n }\n\n // Handle different array result types\n if (arrayResult.type === \"value\") {\n // Single value case - can only access [1,1]\n if (rowNum !== 1 || colNum !== 1) {\n return {\n type: \"error\",\n err: FormulaError.REF,\n message: `INDEX: Single value can only be accessed at [1,1], got [${rowNum},${colNum}]`,\n errAddress: context.dependencyNode,\n };\n }\n return {\n type: \"value\",\n result: arrayResult.result,\n } satisfies ValueEvaluationResult;\n } else if (arrayResult.type === \"spilled-values\") {\n // Array case - use helper function to get value\n const result = getValueFromArray.call(\n this,\n arrayResult,\n rowNum,\n colNum,\n context\n );\n\n if (result.type === \"error\" || result.type === \"awaiting-evaluation\") {\n return result;\n }\n\n return {\n type: \"value\",\n result,\n } satisfies ValueEvaluationResult;\n } else {\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n message: \"INDEX: Invalid array argument type\",\n errAddress: context.dependencyNode,\n };\n }\n },\n};\n"
6
6
  ],
7
- "mappings": "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",
8
- "debugId": "8779021A2BF7397664756E2164756E21",
7
+ "mappings": "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",
8
+ "debugId": "800CD92FC61540F364756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -2,27 +2,37 @@ var __defProp = Object.defineProperty;
2
2
  var __getOwnPropNames = Object.getOwnPropertyNames;
3
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
4
  var __hasOwnProp = Object.prototype.hasOwnProperty;
5
- var __moduleCache = /* @__PURE__ */ new WeakMap;
5
+ function __accessProp(key) {
6
+ return this[key];
7
+ }
6
8
  var __toCommonJS = (from) => {
7
- var entry = __moduleCache.get(from), desc;
9
+ var entry = (__moduleCache ??= new WeakMap).get(from), desc;
8
10
  if (entry)
9
11
  return entry;
10
12
  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
- }));
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (var key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(entry, key))
16
+ __defProp(entry, key, {
17
+ get: __accessProp.bind(from, key),
18
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
19
+ });
20
+ }
16
21
  __moduleCache.set(from, entry);
17
22
  return entry;
18
23
  };
24
+ var __moduleCache;
25
+ var __returnValue = (v) => v;
26
+ function __exportSetter(name, newValue) {
27
+ this[name] = __returnValue.bind(null, newValue);
28
+ }
19
29
  var __export = (target, all) => {
20
30
  for (var name in all)
21
31
  __defProp(target, name, {
22
32
  get: all[name],
23
33
  enumerable: true,
24
34
  configurable: true,
25
- set: (newValue) => all[name] = () => newValue
35
+ set: __exportSetter.bind(all, name)
26
36
  });
27
37
  };
28
38
 
@@ -57,7 +67,8 @@ function matchOperation(lookupValue, lookupArray, matchType, context, isHorizont
57
67
  if (value.result.type === "value") {
58
68
  if (matchType === 0) {
59
69
  const arrayValue = value.result.result;
60
- if (arrayValue.type === lookupValue.type && arrayValue.value === lookupValue.value) {
70
+ const isMatch = arrayValue.type === lookupValue.type && (arrayValue.type === "string" && lookupValue.type === "string" ? arrayValue.value.toLowerCase() === lookupValue.value.toLowerCase() : arrayValue.value === lookupValue.value);
71
+ if (isMatch) {
61
72
  const position = isHorizontal ? value.relativePos.x + 1 : value.relativePos.y + 1;
62
73
  return {
63
74
  type: "value",
@@ -165,4 +176,4 @@ var MATCH = {
165
176
  }
166
177
  };
167
178
 
168
- //# debugId=257F4324FF46EBF164756E2164756E21
179
+ //# debugId=6E6893FCBCEC14A264756E2164756E21
@@ -2,9 +2,9 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/functions/lookup/match/match.ts"],
4
4
  "sourcesContent": [
5
- "import {\n FormulaError,\n type CellValue,\n type EvaluateAllCellsResult,\n type FunctionDefinition,\n type FunctionEvaluationResult,\n} from \"../../../core/types.cjs\";\nimport type { EvaluationContext } from \"../../../evaluator/evaluation-context.cjs\";\n\n/**\n * MATCH function - Returns the position of a value in an array\n * MATCH(lookup_value, lookup_array, [match_type])\n * match_type: 1 = less than or equal (default), 0 = exact match, -1 = greater than or equal\n *\n * STRICT TYPE CHECKING:\n * - lookup_value: string or number only\n * - lookup_array: array of strings or numbers only\n * - match_type: number only (must be -1, 0, or 1)\n */\n\n// Helper function to perform MATCH operation\nfunction matchOperation(\n lookupValue: CellValue,\n lookupArray: EvaluateAllCellsResult,\n matchType: number,\n context: EvaluationContext,\n isHorizontal: boolean\n): FunctionEvaluationResult {\n // Strict type checking for lookup_value\n if (lookupValue.type !== \"string\" && lookupValue.type !== \"number\") {\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n message: `MATCH lookup_value must be string or number, got ${lookupValue.type}`,\n errAddress: context.dependencyNode,\n };\n }\n\n // Validate match_type\n if (matchType !== -1 && matchType !== 0 && matchType !== 1) {\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n message: `MATCH match_type must be -1, 0, or 1, got ${matchType}`,\n errAddress: context.dependencyNode,\n };\n }\n if (\n lookupArray.type === \"awaiting-evaluation\" ||\n lookupArray.type === \"error\"\n ) {\n return lookupArray;\n }\n\n for (const value of lookupArray.values) {\n if (value.result.type === \"value\") {\n if (matchType === 0) {\n // Exact match\n const arrayValue = value.result.result;\n\n if (\n arrayValue.type === lookupValue.type &&\n arrayValue.value === lookupValue.value\n ) {\n // For horizontal arrays (single row), use x position (column index)\n // For vertical arrays (single/multiple columns), use y position (row index)\n const position = isHorizontal\n ? value.relativePos.x + 1\n : value.relativePos.y + 1;\n\n return {\n type: \"value\",\n result: { type: \"number\", value: position },\n }; // 1-based index\n }\n } else {\n // Approximate match (1 or -1) - requires sorted array\n // For now, throw an error until we add sorting validation\n // TODO: Add proper approximate match logic with sorted array validation\n throw new Error(\"MATCH: approximate match not fully implemented\");\n }\n }\n }\n\n return {\n type: \"error\",\n err: FormulaError.NA,\n message: \"MATCH: lookup_value not found in lookup_array\",\n errAddress: context.dependencyNode,\n };\n}\n\nexport const MATCH: FunctionDefinition = {\n name: \"MATCH\",\n evaluate: function (node, context): FunctionEvaluationResult {\n if (node.args.length < 2 || node.args.length > 3) {\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n message: \"MATCH function takes 2 or 3 arguments\",\n errAddress: context.dependencyNode,\n };\n }\n\n // Evaluate lookup_value\n const lookupValueResult = this.evaluateNode(node.args[0]!, context);\n if (\n lookupValueResult.type === \"error\" ||\n lookupValueResult.type === \"awaiting-evaluation\"\n ) {\n return lookupValueResult;\n }\n\n // Evaluate lookup_array\n const lookupArrayResult = this.evaluateNode(node.args[1]!, context);\n if (\n lookupArrayResult.type === \"error\" ||\n lookupArrayResult.type === \"awaiting-evaluation\"\n ) {\n return lookupArrayResult;\n }\n\n // Evaluate match_type (optional, defaults to 1)\n let matchTypeResult: FunctionEvaluationResult = {\n type: \"value\",\n result: { type: \"number\", value: 1 },\n };\n\n if (node.args[2]) {\n matchTypeResult = this.evaluateNode(node.args[2], context);\n if (\n matchTypeResult.type === \"error\" ||\n matchTypeResult.type === \"awaiting-evaluation\"\n ) {\n return matchTypeResult;\n }\n }\n\n // Handle spilled arrays for lookup_value and match_type (not lookup_array which is expected to be a range)\n if (\n lookupValueResult.type === \"spilled-values\" ||\n matchTypeResult.type === \"spilled-values\"\n ) {\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n message: \"MATCH: Spilled array arguments not yet implemented\",\n errAddress: context.dependencyNode,\n };\n }\n\n // Strict type checking for match_type\n if (matchTypeResult.result.type !== \"number\") {\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n message: `MATCH match_type must be number, got ${matchTypeResult.result.type}`,\n errAddress: context.dependencyNode,\n };\n }\n\n // Extract lookup_array values\n let lookupArray: EvaluateAllCellsResult = {\n type: \"awaiting-evaluation\",\n waitingFor: context.dependencyNode,\n errAddress: context.dependencyNode,\n };\n let isHorizontal = false;\n\n // Handle direct range arguments (like A:A) before extracting lookup_array values\n\n // Extract lookup_array values for non-infinite ranges\n if (lookupArrayResult.type === \"value\") {\n // Single value case - treat as array with one element\n lookupArray = {\n type: \"values\",\n values: [{ result: lookupArrayResult, relativePos: { x: 0, y: 0 } }],\n };\n isHorizontal = false; // Single value, treat as vertical\n } else if (lookupArrayResult.type === \"spilled-values\") {\n // Validate that lookup_array is 1D (either single row OR single column)\n const spillArea = lookupArrayResult.spillArea(context.cellAddress);\n const startRow = spillArea.start.row;\n const endRow = spillArea.end.row;\n const startCol = spillArea.start.col;\n const endCol = spillArea.end.col;\n\n // Check if it's a single row (horizontal)\n const isSingleRow = endRow.type === \"number\" && startRow === endRow.value;\n\n // Check if it's a single column (vertical)\n const isSingleCol = endCol.type === \"number\" && startCol === endCol.value;\n\n // MATCH requires a 1D array - either single row OR single column, not both or neither\n if (!isSingleRow && !isSingleCol) {\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n message:\n \"MATCH lookup_array must be a single row or single column (1D array)\",\n errAddress: context.dependencyNode,\n };\n }\n\n // Cannot be both single row AND single column (that would be a single cell, which is handled)\n if (isSingleRow && isSingleCol) {\n // This is actually a single cell, which is fine\n isHorizontal = false; // Treat single cell as vertical\n } else {\n // Horizontal if it's a single row\n isHorizontal = isSingleRow;\n }\n\n // Extract values from spilled array\n lookupArray = lookupArrayResult.evaluateAllCells.call(this, {\n context,\n evaluate: lookupArrayResult.evaluate,\n origin: context.cellAddress,\n lookupOrder: \"col-major\",\n });\n }\n\n // Perform MATCH operation\n return matchOperation(\n lookupValueResult.result,\n lookupArray,\n Math.floor(matchTypeResult.result.value), // Floor to handle decimal inputs\n context,\n isHorizontal\n );\n },\n};\n"
5
+ "import {\n FormulaError,\n type CellValue,\n type EvaluateAllCellsResult,\n type FunctionDefinition,\n type FunctionEvaluationResult,\n} from \"../../../core/types.cjs\";\nimport type { EvaluationContext } from \"../../../evaluator/evaluation-context.cjs\";\n\n/**\n * MATCH function - Returns the position of a value in an array\n * MATCH(lookup_value, lookup_array, [match_type])\n * match_type: 1 = less than or equal (default), 0 = exact match, -1 = greater than or equal\n *\n * STRICT TYPE CHECKING:\n * - lookup_value: string or number only\n * - lookup_array: array of strings or numbers only\n * - match_type: number only (must be -1, 0, or 1)\n */\n\n// Helper function to perform MATCH operation\nfunction matchOperation(\n lookupValue: CellValue,\n lookupArray: EvaluateAllCellsResult,\n matchType: number,\n context: EvaluationContext,\n isHorizontal: boolean\n): FunctionEvaluationResult {\n // Strict type checking for lookup_value\n if (lookupValue.type !== \"string\" && lookupValue.type !== \"number\") {\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n message: `MATCH lookup_value must be string or number, got ${lookupValue.type}`,\n errAddress: context.dependencyNode,\n };\n }\n\n // Validate match_type\n if (matchType !== -1 && matchType !== 0 && matchType !== 1) {\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n message: `MATCH match_type must be -1, 0, or 1, got ${matchType}`,\n errAddress: context.dependencyNode,\n };\n }\n if (\n lookupArray.type === \"awaiting-evaluation\" ||\n lookupArray.type === \"error\"\n ) {\n return lookupArray;\n }\n\n for (const value of lookupArray.values) {\n if (value.result.type === \"value\") {\n if (matchType === 0) {\n // Exact match (case-insensitive for strings, matching Excel behavior)\n const arrayValue = value.result.result;\n\n const isMatch =\n arrayValue.type === lookupValue.type &&\n (arrayValue.type === \"string\" && lookupValue.type === \"string\"\n ? arrayValue.value.toLowerCase() === lookupValue.value.toLowerCase()\n : arrayValue.value === lookupValue.value);\n\n if (isMatch) {\n // For horizontal arrays (single row), use x position (column index)\n // For vertical arrays (single/multiple columns), use y position (row index)\n const position = isHorizontal\n ? value.relativePos.x + 1\n : value.relativePos.y + 1;\n\n return {\n type: \"value\",\n result: { type: \"number\", value: position },\n }; // 1-based index\n }\n } else {\n // Approximate match (1 or -1) - requires sorted array\n // For now, throw an error until we add sorting validation\n // TODO: Add proper approximate match logic with sorted array validation\n throw new Error(\"MATCH: approximate match not fully implemented\");\n }\n }\n }\n\n return {\n type: \"error\",\n err: FormulaError.NA,\n message: \"MATCH: lookup_value not found in lookup_array\",\n errAddress: context.dependencyNode,\n };\n}\n\nexport const MATCH: FunctionDefinition = {\n name: \"MATCH\",\n evaluate: function (node, context): FunctionEvaluationResult {\n if (node.args.length < 2 || node.args.length > 3) {\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n message: \"MATCH function takes 2 or 3 arguments\",\n errAddress: context.dependencyNode,\n };\n }\n\n // Evaluate lookup_value\n const lookupValueResult = this.evaluateNode(node.args[0]!, context);\n if (\n lookupValueResult.type === \"error\" ||\n lookupValueResult.type === \"awaiting-evaluation\"\n ) {\n return lookupValueResult;\n }\n\n // Evaluate lookup_array\n const lookupArrayResult = this.evaluateNode(node.args[1]!, context);\n if (\n lookupArrayResult.type === \"error\" ||\n lookupArrayResult.type === \"awaiting-evaluation\"\n ) {\n return lookupArrayResult;\n }\n\n // Evaluate match_type (optional, defaults to 1)\n let matchTypeResult: FunctionEvaluationResult = {\n type: \"value\",\n result: { type: \"number\", value: 1 },\n };\n\n if (node.args[2]) {\n matchTypeResult = this.evaluateNode(node.args[2], context);\n if (\n matchTypeResult.type === \"error\" ||\n matchTypeResult.type === \"awaiting-evaluation\"\n ) {\n return matchTypeResult;\n }\n }\n\n // Handle spilled arrays for lookup_value and match_type (not lookup_array which is expected to be a range)\n if (\n lookupValueResult.type === \"spilled-values\" ||\n matchTypeResult.type === \"spilled-values\"\n ) {\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n message: \"MATCH: Spilled array arguments not yet implemented\",\n errAddress: context.dependencyNode,\n };\n }\n\n // Strict type checking for match_type\n if (matchTypeResult.result.type !== \"number\") {\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n message: `MATCH match_type must be number, got ${matchTypeResult.result.type}`,\n errAddress: context.dependencyNode,\n };\n }\n\n // Extract lookup_array values\n let lookupArray: EvaluateAllCellsResult = {\n type: \"awaiting-evaluation\",\n waitingFor: context.dependencyNode,\n errAddress: context.dependencyNode,\n };\n let isHorizontal = false;\n\n // Handle direct range arguments (like A:A) before extracting lookup_array values\n\n // Extract lookup_array values for non-infinite ranges\n if (lookupArrayResult.type === \"value\") {\n // Single value case - treat as array with one element\n lookupArray = {\n type: \"values\",\n values: [{ result: lookupArrayResult, relativePos: { x: 0, y: 0 } }],\n };\n isHorizontal = false; // Single value, treat as vertical\n } else if (lookupArrayResult.type === \"spilled-values\") {\n // Validate that lookup_array is 1D (either single row OR single column)\n const spillArea = lookupArrayResult.spillArea(context.cellAddress);\n const startRow = spillArea.start.row;\n const endRow = spillArea.end.row;\n const startCol = spillArea.start.col;\n const endCol = spillArea.end.col;\n\n // Check if it's a single row (horizontal)\n const isSingleRow = endRow.type === \"number\" && startRow === endRow.value;\n\n // Check if it's a single column (vertical)\n const isSingleCol = endCol.type === \"number\" && startCol === endCol.value;\n\n // MATCH requires a 1D array - either single row OR single column, not both or neither\n if (!isSingleRow && !isSingleCol) {\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n message:\n \"MATCH lookup_array must be a single row or single column (1D array)\",\n errAddress: context.dependencyNode,\n };\n }\n\n // Cannot be both single row AND single column (that would be a single cell, which is handled)\n if (isSingleRow && isSingleCol) {\n // This is actually a single cell, which is fine\n isHorizontal = false; // Treat single cell as vertical\n } else {\n // Horizontal if it's a single row\n isHorizontal = isSingleRow;\n }\n\n // Extract values from spilled array\n lookupArray = lookupArrayResult.evaluateAllCells.call(this, {\n context,\n evaluate: lookupArrayResult.evaluate,\n origin: context.cellAddress,\n lookupOrder: \"col-major\",\n });\n }\n\n // Perform MATCH operation\n return matchOperation(\n lookupValueResult.result,\n lookupArray,\n Math.floor(matchTypeResult.result.value), // Floor to handle decimal inputs\n context,\n isHorizontal\n );\n },\n};\n"
6
6
  ],
7
- "mappings": "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",
8
- "debugId": "257F4324FF46EBF164756E2164756E21",
7
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMO,IANP;AAqBA,SAAS,cAAc,CACrB,aACA,aACA,WACA,SACA,cAC0B;AAAA,EAE1B,IAAI,YAAY,SAAS,YAAY,YAAY,SAAS,UAAU;AAAA,IAClE,OAAO;AAAA,MACL,MAAM;AAAA,MACN,KAAK,0BAAa;AAAA,MAClB,SAAS,oDAAoD,YAAY;AAAA,MACzE,YAAY,QAAQ;AAAA,IACtB;AAAA,EACF;AAAA,EAGA,IAAI,cAAc,MAAM,cAAc,KAAK,cAAc,GAAG;AAAA,IAC1D,OAAO;AAAA,MACL,MAAM;AAAA,MACN,KAAK,0BAAa;AAAA,MAClB,SAAS,6CAA6C;AAAA,MACtD,YAAY,QAAQ;AAAA,IACtB;AAAA,EACF;AAAA,EACA,IACE,YAAY,SAAS,yBACrB,YAAY,SAAS,SACrB;AAAA,IACA,OAAO;AAAA,EACT;AAAA,EAEA,WAAW,SAAS,YAAY,QAAQ;AAAA,IACtC,IAAI,MAAM,OAAO,SAAS,SAAS;AAAA,MACjC,IAAI,cAAc,GAAG;AAAA,QAEnB,MAAM,aAAa,MAAM,OAAO;AAAA,QAEhC,MAAM,UACJ,WAAW,SAAS,YAAY,SAC/B,WAAW,SAAS,YAAY,YAAY,SAAS,WAClD,WAAW,MAAM,YAAY,MAAM,YAAY,MAAM,YAAY,IACjE,WAAW,UAAU,YAAY;AAAA,QAEvC,IAAI,SAAS;AAAA,UAGX,MAAM,WAAW,eACb,MAAM,YAAY,IAAI,IACtB,MAAM,YAAY,IAAI;AAAA,UAE1B,OAAO;AAAA,YACL,MAAM;AAAA,YACN,QAAQ,EAAE,MAAM,UAAU,OAAO,SAAS;AAAA,UAC5C;AAAA,QACF;AAAA,MACF,EAAO;AAAA,QAIL,MAAM,IAAI,MAAM,gDAAgD;AAAA;AAAA,IAEpE;AAAA,EACF;AAAA,EAEA,OAAO;AAAA,IACL,MAAM;AAAA,IACN,KAAK,0BAAa;AAAA,IAClB,SAAS;AAAA,IACT,YAAY,QAAQ;AAAA,EACtB;AAAA;AAGK,IAAM,QAA4B;AAAA,EACvC,MAAM;AAAA,EACN,UAAU,QAAS,CAAC,MAAM,SAAmC;AAAA,IAC3D,IAAI,KAAK,KAAK,SAAS,KAAK,KAAK,KAAK,SAAS,GAAG;AAAA,MAChD,OAAO;AAAA,QACL,MAAM;AAAA,QACN,KAAK,0BAAa;AAAA,QAClB,SAAS;AAAA,QACT,YAAY,QAAQ;AAAA,MACtB;AAAA,IACF;AAAA,IAGA,MAAM,oBAAoB,KAAK,aAAa,KAAK,KAAK,IAAK,OAAO;AAAA,IAClE,IACE,kBAAkB,SAAS,WAC3B,kBAAkB,SAAS,uBAC3B;AAAA,MACA,OAAO;AAAA,IACT;AAAA,IAGA,MAAM,oBAAoB,KAAK,aAAa,KAAK,KAAK,IAAK,OAAO;AAAA,IAClE,IACE,kBAAkB,SAAS,WAC3B,kBAAkB,SAAS,uBAC3B;AAAA,MACA,OAAO;AAAA,IACT;AAAA,IAGA,IAAI,kBAA4C;AAAA,MAC9C,MAAM;AAAA,MACN,QAAQ,EAAE,MAAM,UAAU,OAAO,EAAE;AAAA,IACrC;AAAA,IAEA,IAAI,KAAK,KAAK,IAAI;AAAA,MAChB,kBAAkB,KAAK,aAAa,KAAK,KAAK,IAAI,OAAO;AAAA,MACzD,IACE,gBAAgB,SAAS,WACzB,gBAAgB,SAAS,uBACzB;AAAA,QACA,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IAGA,IACE,kBAAkB,SAAS,oBAC3B,gBAAgB,SAAS,kBACzB;AAAA,MACA,OAAO;AAAA,QACL,MAAM;AAAA,QACN,KAAK,0BAAa;AAAA,QAClB,SAAS;AAAA,QACT,YAAY,QAAQ;AAAA,MACtB;AAAA,IACF;AAAA,IAGA,IAAI,gBAAgB,OAAO,SAAS,UAAU;AAAA,MAC5C,OAAO;AAAA,QACL,MAAM;AAAA,QACN,KAAK,0BAAa;AAAA,QAClB,SAAS,wCAAwC,gBAAgB,OAAO;AAAA,QACxE,YAAY,QAAQ;AAAA,MACtB;AAAA,IACF;AAAA,IAGA,IAAI,cAAsC;AAAA,MACxC,MAAM;AAAA,MACN,YAAY,QAAQ;AAAA,MACpB,YAAY,QAAQ;AAAA,IACtB;AAAA,IACA,IAAI,eAAe;AAAA,IAKnB,IAAI,kBAAkB,SAAS,SAAS;AAAA,MAEtC,cAAc;AAAA,QACZ,MAAM;AAAA,QACN,QAAQ,CAAC,EAAE,QAAQ,mBAAmB,aAAa,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,CAAC;AAAA,MACrE;AAAA,MACA,eAAe;AAAA,IACjB,EAAO,SAAI,kBAAkB,SAAS,kBAAkB;AAAA,MAEtD,MAAM,YAAY,kBAAkB,UAAU,QAAQ,WAAW;AAAA,MACjE,MAAM,WAAW,UAAU,MAAM;AAAA,MACjC,MAAM,SAAS,UAAU,IAAI;AAAA,MAC7B,MAAM,WAAW,UAAU,MAAM;AAAA,MACjC,MAAM,SAAS,UAAU,IAAI;AAAA,MAG7B,MAAM,cAAc,OAAO,SAAS,YAAY,aAAa,OAAO;AAAA,MAGpE,MAAM,cAAc,OAAO,SAAS,YAAY,aAAa,OAAO;AAAA,MAGpE,IAAI,CAAC,eAAe,CAAC,aAAa;AAAA,QAChC,OAAO;AAAA,UACL,MAAM;AAAA,UACN,KAAK,0BAAa;AAAA,UAClB,SACE;AAAA,UACF,YAAY,QAAQ;AAAA,QACtB;AAAA,MACF;AAAA,MAGA,IAAI,eAAe,aAAa;AAAA,QAE9B,eAAe;AAAA,MACjB,EAAO;AAAA,QAEL,eAAe;AAAA;AAAA,MAIjB,cAAc,kBAAkB,iBAAiB,KAAK,MAAM;AAAA,QAC1D;AAAA,QACA,UAAU,kBAAkB;AAAA,QAC5B,QAAQ,QAAQ;AAAA,QAChB,aAAa;AAAA,MACf,CAAC;AAAA,IACH;AAAA,IAGA,OAAO,eACL,kBAAkB,QAClB,aACA,KAAK,MAAM,gBAAgB,OAAO,KAAK,GACvC,SACA,YACF;AAAA;AAEJ;",
8
+ "debugId": "6E6893FCBCEC14A264756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -2,27 +2,37 @@ var __defProp = Object.defineProperty;
2
2
  var __getOwnPropNames = Object.getOwnPropertyNames;
3
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
4
  var __hasOwnProp = Object.prototype.hasOwnProperty;
5
- var __moduleCache = /* @__PURE__ */ new WeakMap;
5
+ function __accessProp(key) {
6
+ return this[key];
7
+ }
6
8
  var __toCommonJS = (from) => {
7
- var entry = __moduleCache.get(from), desc;
9
+ var entry = (__moduleCache ??= new WeakMap).get(from), desc;
8
10
  if (entry)
9
11
  return entry;
10
12
  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
- }));
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (var key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(entry, key))
16
+ __defProp(entry, key, {
17
+ get: __accessProp.bind(from, key),
18
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
19
+ });
20
+ }
16
21
  __moduleCache.set(from, entry);
17
22
  return entry;
18
23
  };
24
+ var __moduleCache;
25
+ var __returnValue = (v) => v;
26
+ function __exportSetter(name, newValue) {
27
+ this[name] = __returnValue.bind(null, newValue);
28
+ }
19
29
  var __export = (target, all) => {
20
30
  for (var name in all)
21
31
  __defProp(target, name, {
22
32
  get: all[name],
23
33
  enumerable: true,
24
34
  configurable: true,
25
- set: (newValue) => all[name] = () => newValue
35
+ set: __exportSetter.bind(all, name)
26
36
  });
27
37
  };
28
38
 
@@ -407,4 +417,4 @@ var XLOOKUP = {
407
417
  }
408
418
  };
409
419
 
410
- //# debugId=3AFAD70027E9103B64756E2164756E21
420
+ //# debugId=61ECD6C4AEC362E564756E2164756E21