@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,142 @@
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/core/utils/spreadsheet-visualizer.ts
30
+ var exports_spreadsheet_visualizer = {};
31
+ __export(exports_spreadsheet_visualizer, {
32
+ visualizeSpreadsheet: () => visualizeSpreadsheet
33
+ });
34
+ module.exports = __toCommonJS(exports_spreadsheet_visualizer);
35
+ function visualizeSpreadsheet(engine, options) {
36
+ const {
37
+ workbookName,
38
+ numRows,
39
+ numCols,
40
+ startRow = 1,
41
+ startCol = 0,
42
+ sheetName,
43
+ emptyCellChar = ".",
44
+ minColWidth = 3,
45
+ maxColWidth = 20,
46
+ showColumnHeaders = true,
47
+ showRowNumbers = true,
48
+ snapshot = false
49
+ } = options;
50
+ const targetSheetName = sheetName || (() => {
51
+ const sheets = engine.getSheets(workbookName);
52
+ const sheetNames = Array.from(sheets.keys());
53
+ return sheetNames.length > 0 ? sheetNames[0] : null;
54
+ })();
55
+ const cellValues = [];
56
+ const columnWidths = new Array(numCols).fill(minColWidth);
57
+ if (showColumnHeaders) {
58
+ const headerRow = [];
59
+ for (let col = 0;col < numCols; col++) {
60
+ const colLetter = String.fromCharCode(65 + startCol + col);
61
+ headerRow.push(colLetter);
62
+ columnWidths[col] = Math.max(columnWidths[col], colLetter.length);
63
+ }
64
+ cellValues.push(headerRow);
65
+ }
66
+ for (let row = startRow;row < startRow + numRows; row++) {
67
+ const rowValues = [];
68
+ for (let col = 0;col < numCols; col++) {
69
+ let value;
70
+ if (targetSheetName) {
71
+ const cellValue = engine.getCellValue({
72
+ sheetName: targetSheetName,
73
+ workbookName,
74
+ rowIndex: row - 1,
75
+ colIndex: startCol + col
76
+ });
77
+ value = cellValue === "" || cellValue == null ? emptyCellChar : String(cellValue);
78
+ } else {
79
+ value = emptyCellChar;
80
+ }
81
+ rowValues.push(value);
82
+ columnWidths[col] = Math.max(columnWidths[col], Math.min(value.length, maxColWidth));
83
+ }
84
+ cellValues.push(rowValues);
85
+ }
86
+ let totalRowWidth = 0;
87
+ if (showRowNumbers) {
88
+ totalRowWidth += 3;
89
+ }
90
+ for (let col = 0;col < numCols; col++) {
91
+ totalRowWidth += columnWidths[col];
92
+ }
93
+ if (numCols > 0) {
94
+ totalRowWidth += (numCols - 1) * 3;
95
+ if (showRowNumbers) {
96
+ totalRowWidth += 3;
97
+ }
98
+ }
99
+ let result = "";
100
+ for (let i = 0;i < cellValues.length; i++) {
101
+ const rowValues = cellValues[i];
102
+ const formattedCells = [];
103
+ if (showRowNumbers) {
104
+ if (i === 0 && showColumnHeaders) {
105
+ formattedCells.push(" ");
106
+ } else {
107
+ const rowNum = showColumnHeaders ? startRow + i - 1 : startRow + i;
108
+ formattedCells.push(rowNum.toString().padStart(3));
109
+ }
110
+ }
111
+ for (let col = 0;col < rowValues.length; col++) {
112
+ let cellValue = rowValues[col];
113
+ if (cellValue.length > maxColWidth) {
114
+ cellValue = cellValue.substring(0, maxColWidth - 3) + "...";
115
+ }
116
+ formattedCells.push(cellValue.padEnd(columnWidths[col]));
117
+ }
118
+ let rowContent = formattedCells.join(" | ");
119
+ rowContent = rowContent.padEnd(totalRowWidth);
120
+ if (snapshot && i > 0) {
121
+ rowContent = " " + rowContent;
122
+ }
123
+ result += rowContent + `
124
+ `;
125
+ if (i === 0 && showColumnHeaders) {
126
+ const separatorParts = [];
127
+ if (showRowNumbers) {
128
+ separatorParts.push(snapshot ? "----" : "---");
129
+ }
130
+ for (let col = 0;col < numCols; col++) {
131
+ separatorParts.push("-".repeat(columnWidths[col]));
132
+ }
133
+ let separatorLine = separatorParts.join("-+-");
134
+ separatorLine = separatorLine.padEnd(totalRowWidth);
135
+ result += separatorLine + `
136
+ `;
137
+ }
138
+ }
139
+ return result;
140
+ }
141
+
142
+ //# debugId=27D38F207B18230864756E2164756E21
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/core/utils/spreadsheet-visualizer.ts"],
4
+ "sourcesContent": [
5
+ "import { FormulaEngine } from \"../engine.cjs\";\n\nexport interface SpreadsheetVisualizerOptions {\n workbookName: string;\n /** Number of rows to display (1-based) */\n numRows: number;\n /** Number of columns to display (0-based, so 11 = A-K) */\n numCols: number;\n /** Starting row (1-based, default: 1) */\n startRow?: number;\n /** Starting column (0-based, default: 0 = A) */\n startCol?: number;\n /** Sheet name to visualize (default: uses engine's current sheet) */\n sheetName?: string;\n /** Character to use for empty cells (default: \".\") */\n emptyCellChar?: string;\n /** Minimum column width (default: 3) */\n minColWidth?: number;\n /** Maximum column width (default: 20) */\n maxColWidth?: number;\n /** Whether to show column headers (A, B, C...) */\n showColumnHeaders?: boolean;\n /** Whether to show row numbers */\n showRowNumbers?: boolean;\n /** If output is used for snapshotting */\n snapshot?: boolean;\n}\n\n/**\n * Generates a visual ASCII representation of a spreadsheet region\n */\nexport function visualizeSpreadsheet(\n engine: FormulaEngine,\n options: SpreadsheetVisualizerOptions\n): string {\n const {\n workbookName,\n numRows,\n numCols,\n startRow = 1,\n startCol = 0,\n sheetName,\n emptyCellChar = \".\",\n minColWidth = 3,\n maxColWidth = 20,\n showColumnHeaders = true,\n showRowNumbers = true,\n snapshot = false,\n } = options;\n\n // Determine the sheet name to use upfront\n const targetSheetName =\n sheetName ||\n (() => {\n const sheets = engine.getSheets(workbookName);\n const sheetNames = Array.from(sheets.keys());\n return sheetNames.length > 0 ? sheetNames[0]! : null;\n })();\n\n // First pass: collect all cell values and calculate column widths\n const cellValues: string[][] = [];\n const columnWidths: number[] = new Array(numCols).fill(minColWidth);\n\n // Collect column headers if needed\n if (showColumnHeaders) {\n const headerRow: string[] = [];\n for (let col = 0; col < numCols; col++) {\n const colLetter = String.fromCharCode(65 + startCol + col);\n headerRow.push(colLetter);\n columnWidths[col] = Math.max(columnWidths[col]!, colLetter.length);\n }\n cellValues.push(headerRow);\n }\n\n // Collect all cell data\n for (let row = startRow; row < startRow + numRows; row++) {\n const rowValues: string[] = [];\n for (let col = 0; col < numCols; col++) {\n let value: string;\n if (targetSheetName) {\n const cellValue = engine.getCellValue({\n sheetName: targetSheetName,\n workbookName,\n rowIndex: row - 1,\n colIndex: startCol + col,\n });\n value =\n cellValue === \"\" || cellValue == null\n ? emptyCellChar\n : String(cellValue);\n } else {\n // No sheets available\n value = emptyCellChar;\n }\n\n rowValues.push(value);\n // Update column width, respecting max width\n columnWidths[col] = Math.max(\n columnWidths[col]!,\n Math.min(value.length, maxColWidth)\n );\n }\n cellValues.push(rowValues);\n }\n\n // Calculate total row width for consistent formatting\n let totalRowWidth = 0;\n if (showRowNumbers) {\n totalRowWidth += 3; // Row number width\n }\n for (let col = 0; col < numCols; col++) {\n totalRowWidth += columnWidths[col]!;\n }\n // Add separator characters: \" | \" between columns (3 chars each, but last column doesn't have trailing separator)\n if (numCols > 0) {\n totalRowWidth += (numCols - 1) * 3; // \" | \" between columns\n if (showRowNumbers) {\n totalRowWidth += 3; // \" | \" after row number\n }\n }\n\n // Second pass: format the output with proper column widths\n let result = \"\";\n\n for (let i = 0; i < cellValues.length; i++) {\n const rowValues = cellValues[i]!;\n const formattedCells: string[] = [];\n\n // Add row number if requested\n if (showRowNumbers) {\n if (i === 0 && showColumnHeaders) {\n formattedCells.push(\" \"); // Empty space for header row\n } else {\n const rowNum = showColumnHeaders ? startRow + i - 1 : startRow + i;\n formattedCells.push(rowNum.toString().padStart(3));\n }\n }\n\n // Format each cell with proper width\n for (let col = 0; col < rowValues.length; col++) {\n let cellValue = rowValues[col]!;\n\n // Truncate if too long\n if (cellValue.length > maxColWidth) {\n cellValue = cellValue.substring(0, maxColWidth - 3) + \"...\";\n }\n\n // Pad to column width\n formattedCells.push(cellValue.padEnd(columnWidths[col]!));\n }\n\n // Join with consistent separators and ensure exact row width\n let rowContent = formattedCells.join(\" | \");\n // Pad the entire row to ensure consistent width\n rowContent = rowContent.padEnd(totalRowWidth);\n if (snapshot && i > 0) {\n rowContent = \" \" + rowContent;\n }\n result += rowContent + \"\\n\";\n\n // Add separator line after header\n if (i === 0 && showColumnHeaders) {\n const separatorParts: string[] = [];\n\n if (showRowNumbers) {\n separatorParts.push(snapshot ? \"----\" : \"---\");\n }\n\n for (let col = 0; col < numCols; col++) {\n separatorParts.push(\"-\".repeat(columnWidths[col]!));\n }\n\n // Create separator line with same width as data rows\n let separatorLine = separatorParts.join(\"-+-\");\n separatorLine = separatorLine.padEnd(totalRowWidth);\n result += separatorLine + \"\\n\";\n }\n }\n\n return result;\n}\n"
6
+ ],
7
+ "mappings": "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",
8
+ "debugId": "27D38F207B18230864756E2164756E21",
9
+ "names": []
10
+ }
@@ -0,0 +1,434 @@
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/core/utils.ts
30
+ var exports_utils = {};
31
+ __export(exports_utils, {
32
+ rowToLetter: () => rowToLetter,
33
+ rangeAddressToKey: () => rangeAddressToKey,
34
+ parseCellReference: () => parseCellReference,
35
+ letterToRow: () => letterToRow,
36
+ keyToRangeAddress: () => keyToRangeAddress,
37
+ keyToCellAddress: () => keyToCellAddress,
38
+ isRangeOneCell: () => isRangeOneCell,
39
+ isRangeAddress: () => isRangeAddress,
40
+ isCellInRange: () => isCellInRange,
41
+ isCellAddress: () => isCellAddress,
42
+ indexToColumn: () => indexToColumn,
43
+ getRowNumber: () => getRowNumber,
44
+ getRelativeRangeKey: () => getRelativeRangeKey,
45
+ getRelativeRange: () => getRelativeRange,
46
+ getRangeKey: () => getRangeKey,
47
+ getRangeIntersection: () => getRangeIntersection,
48
+ getCellReference: () => getCellReference,
49
+ getAbsoluteRange: () => getAbsoluteRange,
50
+ columnToIndex: () => columnToIndex,
51
+ checkRangeIntersection: () => checkRangeIntersection,
52
+ cellAddressToKey: () => cellAddressToKey,
53
+ captureEvaluationErrors: () => captureEvaluationErrors
54
+ });
55
+ module.exports = __toCommonJS(exports_utils);
56
+ var import_evaluation_error = require("src/evaluator/evaluation-error");
57
+ var import_types = require("./types.cjs");
58
+ function isCellAddress(obj) {
59
+ return obj && typeof obj === "object" && "rowIndex" in obj && "colIndex" in obj && "sheetName" in obj && "workbookName" in obj && !("range" in obj);
60
+ }
61
+ function isRangeAddress(obj) {
62
+ return obj && typeof obj === "object" && "range" in obj && "sheetName" in obj && "workbookName" in obj;
63
+ }
64
+ var columnToIndex = (col) => {
65
+ let result = 0;
66
+ for (let i = 0;i < col.length; i++) {
67
+ result = result * 26 + (col.charCodeAt(i) - 64);
68
+ }
69
+ return result - 1;
70
+ };
71
+ var indexToColumn = (index) => {
72
+ let result = "";
73
+ let num = index + 1;
74
+ while (num > 0) {
75
+ const remainder = (num - 1) % 26;
76
+ result = String.fromCharCode(65 + remainder) + result;
77
+ num = Math.floor((num - 1) / 26);
78
+ }
79
+ return result;
80
+ };
81
+ function getRowNumber(index) {
82
+ return index + 1;
83
+ }
84
+ function getCellReference({
85
+ rowIndex,
86
+ colIndex
87
+ }) {
88
+ return `${indexToColumn(colIndex)}${getRowNumber(rowIndex)}`;
89
+ }
90
+ function rowToLetter(row) {
91
+ let result = "";
92
+ let num = row - 1;
93
+ do {
94
+ result = String.fromCharCode(65 + num % 26) + result;
95
+ num = Math.floor(num / 26) - 1;
96
+ } while (num >= 0);
97
+ return result;
98
+ }
99
+ function letterToRow(letter) {
100
+ let result = 0;
101
+ for (let i = 0;i < letter.length; i++) {
102
+ result = result * 26 + (letter.charCodeAt(i) - 64);
103
+ }
104
+ return result;
105
+ }
106
+ var parseCellReference = (cellReference) => {
107
+ const match = cellReference.match(/^([A-Z]+)(\d+)$/);
108
+ if (!match) {
109
+ throw new Error(`Invalid cell reference: ${cellReference}`);
110
+ }
111
+ const column = match[1];
112
+ if (match[2] === undefined || column === undefined) {
113
+ throw new Error(`Invalid cell reference: ${cellReference}`);
114
+ }
115
+ const row = parseInt(match[2], 10);
116
+ const colIndex = columnToIndex(column);
117
+ const rowIndex = row - 1;
118
+ return {
119
+ colIndex,
120
+ rowIndex
121
+ };
122
+ };
123
+ function isRangeOneCell(range) {
124
+ if (range.end.col.type === "infinity" || range.end.row.type === "infinity") {
125
+ return false;
126
+ }
127
+ return range.start.col === range.end.col.value && range.start.row === range.end.row.value;
128
+ }
129
+ function isCellInRange(cellAddress, range) {
130
+ const endCol = range.end.col;
131
+ const endRow = range.end.row;
132
+ if (endCol.type === "number" && endRow.type === "number") {
133
+ return cellAddress.colIndex >= range.start.col && cellAddress.colIndex <= endCol.value && cellAddress.rowIndex >= range.start.row && cellAddress.rowIndex <= endRow.value;
134
+ } else if (endCol.type === "infinity" && endRow.type === "number") {
135
+ return cellAddress.colIndex >= range.start.col && cellAddress.rowIndex >= range.start.row && cellAddress.rowIndex <= endRow.value;
136
+ } else if (endCol.type === "number" && endRow.type === "infinity") {
137
+ return cellAddress.rowIndex >= range.start.row && cellAddress.colIndex >= range.start.col && cellAddress.colIndex <= endCol.value;
138
+ } else if (endCol.type === "infinity" && endRow.type === "infinity") {
139
+ return cellAddress.colIndex >= range.start.col && cellAddress.rowIndex >= range.start.row;
140
+ }
141
+ return false;
142
+ }
143
+ function getRangeKey(range) {
144
+ let rangeKey = "";
145
+ rangeKey += getCellReference({
146
+ rowIndex: range.start.row,
147
+ colIndex: range.start.col
148
+ });
149
+ rangeKey += ":";
150
+ if (range.end.col.type === "number" && range.end.row.type === "number") {
151
+ rangeKey += getCellReference({
152
+ rowIndex: range.end.row.value,
153
+ colIndex: range.end.col.value
154
+ });
155
+ } else if (range.end.col.type === "infinity" && range.end.row.type === "number") {
156
+ rangeKey += `${getRowNumber(range.end.row.value)}`;
157
+ } else if (range.end.col.type === "number" && range.end.row.type === "infinity") {
158
+ rangeKey += indexToColumn(range.end.col.value);
159
+ } else if (range.end.col.type === "infinity" && range.end.row.type === "infinity") {
160
+ rangeKey += "INFINITY";
161
+ }
162
+ return rangeKey;
163
+ }
164
+ function getRelativeRangeKey(range) {
165
+ let rangeKey = "";
166
+ rangeKey += getCellReference({
167
+ rowIndex: range.start.row,
168
+ colIndex: range.start.col
169
+ });
170
+ rangeKey += ":";
171
+ if (range.width.type === "number") {
172
+ rangeKey += range.width.value;
173
+ } else {
174
+ rangeKey += "INFINITY";
175
+ }
176
+ rangeKey += "x";
177
+ if (range.height.type === "number") {
178
+ rangeKey += range.height.value;
179
+ } else {
180
+ rangeKey += "INFINITY";
181
+ }
182
+ return rangeKey;
183
+ }
184
+ function getRelativeRange(range, relativeTo) {
185
+ const dx = range.start.col - relativeTo.colIndex;
186
+ const dy = range.start.row - relativeTo.rowIndex;
187
+ const relativeRange = {
188
+ start: {
189
+ col: dx,
190
+ row: dy
191
+ },
192
+ width: range.end.col.type === "number" ? {
193
+ type: "number",
194
+ value: range.end.col.value - range.start.col + 1
195
+ } : range.end.col,
196
+ height: range.end.row.type === "number" ? {
197
+ type: "number",
198
+ value: range.end.row.value - range.start.row + 1
199
+ } : range.end.row
200
+ };
201
+ return relativeRange;
202
+ }
203
+ function getAbsoluteRange(range, relativeTo) {
204
+ return {
205
+ start: {
206
+ col: range.start.col + relativeTo.colIndex,
207
+ row: range.start.row + relativeTo.rowIndex
208
+ },
209
+ end: {
210
+ col: range.width.type === "number" ? {
211
+ type: "number",
212
+ value: range.start.col + range.width.value - 1 + relativeTo.colIndex
213
+ } : range.width,
214
+ row: range.height.type === "number" ? {
215
+ type: "number",
216
+ value: range.start.row + range.height.value - 1 + relativeTo.rowIndex
217
+ } : range.height
218
+ }
219
+ };
220
+ }
221
+ function keyToCellAddress(key) {
222
+ const parts = key.split(":");
223
+ if (parts.length < 2) {
224
+ throw new Error(`Invalid dependency key format: ${key}`);
225
+ }
226
+ if (parts.length !== 4) {
227
+ throw new Error(`Invalid cell key format: ${key}`);
228
+ }
229
+ const workbookName = parts[1];
230
+ const sheetName = parts[2];
231
+ const cellRef = parts[3];
232
+ if (workbookName === undefined || sheetName === undefined || cellRef === undefined) {
233
+ throw new Error(`Invalid cell key format: ${key}`);
234
+ }
235
+ const { rowIndex, colIndex } = parseCellReference(cellRef);
236
+ if (rowIndex === undefined || colIndex === undefined || Number.isNaN(rowIndex) || Number.isNaN(colIndex)) {
237
+ throw new Error(`Invalid cell reference: ${cellRef}`);
238
+ }
239
+ return {
240
+ workbookName,
241
+ sheetName,
242
+ colIndex,
243
+ rowIndex
244
+ };
245
+ }
246
+ function cellAddressToKey(cellAddress) {
247
+ if (cellAddress.rowIndex === undefined || cellAddress.colIndex === undefined) {
248
+ throw new Error(`Invalid cell address: rowIndex and colIndex must be defined (got rowIndex=${cellAddress.rowIndex}, colIndex=${cellAddress.colIndex})`);
249
+ }
250
+ const cellRef = getCellReference(cellAddress);
251
+ return `cell-value:${cellAddress.workbookName}:${cellAddress.sheetName}:${cellRef}`;
252
+ }
253
+ function rangeAddressToKey(rangeAddress) {
254
+ return `range:${rangeAddress.workbookName}:${rangeAddress.sheetName}:${getRangeKey(rangeAddress.range)}`;
255
+ }
256
+ function keyToRangeAddress(key) {
257
+ const parts = key.split(":");
258
+ if (parts.length !== 5) {
259
+ throw new Error(`Invalid range key format: ${key}`);
260
+ }
261
+ const workbookName = parts[1];
262
+ const sheetName = parts[2];
263
+ const rangeKey = parts[3] + ":" + parts[4];
264
+ return {
265
+ workbookName,
266
+ sheetName,
267
+ range: parseRangeKey(rangeKey)
268
+ };
269
+ }
270
+ function parseRangeKey(key) {
271
+ const parts = key.split(":");
272
+ if (parts.length !== 2) {
273
+ throw new Error(`Invalid range key format: ${key}`);
274
+ }
275
+ const start = parseCellReference(parts[0]);
276
+ const end = parts[1];
277
+ let endRow;
278
+ let endCol;
279
+ if (end === "INFINITY") {
280
+ endRow = {
281
+ type: "infinity",
282
+ sign: "positive"
283
+ };
284
+ endCol = {
285
+ type: "infinity",
286
+ sign: "positive"
287
+ };
288
+ } else if (!end?.match(/\d/)) {
289
+ endRow = {
290
+ type: "infinity",
291
+ sign: "positive"
292
+ };
293
+ endCol = {
294
+ type: "number",
295
+ value: columnToIndex(end)
296
+ };
297
+ } else if (!end?.match(/[A-Z]/)) {
298
+ endRow = {
299
+ type: "number",
300
+ value: parseInt(end, 10) - 1
301
+ };
302
+ endCol = {
303
+ type: "infinity",
304
+ sign: "positive"
305
+ };
306
+ } else {
307
+ const { rowIndex, colIndex } = parseCellReference(end);
308
+ endRow = {
309
+ type: "number",
310
+ value: rowIndex
311
+ };
312
+ endCol = {
313
+ type: "number",
314
+ value: colIndex
315
+ };
316
+ }
317
+ return {
318
+ start: {
319
+ col: start.colIndex,
320
+ row: start.rowIndex
321
+ },
322
+ end: {
323
+ row: endRow,
324
+ col: endCol
325
+ }
326
+ };
327
+ }
328
+ function checkRangeIntersection(range1, range2) {
329
+ if (range1.end.col.type === "number" && range2.start.col > range1.end.col.value)
330
+ return false;
331
+ if (range2.end.col.type === "number" && range1.start.col > range2.end.col.value)
332
+ return false;
333
+ if (range1.end.row.type === "number" && range2.start.row > range1.end.row.value)
334
+ return false;
335
+ if (range2.end.row.type === "number" && range1.start.row > range2.end.row.value)
336
+ return false;
337
+ return true;
338
+ }
339
+ function getRangeIntersection(range1, range2) {
340
+ if (!checkRangeIntersection(range1, range2)) {
341
+ return null;
342
+ }
343
+ const startRow = Math.max(range1.start.row, range2.start.row);
344
+ const startCol = Math.max(range1.start.col, range2.start.col);
345
+ let endRow, endCol;
346
+ if (range1.end.row.type === "infinity" && range2.end.row.type === "infinity") {
347
+ endRow = { type: "infinity", sign: "positive" };
348
+ } else if (range1.end.row.type === "number" && range2.end.row.type === "number") {
349
+ endRow = {
350
+ type: "number",
351
+ value: Math.min(range1.end.row.value, range2.end.row.value)
352
+ };
353
+ } else {
354
+ endRow = range1.end.row.type === "number" ? range1.end.row : range2.end.row;
355
+ }
356
+ if (range1.end.col.type === "infinity" && range2.end.col.type === "infinity") {
357
+ endCol = { type: "infinity", sign: "positive" };
358
+ } else if (range1.end.col.type === "number" && range2.end.col.type === "number") {
359
+ endCol = {
360
+ type: "number",
361
+ value: Math.min(range1.end.col.value, range2.end.col.value)
362
+ };
363
+ } else {
364
+ endCol = range1.end.col.type === "number" ? range1.end.col : range2.end.col;
365
+ }
366
+ return {
367
+ start: { row: startRow, col: startCol },
368
+ end: { row: endRow, col: endCol }
369
+ };
370
+ }
371
+ function captureEvaluationErrors(errAddress, fn) {
372
+ try {
373
+ return fn();
374
+ } catch (error) {
375
+ if (error instanceof import_evaluation_error.EvaluationError) {
376
+ return {
377
+ type: "error",
378
+ err: error.type,
379
+ message: error.message,
380
+ errAddress: error.errAddress ?? errAddress
381
+ };
382
+ }
383
+ if (error instanceof import_evaluation_error.AwaitingEvaluationError) {
384
+ return {
385
+ type: "awaiting-evaluation",
386
+ waitingFor: error.waitingFor,
387
+ errAddress: error.errAddress
388
+ };
389
+ }
390
+ const formulaError = error instanceof Error ? mapJSErrorToFormulaError(error) : import_types.FormulaError.ERROR;
391
+ return {
392
+ type: "error",
393
+ err: formulaError,
394
+ message: error?.stack || "An error was thrown",
395
+ errAddress
396
+ };
397
+ }
398
+ }
399
+ function isFormulaError(value) {
400
+ if (typeof value !== "string")
401
+ return false;
402
+ const errors = Object.values(import_types.FormulaError);
403
+ return errors.includes(value);
404
+ }
405
+ function mapJSErrorToFormulaError(error) {
406
+ const message = error.message.toLowerCase();
407
+ if (isFormulaError(error.message)) {
408
+ return error.message;
409
+ }
410
+ if (message.includes("division by zero") || message.includes("divide by zero")) {
411
+ return import_types.FormulaError.DIV0;
412
+ }
413
+ if (message.includes("circular") || message.includes("cycle")) {
414
+ return import_types.FormulaError.CYCLE;
415
+ }
416
+ if (message.includes("invalid reference") || message.includes("reference") && !message.includes("circular")) {
417
+ return import_types.FormulaError.REF;
418
+ }
419
+ if (message.includes("invalid name") || message.includes("unknown function")) {
420
+ return import_types.FormulaError.NAME;
421
+ }
422
+ if (message.includes("invalid number") || message.includes("nan") || message.includes("infinity")) {
423
+ return import_types.FormulaError.NUM;
424
+ }
425
+ if (message.includes("type") || message.includes("invalid argument")) {
426
+ return import_types.FormulaError.VALUE;
427
+ }
428
+ if (message.includes("not available") || message.includes("n/a")) {
429
+ return import_types.FormulaError.NA;
430
+ }
431
+ return import_types.FormulaError.ERROR;
432
+ }
433
+
434
+ //# debugId=3945B941ABD946D964756E2164756E21
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/core/utils.ts"],
4
+ "sourcesContent": [
5
+ "import {\n AwaitingEvaluationError,\n EvaluationError,\n} from \"src/evaluator/evaluation-error\";\nimport {\n FormulaError,\n type CellAddress,\n type ErrorEvaluationResult,\n type LocalCellAddress,\n type RangeAddress,\n type RelativeRange,\n type SpreadsheetRange,\n type SpreadsheetRangeEnd,\n} from \"./types.cjs\";\nimport type { DependencyNode } from \"./managers/dependency-node.cjs\";\n\n// Type narrowing utilities\nexport function isCellAddress(\n obj: RangeAddress | CellAddress\n): obj is CellAddress {\n return (\n obj &&\n typeof obj === \"object\" &&\n \"rowIndex\" in obj &&\n \"colIndex\" in obj &&\n \"sheetName\" in obj &&\n \"workbookName\" in obj &&\n !(\"range\" in obj)\n );\n}\n\nexport function isRangeAddress(\n obj: RangeAddress | CellAddress\n): obj is RangeAddress {\n return (\n obj &&\n typeof obj === \"object\" &&\n \"range\" in obj &&\n \"sheetName\" in obj &&\n \"workbookName\" in obj\n );\n}\n\n// Column utilities\nexport const columnToIndex = (col: string): number => {\n let result = 0;\n for (let i = 0; i < col.length; i++) {\n result = result * 26 + (col.charCodeAt(i) - 64); // A=1, B=2, etc.\n }\n return result - 1; // Convert to 0-based index\n};\n\nexport const indexToColumn = (index: number): string => {\n let result = \"\";\n let num = index + 1; // Convert to 1-based\n\n while (num > 0) {\n const remainder = (num - 1) % 26;\n result = String.fromCharCode(65 + remainder) + result;\n num = Math.floor((num - 1) / 26);\n }\n\n return result;\n};\n\nexport function getRowNumber(index: number): number {\n return index + 1;\n}\n\nexport function getCellReference({\n rowIndex,\n colIndex,\n}: {\n rowIndex: number;\n colIndex: number;\n}) {\n return `${indexToColumn(colIndex)}${getRowNumber(rowIndex)}`;\n}\n\n// Convert row number to letter(s) for reversed headers (1 -> A, 2 -> B, etc.)\nexport function rowToLetter(row: number): string {\n let result = \"\";\n let num = row - 1; // Convert to 0-based\n\n do {\n result = String.fromCharCode(65 + (num % 26)) + result;\n num = Math.floor(num / 26) - 1;\n } while (num >= 0);\n\n return result;\n}\n\n// Convert letter(s) to row number for reversed headers (A -> 1, B -> 2, etc.)\nexport function letterToRow(letter: string): number {\n let result = 0;\n for (let i = 0; i < letter.length; i++) {\n result = result * 26 + (letter.charCodeAt(i) - 64);\n }\n return result;\n}\n\nexport const parseCellReference = (\n cellReference: string\n): {\n colIndex: number;\n rowIndex: number;\n} => {\n const match = cellReference.match(/^([A-Z]+)(\\d+)$/);\n if (!match) {\n throw new Error(`Invalid cell reference: ${cellReference}`);\n }\n\n const column = match[1];\n if (match[2] === undefined || column === undefined) {\n throw new Error(`Invalid cell reference: ${cellReference}`);\n }\n const row = parseInt(match[2], 10);\n const colIndex = columnToIndex(column);\n const rowIndex = row - 1; // Convert to 0-based index\n\n return {\n colIndex,\n rowIndex,\n };\n};\n\n/**\n * Returns true if the range is a single cell, false otherwise\n */\nexport function isRangeOneCell(range: SpreadsheetRange) {\n if (range.end.col.type === \"infinity\" || range.end.row.type === \"infinity\") {\n return false;\n }\n return (\n range.start.col === range.end.col.value &&\n range.start.row === range.end.row.value\n );\n}\n\nexport function isCellInRange(\n cellAddress: LocalCellAddress,\n range: SpreadsheetRange\n) {\n const endCol = range.end.col;\n const endRow = range.end.row;\n if (endCol.type === \"number\" && endRow.type === \"number\") {\n return (\n cellAddress.colIndex >= range.start.col &&\n cellAddress.colIndex <= endCol.value &&\n cellAddress.rowIndex >= range.start.row &&\n cellAddress.rowIndex <= endRow.value\n );\n } else if (endCol.type === \"infinity\" && endRow.type === \"number\") {\n return (\n cellAddress.colIndex >= range.start.col &&\n cellAddress.rowIndex >= range.start.row &&\n cellAddress.rowIndex <= endRow.value\n );\n } else if (endCol.type === \"number\" && endRow.type === \"infinity\") {\n return (\n cellAddress.rowIndex >= range.start.row &&\n cellAddress.colIndex >= range.start.col &&\n cellAddress.colIndex <= endCol.value\n );\n } else if (endCol.type === \"infinity\" && endRow.type === \"infinity\") {\n return (\n cellAddress.colIndex >= range.start.col &&\n cellAddress.rowIndex >= range.start.row\n );\n }\n return false;\n}\n\nexport function getRangeKey(range: SpreadsheetRange) {\n let rangeKey = \"\";\n rangeKey += getCellReference({\n rowIndex: range.start.row,\n colIndex: range.start.col,\n });\n rangeKey += \":\";\n if (range.end.col.type === \"number\" && range.end.row.type === \"number\") {\n rangeKey += getCellReference({\n rowIndex: range.end.row.value,\n colIndex: range.end.col.value,\n });\n } else if (\n range.end.col.type === \"infinity\" &&\n range.end.row.type === \"number\"\n ) {\n rangeKey += `${getRowNumber(range.end.row.value)}`;\n } else if (\n range.end.col.type === \"number\" &&\n range.end.row.type === \"infinity\"\n ) {\n rangeKey += indexToColumn(range.end.col.value);\n } else if (\n range.end.col.type === \"infinity\" &&\n range.end.row.type === \"infinity\"\n ) {\n rangeKey += \"INFINITY\";\n }\n return rangeKey;\n}\n\nexport function getRelativeRangeKey(range: RelativeRange): string {\n let rangeKey = \"\";\n rangeKey += getCellReference({\n rowIndex: range.start.row,\n colIndex: range.start.col,\n });\n rangeKey += \":\";\n\n if (range.width.type === \"number\") {\n rangeKey += range.width.value;\n } else {\n rangeKey += \"INFINITY\";\n }\n\n rangeKey += \"x\";\n\n if (range.height.type === \"number\") {\n rangeKey += range.height.value;\n } else {\n rangeKey += \"INFINITY\";\n }\n\n return rangeKey;\n}\n\nexport function getRelativeRange(\n range: SpreadsheetRange,\n relativeTo: LocalCellAddress\n): RelativeRange {\n const dx = range.start.col - relativeTo.colIndex;\n const dy = range.start.row - relativeTo.rowIndex;\n const relativeRange: RelativeRange = {\n start: {\n col: dx,\n row: dy,\n },\n width:\n range.end.col.type === \"number\"\n ? {\n type: \"number\",\n value: range.end.col.value - range.start.col + 1,\n }\n : range.end.col,\n height:\n range.end.row.type === \"number\"\n ? {\n type: \"number\",\n value: range.end.row.value - range.start.row + 1,\n }\n : range.end.row,\n };\n\n return relativeRange;\n}\n\nexport function getAbsoluteRange(\n range: RelativeRange,\n relativeTo: LocalCellAddress\n): SpreadsheetRange {\n return {\n start: {\n col: range.start.col + relativeTo.colIndex,\n row: range.start.row + relativeTo.rowIndex,\n },\n end: {\n col:\n range.width.type === \"number\"\n ? {\n type: \"number\",\n value:\n range.start.col + range.width.value - 1 + relativeTo.colIndex,\n }\n : range.width,\n row:\n range.height.type === \"number\"\n ? {\n type: \"number\",\n value:\n range.start.row + range.height.value - 1 + relativeTo.rowIndex,\n }\n : range.height,\n },\n };\n}\n\nexport function keyToCellAddress(key: string): CellAddress {\n const parts = key.split(\":\");\n\n if (parts.length < 2) {\n throw new Error(`Invalid dependency key format: ${key}`);\n }\n\n if (parts.length !== 4) {\n throw new Error(`Invalid cell key format: ${key}`);\n }\n const workbookName = parts[1];\n const sheetName = parts[2];\n const cellRef = parts[3];\n\n if (\n workbookName === undefined ||\n sheetName === undefined ||\n cellRef === undefined\n ) {\n throw new Error(`Invalid cell key format: ${key}`);\n }\n\n const { rowIndex, colIndex } = parseCellReference(cellRef);\n\n if (\n rowIndex === undefined ||\n colIndex === undefined ||\n Number.isNaN(rowIndex) ||\n Number.isNaN(colIndex)\n ) {\n throw new Error(`Invalid cell reference: ${cellRef}`);\n }\n\n return {\n workbookName,\n sheetName,\n colIndex,\n rowIndex,\n };\n}\n\n/**\n * For cache lookups, use dependencyManager.getCellNode(cellAddressToKey(cellAddress)).key\n * because it may be an empty cell node key\n */\nexport function cellAddressToKey(cellAddress: CellAddress): string {\n if (\n cellAddress.rowIndex === undefined ||\n cellAddress.colIndex === undefined\n ) {\n throw new Error(\n `Invalid cell address: rowIndex and colIndex must be defined (got rowIndex=${cellAddress.rowIndex}, colIndex=${cellAddress.colIndex})`\n );\n }\n const cellRef = getCellReference(cellAddress);\n return `cell-value:${cellAddress.workbookName}:${cellAddress.sheetName}:${cellRef}`;\n}\n\nexport function rangeAddressToKey(rangeAddress: RangeAddress): string {\n return `range:${rangeAddress.workbookName}:${rangeAddress.sheetName}:${getRangeKey(rangeAddress.range)}`;\n}\n\n/**\n *\n * @param key - the range key to parse e.g. range:workbook:sheet:A3:A5\n * @returns\n */\nexport function keyToRangeAddress(key: string): RangeAddress {\n const parts = key.split(\":\");\n if (parts.length !== 5) {\n throw new Error(`Invalid range key format: ${key}`);\n }\n const workbookName = parts[1];\n const sheetName = parts[2];\n const rangeKey = parts[3] + \":\" + parts[4];\n return {\n workbookName: workbookName!,\n sheetName: sheetName!,\n range: parseRangeKey(rangeKey!),\n };\n}\n\n/**\n *\n * @param key - the range key to parse e.g. A3:A5 or A4:INFINITY\n * @returns\n */\nfunction parseRangeKey(key: string): SpreadsheetRange {\n const parts = key.split(\":\");\n if (parts.length !== 2) {\n throw new Error(`Invalid range key format: ${key}`);\n }\n\n const start = parseCellReference(parts[0]!);\n const end = parts[1]!;\n\n let endRow: SpreadsheetRangeEnd;\n let endCol: SpreadsheetRangeEnd;\n\n if (end === \"INFINITY\") {\n endRow = {\n type: \"infinity\",\n sign: \"positive\",\n };\n endCol = {\n type: \"infinity\",\n sign: \"positive\",\n };\n } else if (!end?.match(/\\d/)) {\n endRow = {\n type: \"infinity\",\n sign: \"positive\",\n };\n endCol = {\n type: \"number\",\n value: columnToIndex(end!),\n };\n } else if (!end?.match(/[A-Z]/)) {\n endRow = {\n type: \"number\",\n value: parseInt(end!, 10) - 1,\n };\n endCol = {\n type: \"infinity\",\n sign: \"positive\",\n };\n } else {\n const { rowIndex, colIndex } = parseCellReference(end!);\n endRow = {\n type: \"number\",\n value: rowIndex,\n };\n endCol = {\n type: \"number\",\n value: colIndex,\n };\n }\n\n return {\n start: {\n col: start.colIndex,\n row: start.rowIndex,\n },\n end: {\n row: endRow,\n col: endCol,\n },\n };\n}\n\n/**\n * Check if two ranges intersect\n */\nexport function checkRangeIntersection(\n range1: SpreadsheetRange,\n range2: SpreadsheetRange\n): boolean {\n // Check if ranges don't intersect\n if (\n range1.end.col.type === \"number\" &&\n range2.start.col > range1.end.col.value\n )\n return false;\n if (\n range2.end.col.type === \"number\" &&\n range1.start.col > range2.end.col.value\n )\n return false;\n if (\n range1.end.row.type === \"number\" &&\n range2.start.row > range1.end.row.value\n )\n return false;\n if (\n range2.end.row.type === \"number\" &&\n range1.start.row > range2.end.row.value\n )\n return false;\n\n return true;\n}\n\n/**\n * Get the intersection of two ranges\n */\nexport function getRangeIntersection(\n range1: SpreadsheetRange,\n range2: SpreadsheetRange\n): SpreadsheetRange | null {\n if (!checkRangeIntersection(range1, range2)) {\n return null;\n }\n\n const startRow = Math.max(range1.start.row, range2.start.row);\n const startCol = Math.max(range1.start.col, range2.start.col);\n\n let endRow, endCol;\n\n // Handle end row\n if (\n range1.end.row.type === \"infinity\" &&\n range2.end.row.type === \"infinity\"\n ) {\n endRow = { type: \"infinity\" as const, sign: \"positive\" as const };\n } else if (\n range1.end.row.type === \"number\" &&\n range2.end.row.type === \"number\"\n ) {\n endRow = {\n type: \"number\" as const,\n value: Math.min(range1.end.row.value, range2.end.row.value),\n };\n } else {\n // One is finite, one is infinite\n endRow = range1.end.row.type === \"number\" ? range1.end.row : range2.end.row;\n }\n\n // Handle end col\n if (\n range1.end.col.type === \"infinity\" &&\n range2.end.col.type === \"infinity\"\n ) {\n endCol = { type: \"infinity\" as const, sign: \"positive\" as const };\n } else if (\n range1.end.col.type === \"number\" &&\n range2.end.col.type === \"number\"\n ) {\n endCol = {\n type: \"number\" as const,\n value: Math.min(range1.end.col.value, range2.end.col.value),\n };\n } else {\n // One is finite, one is infinite\n endCol = range1.end.col.type === \"number\" ? range1.end.col : range2.end.col;\n }\n\n return {\n start: { row: startRow, col: startCol },\n end: { row: endRow, col: endCol },\n };\n}\n\nexport function captureEvaluationErrors<T>(\n errAddress: DependencyNode,\n fn: () => T\n): T | ErrorEvaluationResult {\n try {\n return fn();\n } catch (error) {\n if (error instanceof EvaluationError) {\n return {\n type: \"error\",\n err: error.type,\n message: error.message,\n errAddress: error.errAddress ?? errAddress,\n };\n }\n if (error instanceof AwaitingEvaluationError) {\n return {\n type: \"awaiting-evaluation\",\n waitingFor: error.waitingFor,\n errAddress: error.errAddress,\n };\n }\n\n // Convert JavaScript errors to formula errors\n const formulaError =\n error instanceof Error\n ? mapJSErrorToFormulaError(error)\n : FormulaError.ERROR;\n\n return {\n type: \"error\",\n err: formulaError,\n message: (error as any)?.stack || \"An error was thrown\",\n errAddress,\n };\n }\n}\n\nfunction isFormulaError(value: string): value is FormulaError {\n if (typeof value !== \"string\") return false;\n\n // Check for all known formula errors\n const errors: FormulaError[] = Object.values(FormulaError);\n\n return errors.includes(value as FormulaError);\n}\n\n/**\n * Maps JavaScript errors to formula errors\n */\nfunction mapJSErrorToFormulaError(error: Error): FormulaError {\n const message = error.message.toLowerCase();\n\n if (isFormulaError(error.message)) {\n return error.message;\n }\n\n if (\n message.includes(\"division by zero\") ||\n message.includes(\"divide by zero\")\n ) {\n return FormulaError.DIV0;\n }\n if (message.includes(\"circular\") || message.includes(\"cycle\")) {\n return FormulaError.CYCLE;\n }\n if (\n message.includes(\"invalid reference\") ||\n (message.includes(\"reference\") && !message.includes(\"circular\"))\n ) {\n return FormulaError.REF;\n }\n if (\n message.includes(\"invalid name\") ||\n message.includes(\"unknown function\")\n ) {\n return FormulaError.NAME;\n }\n if (\n message.includes(\"invalid number\") ||\n message.includes(\"nan\") ||\n message.includes(\"infinity\")\n ) {\n return FormulaError.NUM;\n }\n if (message.includes(\"type\") || message.includes(\"invalid argument\")) {\n return FormulaError.VALUE;\n }\n if (message.includes(\"not available\") || message.includes(\"n/a\")) {\n return FormulaError.NA;\n }\n\n return FormulaError.ERROR;\n}\n"
6
+ ],
7
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGO,IAHP;AAaO,IATP;AAaO,SAAS,aAAa,CAC3B,KACoB;AAAA,EACpB,OACE,OACA,OAAO,QAAQ,YACf,cAAc,OACd,cAAc,OACd,eAAe,OACf,kBAAkB,OAClB,EAAE,WAAW;AAAA;AAIV,SAAS,cAAc,CAC5B,KACqB;AAAA,EACrB,OACE,OACA,OAAO,QAAQ,YACf,WAAW,OACX,eAAe,OACf,kBAAkB;AAAA;AAKf,IAAM,gBAAgB,CAAC,QAAwB;AAAA,EACpD,IAAI,SAAS;AAAA,EACb,SAAS,IAAI,EAAG,IAAI,IAAI,QAAQ,KAAK;AAAA,IACnC,SAAS,SAAS,MAAM,IAAI,WAAW,CAAC,IAAI;AAAA,EAC9C;AAAA,EACA,OAAO,SAAS;AAAA;AAGX,IAAM,gBAAgB,CAAC,UAA0B;AAAA,EACtD,IAAI,SAAS;AAAA,EACb,IAAI,MAAM,QAAQ;AAAA,EAElB,OAAO,MAAM,GAAG;AAAA,IACd,MAAM,aAAa,MAAM,KAAK;AAAA,IAC9B,SAAS,OAAO,aAAa,KAAK,SAAS,IAAI;AAAA,IAC/C,MAAM,KAAK,OAAO,MAAM,KAAK,EAAE;AAAA,EACjC;AAAA,EAEA,OAAO;AAAA;AAGF,SAAS,YAAY,CAAC,OAAuB;AAAA,EAClD,OAAO,QAAQ;AAAA;AAGV,SAAS,gBAAgB;AAAA,EAC9B;AAAA,EACA;AAAA,GAIC;AAAA,EACD,OAAO,GAAG,cAAc,QAAQ,IAAI,aAAa,QAAQ;AAAA;AAIpD,SAAS,WAAW,CAAC,KAAqB;AAAA,EAC/C,IAAI,SAAS;AAAA,EACb,IAAI,MAAM,MAAM;AAAA,EAEhB,GAAG;AAAA,IACD,SAAS,OAAO,aAAa,KAAM,MAAM,EAAG,IAAI;AAAA,IAChD,MAAM,KAAK,MAAM,MAAM,EAAE,IAAI;AAAA,EAC/B,SAAS,OAAO;AAAA,EAEhB,OAAO;AAAA;AAIF,SAAS,WAAW,CAAC,QAAwB;AAAA,EAClD,IAAI,SAAS;AAAA,EACb,SAAS,IAAI,EAAG,IAAI,OAAO,QAAQ,KAAK;AAAA,IACtC,SAAS,SAAS,MAAM,OAAO,WAAW,CAAC,IAAI;AAAA,EACjD;AAAA,EACA,OAAO;AAAA;AAGF,IAAM,qBAAqB,CAChC,kBAIG;AAAA,EACH,MAAM,QAAQ,cAAc,MAAM,iBAAiB;AAAA,EACnD,IAAI,CAAC,OAAO;AAAA,IACV,MAAM,IAAI,MAAM,2BAA2B,eAAe;AAAA,EAC5D;AAAA,EAEA,MAAM,SAAS,MAAM;AAAA,EACrB,IAAI,MAAM,OAAO,aAAa,WAAW,WAAW;AAAA,IAClD,MAAM,IAAI,MAAM,2BAA2B,eAAe;AAAA,EAC5D;AAAA,EACA,MAAM,MAAM,SAAS,MAAM,IAAI,EAAE;AAAA,EACjC,MAAM,WAAW,cAAc,MAAM;AAAA,EACrC,MAAM,WAAW,MAAM;AAAA,EAEvB,OAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AAAA;AAMK,SAAS,cAAc,CAAC,OAAyB;AAAA,EACtD,IAAI,MAAM,IAAI,IAAI,SAAS,cAAc,MAAM,IAAI,IAAI,SAAS,YAAY;AAAA,IAC1E,OAAO;AAAA,EACT;AAAA,EACA,OACE,MAAM,MAAM,QAAQ,MAAM,IAAI,IAAI,SAClC,MAAM,MAAM,QAAQ,MAAM,IAAI,IAAI;AAAA;AAI/B,SAAS,aAAa,CAC3B,aACA,OACA;AAAA,EACA,MAAM,SAAS,MAAM,IAAI;AAAA,EACzB,MAAM,SAAS,MAAM,IAAI;AAAA,EACzB,IAAI,OAAO,SAAS,YAAY,OAAO,SAAS,UAAU;AAAA,IACxD,OACE,YAAY,YAAY,MAAM,MAAM,OACpC,YAAY,YAAY,OAAO,SAC/B,YAAY,YAAY,MAAM,MAAM,OACpC,YAAY,YAAY,OAAO;AAAA,EAEnC,EAAO,SAAI,OAAO,SAAS,cAAc,OAAO,SAAS,UAAU;AAAA,IACjE,OACE,YAAY,YAAY,MAAM,MAAM,OACpC,YAAY,YAAY,MAAM,MAAM,OACpC,YAAY,YAAY,OAAO;AAAA,EAEnC,EAAO,SAAI,OAAO,SAAS,YAAY,OAAO,SAAS,YAAY;AAAA,IACjE,OACE,YAAY,YAAY,MAAM,MAAM,OACpC,YAAY,YAAY,MAAM,MAAM,OACpC,YAAY,YAAY,OAAO;AAAA,EAEnC,EAAO,SAAI,OAAO,SAAS,cAAc,OAAO,SAAS,YAAY;AAAA,IACnE,OACE,YAAY,YAAY,MAAM,MAAM,OACpC,YAAY,YAAY,MAAM,MAAM;AAAA,EAExC;AAAA,EACA,OAAO;AAAA;AAGF,SAAS,WAAW,CAAC,OAAyB;AAAA,EACnD,IAAI,WAAW;AAAA,EACf,YAAY,iBAAiB;AAAA,IAC3B,UAAU,MAAM,MAAM;AAAA,IACtB,UAAU,MAAM,MAAM;AAAA,EACxB,CAAC;AAAA,EACD,YAAY;AAAA,EACZ,IAAI,MAAM,IAAI,IAAI,SAAS,YAAY,MAAM,IAAI,IAAI,SAAS,UAAU;AAAA,IACtE,YAAY,iBAAiB;AAAA,MAC3B,UAAU,MAAM,IAAI,IAAI;AAAA,MACxB,UAAU,MAAM,IAAI,IAAI;AAAA,IAC1B,CAAC;AAAA,EACH,EAAO,SACL,MAAM,IAAI,IAAI,SAAS,cACvB,MAAM,IAAI,IAAI,SAAS,UACvB;AAAA,IACA,YAAY,GAAG,aAAa,MAAM,IAAI,IAAI,KAAK;AAAA,EACjD,EAAO,SACL,MAAM,IAAI,IAAI,SAAS,YACvB,MAAM,IAAI,IAAI,SAAS,YACvB;AAAA,IACA,YAAY,cAAc,MAAM,IAAI,IAAI,KAAK;AAAA,EAC/C,EAAO,SACL,MAAM,IAAI,IAAI,SAAS,cACvB,MAAM,IAAI,IAAI,SAAS,YACvB;AAAA,IACA,YAAY;AAAA,EACd;AAAA,EACA,OAAO;AAAA;AAGF,SAAS,mBAAmB,CAAC,OAA8B;AAAA,EAChE,IAAI,WAAW;AAAA,EACf,YAAY,iBAAiB;AAAA,IAC3B,UAAU,MAAM,MAAM;AAAA,IACtB,UAAU,MAAM,MAAM;AAAA,EACxB,CAAC;AAAA,EACD,YAAY;AAAA,EAEZ,IAAI,MAAM,MAAM,SAAS,UAAU;AAAA,IACjC,YAAY,MAAM,MAAM;AAAA,EAC1B,EAAO;AAAA,IACL,YAAY;AAAA;AAAA,EAGd,YAAY;AAAA,EAEZ,IAAI,MAAM,OAAO,SAAS,UAAU;AAAA,IAClC,YAAY,MAAM,OAAO;AAAA,EAC3B,EAAO;AAAA,IACL,YAAY;AAAA;AAAA,EAGd,OAAO;AAAA;AAGF,SAAS,gBAAgB,CAC9B,OACA,YACe;AAAA,EACf,MAAM,KAAK,MAAM,MAAM,MAAM,WAAW;AAAA,EACxC,MAAM,KAAK,MAAM,MAAM,MAAM,WAAW;AAAA,EACxC,MAAM,gBAA+B;AAAA,IACnC,OAAO;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,IACP;AAAA,IACA,OACE,MAAM,IAAI,IAAI,SAAS,WACnB;AAAA,MACE,MAAM;AAAA,MACN,OAAO,MAAM,IAAI,IAAI,QAAQ,MAAM,MAAM,MAAM;AAAA,IACjD,IACA,MAAM,IAAI;AAAA,IAChB,QACE,MAAM,IAAI,IAAI,SAAS,WACnB;AAAA,MACE,MAAM;AAAA,MACN,OAAO,MAAM,IAAI,IAAI,QAAQ,MAAM,MAAM,MAAM;AAAA,IACjD,IACA,MAAM,IAAI;AAAA,EAClB;AAAA,EAEA,OAAO;AAAA;AAGF,SAAS,gBAAgB,CAC9B,OACA,YACkB;AAAA,EAClB,OAAO;AAAA,IACL,OAAO;AAAA,MACL,KAAK,MAAM,MAAM,MAAM,WAAW;AAAA,MAClC,KAAK,MAAM,MAAM,MAAM,WAAW;AAAA,IACpC;AAAA,IACA,KAAK;AAAA,MACH,KACE,MAAM,MAAM,SAAS,WACjB;AAAA,QACE,MAAM;AAAA,QACN,OACE,MAAM,MAAM,MAAM,MAAM,MAAM,QAAQ,IAAI,WAAW;AAAA,MACzD,IACA,MAAM;AAAA,MACZ,KACE,MAAM,OAAO,SAAS,WAClB;AAAA,QACE,MAAM;AAAA,QACN,OACE,MAAM,MAAM,MAAM,MAAM,OAAO,QAAQ,IAAI,WAAW;AAAA,MAC1D,IACA,MAAM;AAAA,IACd;AAAA,EACF;AAAA;AAGK,SAAS,gBAAgB,CAAC,KAA0B;AAAA,EACzD,MAAM,QAAQ,IAAI,MAAM,GAAG;AAAA,EAE3B,IAAI,MAAM,SAAS,GAAG;AAAA,IACpB,MAAM,IAAI,MAAM,kCAAkC,KAAK;AAAA,EACzD;AAAA,EAEA,IAAI,MAAM,WAAW,GAAG;AAAA,IACtB,MAAM,IAAI,MAAM,4BAA4B,KAAK;AAAA,EACnD;AAAA,EACA,MAAM,eAAe,MAAM;AAAA,EAC3B,MAAM,YAAY,MAAM;AAAA,EACxB,MAAM,UAAU,MAAM;AAAA,EAEtB,IACE,iBAAiB,aACjB,cAAc,aACd,YAAY,WACZ;AAAA,IACA,MAAM,IAAI,MAAM,4BAA4B,KAAK;AAAA,EACnD;AAAA,EAEA,QAAQ,UAAU,aAAa,mBAAmB,OAAO;AAAA,EAEzD,IACE,aAAa,aACb,aAAa,aACb,OAAO,MAAM,QAAQ,KACrB,OAAO,MAAM,QAAQ,GACrB;AAAA,IACA,MAAM,IAAI,MAAM,2BAA2B,SAAS;AAAA,EACtD;AAAA,EAEA,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA;AAOK,SAAS,gBAAgB,CAAC,aAAkC;AAAA,EACjE,IACE,YAAY,aAAa,aACzB,YAAY,aAAa,WACzB;AAAA,IACA,MAAM,IAAI,MACR,6EAA6E,YAAY,sBAAsB,YAAY,WAC7H;AAAA,EACF;AAAA,EACA,MAAM,UAAU,iBAAiB,WAAW;AAAA,EAC5C,OAAO,cAAc,YAAY,gBAAgB,YAAY,aAAa;AAAA;AAGrE,SAAS,iBAAiB,CAAC,cAAoC;AAAA,EACpE,OAAO,SAAS,aAAa,gBAAgB,aAAa,aAAa,YAAY,aAAa,KAAK;AAAA;AAQhG,SAAS,iBAAiB,CAAC,KAA2B;AAAA,EAC3D,MAAM,QAAQ,IAAI,MAAM,GAAG;AAAA,EAC3B,IAAI,MAAM,WAAW,GAAG;AAAA,IACtB,MAAM,IAAI,MAAM,6BAA6B,KAAK;AAAA,EACpD;AAAA,EACA,MAAM,eAAe,MAAM;AAAA,EAC3B,MAAM,YAAY,MAAM;AAAA,EACxB,MAAM,WAAW,MAAM,KAAK,MAAM,MAAM;AAAA,EACxC,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,OAAO,cAAc,QAAS;AAAA,EAChC;AAAA;AAQF,SAAS,aAAa,CAAC,KAA+B;AAAA,EACpD,MAAM,QAAQ,IAAI,MAAM,GAAG;AAAA,EAC3B,IAAI,MAAM,WAAW,GAAG;AAAA,IACtB,MAAM,IAAI,MAAM,6BAA6B,KAAK;AAAA,EACpD;AAAA,EAEA,MAAM,QAAQ,mBAAmB,MAAM,EAAG;AAAA,EAC1C,MAAM,MAAM,MAAM;AAAA,EAElB,IAAI;AAAA,EACJ,IAAI;AAAA,EAEJ,IAAI,QAAQ,YAAY;AAAA,IACtB,SAAS;AAAA,MACP,MAAM;AAAA,MACN,MAAM;AAAA,IACR;AAAA,IACA,SAAS;AAAA,MACP,MAAM;AAAA,MACN,MAAM;AAAA,IACR;AAAA,EACF,EAAO,SAAI,CAAC,KAAK,MAAM,IAAI,GAAG;AAAA,IAC5B,SAAS;AAAA,MACP,MAAM;AAAA,MACN,MAAM;AAAA,IACR;AAAA,IACA,SAAS;AAAA,MACP,MAAM;AAAA,MACN,OAAO,cAAc,GAAI;AAAA,IAC3B;AAAA,EACF,EAAO,SAAI,CAAC,KAAK,MAAM,OAAO,GAAG;AAAA,IAC/B,SAAS;AAAA,MACP,MAAM;AAAA,MACN,OAAO,SAAS,KAAM,EAAE,IAAI;AAAA,IAC9B;AAAA,IACA,SAAS;AAAA,MACP,MAAM;AAAA,MACN,MAAM;AAAA,IACR;AAAA,EACF,EAAO;AAAA,IACL,QAAQ,UAAU,aAAa,mBAAmB,GAAI;AAAA,IACtD,SAAS;AAAA,MACP,MAAM;AAAA,MACN,OAAO;AAAA,IACT;AAAA,IACA,SAAS;AAAA,MACP,MAAM;AAAA,MACN,OAAO;AAAA,IACT;AAAA;AAAA,EAGF,OAAO;AAAA,IACL,OAAO;AAAA,MACL,KAAK,MAAM;AAAA,MACX,KAAK,MAAM;AAAA,IACb;AAAA,IACA,KAAK;AAAA,MACH,KAAK;AAAA,MACL,KAAK;AAAA,IACP;AAAA,EACF;AAAA;AAMK,SAAS,sBAAsB,CACpC,QACA,QACS;AAAA,EAET,IACE,OAAO,IAAI,IAAI,SAAS,YACxB,OAAO,MAAM,MAAM,OAAO,IAAI,IAAI;AAAA,IAElC,OAAO;AAAA,EACT,IACE,OAAO,IAAI,IAAI,SAAS,YACxB,OAAO,MAAM,MAAM,OAAO,IAAI,IAAI;AAAA,IAElC,OAAO;AAAA,EACT,IACE,OAAO,IAAI,IAAI,SAAS,YACxB,OAAO,MAAM,MAAM,OAAO,IAAI,IAAI;AAAA,IAElC,OAAO;AAAA,EACT,IACE,OAAO,IAAI,IAAI,SAAS,YACxB,OAAO,MAAM,MAAM,OAAO,IAAI,IAAI;AAAA,IAElC,OAAO;AAAA,EAET,OAAO;AAAA;AAMF,SAAS,oBAAoB,CAClC,QACA,QACyB;AAAA,EACzB,IAAI,CAAC,uBAAuB,QAAQ,MAAM,GAAG;AAAA,IAC3C,OAAO;AAAA,EACT;AAAA,EAEA,MAAM,WAAW,KAAK,IAAI,OAAO,MAAM,KAAK,OAAO,MAAM,GAAG;AAAA,EAC5D,MAAM,WAAW,KAAK,IAAI,OAAO,MAAM,KAAK,OAAO,MAAM,GAAG;AAAA,EAE5D,IAAI,QAAQ;AAAA,EAGZ,IACE,OAAO,IAAI,IAAI,SAAS,cACxB,OAAO,IAAI,IAAI,SAAS,YACxB;AAAA,IACA,SAAS,EAAE,MAAM,YAAqB,MAAM,WAAoB;AAAA,EAClE,EAAO,SACL,OAAO,IAAI,IAAI,SAAS,YACxB,OAAO,IAAI,IAAI,SAAS,UACxB;AAAA,IACA,SAAS;AAAA,MACP,MAAM;AAAA,MACN,OAAO,KAAK,IAAI,OAAO,IAAI,IAAI,OAAO,OAAO,IAAI,IAAI,KAAK;AAAA,IAC5D;AAAA,EACF,EAAO;AAAA,IAEL,SAAS,OAAO,IAAI,IAAI,SAAS,WAAW,OAAO,IAAI,MAAM,OAAO,IAAI;AAAA;AAAA,EAI1E,IACE,OAAO,IAAI,IAAI,SAAS,cACxB,OAAO,IAAI,IAAI,SAAS,YACxB;AAAA,IACA,SAAS,EAAE,MAAM,YAAqB,MAAM,WAAoB;AAAA,EAClE,EAAO,SACL,OAAO,IAAI,IAAI,SAAS,YACxB,OAAO,IAAI,IAAI,SAAS,UACxB;AAAA,IACA,SAAS;AAAA,MACP,MAAM;AAAA,MACN,OAAO,KAAK,IAAI,OAAO,IAAI,IAAI,OAAO,OAAO,IAAI,IAAI,KAAK;AAAA,IAC5D;AAAA,EACF,EAAO;AAAA,IAEL,SAAS,OAAO,IAAI,IAAI,SAAS,WAAW,OAAO,IAAI,MAAM,OAAO,IAAI;AAAA;AAAA,EAG1E,OAAO;AAAA,IACL,OAAO,EAAE,KAAK,UAAU,KAAK,SAAS;AAAA,IACtC,KAAK,EAAE,KAAK,QAAQ,KAAK,OAAO;AAAA,EAClC;AAAA;AAGK,SAAS,uBAA0B,CACxC,YACA,IAC2B;AAAA,EAC3B,IAAI;AAAA,IACF,OAAO,GAAG;AAAA,IACV,OAAO,OAAO;AAAA,IACd,IAAI,iBAAiB,yCAAiB;AAAA,MACpC,OAAO;AAAA,QACL,MAAM;AAAA,QACN,KAAK,MAAM;AAAA,QACX,SAAS,MAAM;AAAA,QACf,YAAY,MAAM,cAAc;AAAA,MAClC;AAAA,IACF;AAAA,IACA,IAAI,iBAAiB,iDAAyB;AAAA,MAC5C,OAAO;AAAA,QACL,MAAM;AAAA,QACN,YAAY,MAAM;AAAA,QAClB,YAAY,MAAM;AAAA,MACpB;AAAA,IACF;AAAA,IAGA,MAAM,eACJ,iBAAiB,QACb,yBAAyB,KAAK,IAC9B,0BAAa;AAAA,IAEnB,OAAO;AAAA,MACL,MAAM;AAAA,MACN,KAAK;AAAA,MACL,SAAU,OAAe,SAAS;AAAA,MAClC;AAAA,IACF;AAAA;AAAA;AAIJ,SAAS,cAAc,CAAC,OAAsC;AAAA,EAC5D,IAAI,OAAO,UAAU;AAAA,IAAU,OAAO;AAAA,EAGtC,MAAM,SAAyB,OAAO,OAAO,yBAAY;AAAA,EAEzD,OAAO,OAAO,SAAS,KAAqB;AAAA;AAM9C,SAAS,wBAAwB,CAAC,OAA4B;AAAA,EAC5D,MAAM,UAAU,MAAM,QAAQ,YAAY;AAAA,EAE1C,IAAI,eAAe,MAAM,OAAO,GAAG;AAAA,IACjC,OAAO,MAAM;AAAA,EACf;AAAA,EAEA,IACE,QAAQ,SAAS,kBAAkB,KACnC,QAAQ,SAAS,gBAAgB,GACjC;AAAA,IACA,OAAO,0BAAa;AAAA,EACtB;AAAA,EACA,IAAI,QAAQ,SAAS,UAAU,KAAK,QAAQ,SAAS,OAAO,GAAG;AAAA,IAC7D,OAAO,0BAAa;AAAA,EACtB;AAAA,EACA,IACE,QAAQ,SAAS,mBAAmB,KACnC,QAAQ,SAAS,WAAW,KAAK,CAAC,QAAQ,SAAS,UAAU,GAC9D;AAAA,IACA,OAAO,0BAAa;AAAA,EACtB;AAAA,EACA,IACE,QAAQ,SAAS,cAAc,KAC/B,QAAQ,SAAS,kBAAkB,GACnC;AAAA,IACA,OAAO,0BAAa;AAAA,EACtB;AAAA,EACA,IACE,QAAQ,SAAS,gBAAgB,KACjC,QAAQ,SAAS,KAAK,KACtB,QAAQ,SAAS,UAAU,GAC3B;AAAA,IACA,OAAO,0BAAa;AAAA,EACtB;AAAA,EACA,IAAI,QAAQ,SAAS,MAAM,KAAK,QAAQ,SAAS,kBAAkB,GAAG;AAAA,IACpE,OAAO,0BAAa;AAAA,EACtB;AAAA,EACA,IAAI,QAAQ,SAAS,eAAe,KAAK,QAAQ,SAAS,KAAK,GAAG;AAAA,IAChE,OAAO,0BAAa;AAAA,EACtB;AAAA,EAEA,OAAO,0BAAa;AAAA;",
8
+ "debugId": "3945B941ABD946D964756E2164756E21",
9
+ "names": []
10
+ }