@sheetxl/sdk 0.7.28-beta.4 → 0.8.0-beta.10

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 (565) hide show
  1. package/THIRD-PARTY-NOTICES.md +1 -1
  2. package/browser/esm/{DBIu6NUHIcxOOBQp.mjs → BEAY9XgKNx-bakXW.mjs} +2 -2
  3. package/browser/esm/BbSmt62FpFIpoVzu.mjs +392 -0
  4. package/browser/esm/BcHmrKHwMMOlzc9_.mjs +357 -0
  5. package/browser/esm/BgcZ-CoTbMfmyDJL.mjs +412 -0
  6. package/browser/esm/Bk7xxbdDpa7-sIwd.mjs +7 -0
  7. package/browser/esm/BqskM7wA8oPfFQue.mjs +20 -0
  8. package/browser/esm/Btg43M1Bf-ENDreu.mjs +540 -0
  9. package/browser/esm/BzLfNyc6OOShIErH.mjs +598 -0
  10. package/browser/esm/C9B0djuUarfNdoj0.mjs +466 -0
  11. package/browser/esm/{CHSahmMFYNB0Ajkf.mjs → CSx9ed1JOs7K5BXO.mjs} +2 -2
  12. package/browser/esm/CYyv6uGjo10ig5FP.mjs +142 -0
  13. package/browser/esm/CZ5oa92wZEAXebgk.mjs +622 -0
  14. package/browser/esm/CdLZWVcH8cncBUPJ.mjs +849 -0
  15. package/browser/esm/Cgd5BnM3hg9RyUel.mjs +171 -0
  16. package/browser/esm/CjsUGJEQSbGjnH6R.mjs +1001 -0
  17. package/browser/esm/ClB5ix51roQOpZEr.mjs +7402 -0
  18. package/browser/esm/{CKk58ZLcrllMzfou.mjs → Cqr3knDsBvoVZ6MN.mjs} +179 -202
  19. package/browser/esm/D4uVlrG0xEFctsSM.mjs +905 -0
  20. package/browser/esm/DOMHmhYzPcLVcpAW.mjs +7 -0
  21. package/browser/esm/DUvUK61b2_4pf4tG.mjs +484 -0
  22. package/browser/esm/De175LygU7ot4nQm.mjs +441 -0
  23. package/browser/esm/DhKkrCVASZ6Isvz6.mjs +527 -0
  24. package/browser/esm/Di58Ji1n--3Mgc_2.mjs +607 -0
  25. package/browser/esm/Dtoyt8q5RyGAlxCp.mjs +1141 -0
  26. package/browser/esm/Y79I7Sm8kjaYexhf.mjs +167 -0
  27. package/browser/esm/index.mjs +1472 -1023
  28. package/browser/esm/o8MFgcVXns987D6_.mjs +400 -0
  29. package/browser/esm/zqJOaweiXE9D8RY1.mjs +66681 -0
  30. package/licenses/dependencies.txt +209 -209
  31. package/node/esm/B6D7sSetrcOWLsKj.mjs +1135 -0
  32. package/node/esm/B9ljpEIZg6wOTzRE.mjs +142 -0
  33. package/node/esm/BH1v-E4Ro3bR7Znw.mjs +962 -0
  34. package/node/esm/BN9j8V9gCExMjVtJ.mjs +540 -0
  35. package/node/esm/{DUYP6faJJHCaW1Xf.mjs → Bh4dv6tMjXX3X4nI.mjs} +1 -1
  36. package/node/esm/Bqd62L8KFgdS0Vou.mjs +7 -0
  37. package/node/esm/Bsx9uijd4X_SKV3L.mjs +360 -0
  38. package/node/esm/BtuY37FumvLE7EBo.mjs +629 -0
  39. package/node/esm/C6ZXsNyLXI6zA63X.mjs +402 -0
  40. package/node/esm/CCouEwT37f08qO3V.mjs +7 -0
  41. package/node/esm/CD9wbvufChVYYkrI.mjs +451 -0
  42. package/node/esm/CImNvdz1iP-lUlro.mjs +610 -0
  43. package/node/esm/CT0CN82y0_Qgoryk.mjs +7568 -0
  44. package/node/esm/CUQi5ZtMO02nhG0W.mjs +596 -0
  45. package/node/esm/CUUoseJmFsCf82bb.mjs +28 -0
  46. package/node/esm/CnSQ7MTXAUAyBOoS.mjs +911 -0
  47. package/node/esm/D7MfcID2Wf6l6VpC.mjs +171 -0
  48. package/node/esm/DCplLG93GfTs1vNw.mjs +1860 -0
  49. package/node/esm/DHUADiCmxNQS1ARz.mjs +417 -0
  50. package/node/esm/DMD12JUh7HJw2-jl.mjs +638 -0
  51. package/node/esm/DdFgXl-Ux2cMBTs_.mjs +15 -0
  52. package/node/esm/DefYISWfdZJFx57m.mjs +255 -0
  53. package/node/esm/Ds0d8zXzmgOu3MGx.mjs +403 -0
  54. package/node/esm/MiU4rDOiocmJ-9Ry.mjs +1783 -0
  55. package/node/esm/index.mjs +49153 -36824
  56. package/package.json +15 -16
  57. package/resources/contents.json +64 -0
  58. package/resources/fonts/arial-bold-italic.metrics.json +139 -0
  59. package/resources/fonts/arial-bold.metrics.json +139 -0
  60. package/resources/fonts/arial-italic.metrics.json +139 -0
  61. package/resources/fonts/arial-regular.metrics.json +139 -0
  62. package/resources/fonts/calibri-bold-italic.metrics.json +137 -0
  63. package/resources/fonts/calibri-bold.metrics.json +137 -0
  64. package/resources/fonts/calibri-italic.metrics.json +137 -0
  65. package/resources/fonts/calibri-regular.metrics.json +137 -0
  66. package/resources/fonts/cambria-bold-italic.metrics.json +66 -0
  67. package/resources/fonts/cambria-bold.metrics.json +66 -0
  68. package/resources/fonts/cambria-italic.metrics.json +66 -0
  69. package/resources/fonts/cambria-regular.metrics.json +66 -0
  70. package/resources/fonts/contents.json +126 -0
  71. package/resources/fonts/courier-new-bold-italic.metrics.json +143 -0
  72. package/resources/fonts/courier-new-bold.metrics.json +143 -0
  73. package/resources/fonts/courier-new-italic.metrics.json +143 -0
  74. package/resources/fonts/courier-new-regular.metrics.json +143 -0
  75. package/resources/fonts/times-new-roman-bold-italic.metrics.json +141 -0
  76. package/resources/fonts/times-new-roman-bold.metrics.json +141 -0
  77. package/resources/fonts/times-new-roman-italic.metrics.json +143 -0
  78. package/resources/fonts/times-new-roman-regular.metrics.json +141 -0
  79. package/resources/locales/de/model.msg.json +112 -12
  80. package/resources/locales/en/model.msg.json +119 -13
  81. package/types/scripting-api.json +8048 -0
  82. package/types/scripting-enums.json +277 -106
  83. package/types/scripting.d.ts +18126 -7971
  84. package/types/src/anchored/AbstractAnchored.d.ts +18 -8
  85. package/types/src/anchored/AnchoredMap.d.ts +2 -0
  86. package/types/src/anchored/IAnchoredMap.d.ts +52 -4
  87. package/types/src/autoFill/AutoFill.d.ts +316 -32
  88. package/types/src/autoFill/IAutoFill.d.ts +232 -15
  89. package/types/src/border/{IBorder.d.ts → IBorders.d.ts} +42 -41
  90. package/types/src/border/index.d.ts +1 -1
  91. package/types/src/calculation/Calculation.d.ts +759 -49
  92. package/types/src/calculation/ExternalBookBindings.d.ts +118 -0
  93. package/types/src/calculation/FormulaText.d.ts +82 -0
  94. package/types/src/calculation/ICalculation.d.ts +318 -81
  95. package/types/src/calculation/INamedFormulasCollection.d.ts +5 -8
  96. package/types/src/calculation/NamedFormulaCollection.d.ts +139 -107
  97. package/types/src/calculation/NamedLambdaFunction.d.ts +28 -0
  98. package/types/src/calculation/TokenType.d.ts +9 -0
  99. package/types/src/calculation/Types.d.ts +83 -2
  100. package/types/src/calculation/_CloneBoundary.d.ts +80 -0
  101. package/types/src/calculation/_TableRename.d.ts +13 -0
  102. package/types/src/calculation/compiler/ASTTypes.d.ts +71 -0
  103. package/types/src/calculation/compiler/CompilerUtils.d.ts +135 -44
  104. package/types/src/calculation/compiler/FormulaCompiler.d.ts +29 -4
  105. package/types/src/calculation/compiler/FormulaParser.d.ts +1 -2
  106. package/types/src/calculation/compiler/LiteTransform.d.ts +17 -0
  107. package/types/src/calculation/compiler/ParserUtils.d.ts +26 -1
  108. package/types/src/calculation/compiler/SRParser.d.ts +2 -1
  109. package/types/src/calculation/compiler/Types.d.ts +79 -9
  110. package/types/src/calculation/executor/CalcExecutor.d.ts +422 -34
  111. package/types/src/calculation/executor/CalcExecutorUtils.d.ts +43 -2
  112. package/types/src/calculation/executor/CircularReference.d.ts +2 -0
  113. package/types/src/calculation/formula/Formula.d.ts +58 -21
  114. package/types/src/calculation/formula/FormulaBlock.d.ts +125 -23
  115. package/types/src/calculation/formula/FormulaRecordView.d.ts +79 -0
  116. package/types/src/calculation/formula/FunctionValues.d.ts +10 -0
  117. package/types/src/calculation/formula/IFormulaBlock.d.ts +261 -67
  118. package/types/src/calculation/formula/LambdaValue.d.ts +46 -23
  119. package/types/src/calculation/formula/LazyValue.d.ts +96 -0
  120. package/types/src/calculation/formula/TokenUtils.d.ts +25 -1
  121. package/types/src/calculation/formula/index.d.ts +1 -0
  122. package/types/src/calculation/functions/FunctionDeclarations.d.ts +31 -0
  123. package/types/src/calculation/functions/Operators.d.ts +8 -0
  124. package/types/src/calculation/functions/initializeFunctions.d.ts +15 -2
  125. package/types/src/calculation/grid/CalcGrid.d.ts +407 -158
  126. package/types/src/calculation/grid/CalcGridBackend.d.ts +493 -0
  127. package/types/src/calculation/grid/CalcGridProxy.d.ts +133 -0
  128. package/types/src/calculation/grid/CalcGridUtils.d.ts +62 -12
  129. package/types/src/calculation/grid/FormulaEntry.d.ts +129 -0
  130. package/types/src/calculation/grid/FormulaHost.d.ts +239 -0
  131. package/types/src/calculation/grid/ICalcGrid.d.ts +499 -141
  132. package/types/src/calculation/grid/_CalcRequest.d.ts +289 -0
  133. package/types/src/calculation/grid/index.d.ts +4 -0
  134. package/types/src/calculation/index.d.ts +2 -0
  135. package/types/src/calculation/spatial/ContentfulSpatialValue.d.ts +6 -2
  136. package/types/src/calculation/spatial/FormulaSpatialValue.d.ts +339 -11
  137. package/types/src/calculation/spatial/SpillEntry.d.ts +20 -5
  138. package/types/src/calculation/spatial/TouchedWindows.d.ts +86 -0
  139. package/types/src/calculation/spatial/index.d.ts +1 -0
  140. package/types/src/calculation/state/CalcInputs.d.ts +41 -0
  141. package/types/src/calculation/state/CalcNode.d.ts +160 -29
  142. package/types/src/calculation/state/CalcScope.d.ts +37 -0
  143. package/types/src/calculation/state/CalcState.d.ts +22 -1
  144. package/types/src/calculation/state/CalculationContext.d.ts +53 -4
  145. package/types/src/calculation/state/IContextContainer.d.ts +159 -26
  146. package/types/src/calculation/state/_PendingOverlayGrid.d.ts +163 -0
  147. package/types/src/calculation/state/_ReadObservedGrid.d.ts +74 -8
  148. package/types/src/calculation/state/index.d.ts +1 -0
  149. package/types/src/calculation/symbol/ExternalSheetSymbols.d.ts +80 -0
  150. package/types/src/calculation/symbol/ISymbolRegistry.d.ts +23 -0
  151. package/types/src/calculation/symbol/IndirectSymbolProvider.d.ts +16 -2
  152. package/types/src/calculation/symbol/SheetSymbolProvider.d.ts +63 -3
  153. package/types/src/calculation/symbol/SymbolRegistry.d.ts +20 -0
  154. package/types/src/calculation/symbol/index.d.ts +3 -2
  155. package/types/src/cell/ICell.d.ts +104 -29
  156. package/types/src/cell/ICellHeader.d.ts +24 -2
  157. package/types/src/cell/ICellProtection.d.ts +50 -10
  158. package/types/src/cellRange/ICellRange.d.ts +458 -97
  159. package/types/src/cellRange/ICellRanges.d.ts +23 -21
  160. package/types/src/chart/Chart.d.ts +41 -13
  161. package/types/src/chart/ChartCollection.d.ts +26 -0
  162. package/types/src/chart/IChart.d.ts +166 -12
  163. package/types/src/chart/IChartCollection.d.ts +25 -0
  164. package/types/src/chart/_ChartXml.d.ts +70 -0
  165. package/types/src/chart/index.d.ts +1 -3
  166. package/types/src/collections/ArraysGrid.d.ts +1 -1
  167. package/types/src/collections/IGrid.d.ts +1 -1
  168. package/types/src/collections/ISparseGrid.d.ts +9 -0
  169. package/types/src/collections/ISpatialMap.d.ts +59 -21
  170. package/types/src/collections/ImmutableList.d.ts +28 -0
  171. package/types/src/collections/MixedTypedArrayList.d.ts +168 -108
  172. package/types/src/collections/OverlappingRangeIterator.d.ts +13 -17
  173. package/types/src/collections/RepeatingList.d.ts +7 -0
  174. package/types/src/collections/ScalarGrid.d.ts +50 -0
  175. package/types/src/collections/SparseGrid.d.ts +1 -1
  176. package/types/src/collections/SpatialMap.d.ts +13 -21
  177. package/types/src/collections/Tuple.d.ts +128 -16
  178. package/types/src/collections/_GridUtils.d.ts +19 -6
  179. package/types/src/collections/_RangeSweep.d.ts +97 -0
  180. package/types/src/collections/_SpatialUtils.d.ts +20 -2
  181. package/types/src/collections/index.d.ts +1 -0
  182. package/types/src/color/_BuiltInIndexDefs.d.ts +6 -0
  183. package/types/src/comment/Comment.d.ts +223 -0
  184. package/types/src/comment/CommentCollection.d.ts +40 -0
  185. package/types/src/comment/IComment.d.ts +340 -50
  186. package/types/src/comment/ICommentCollection.d.ts +90 -0
  187. package/types/src/comment/NoteMovable.d.ts +26 -0
  188. package/types/src/comment/_CommentUtils.d.ts +50 -0
  189. package/types/src/comment/_NoteBox.d.ts +50 -0
  190. package/types/src/comment/index.d.ts +1 -0
  191. package/types/src/condition/AnchoredConditional.d.ts +82 -17
  192. package/types/src/condition/BuiltInOperators/AbstractOperator.d.ts +42 -12
  193. package/types/src/condition/BuiltInOperators/AfterEqualToOperator.d.ts +2 -0
  194. package/types/src/condition/BuiltInOperators/AfterOperator.d.ts +2 -0
  195. package/types/src/condition/BuiltInOperators/AndOperator.d.ts +3 -1
  196. package/types/src/condition/BuiltInOperators/AverageOperator.d.ts +2 -0
  197. package/types/src/condition/BuiltInOperators/BeforeEqualToOperator.d.ts +2 -0
  198. package/types/src/condition/BuiltInOperators/BeforeOperator.d.ts +2 -0
  199. package/types/src/condition/BuiltInOperators/BetweenOperator.d.ts +2 -0
  200. package/types/src/condition/BuiltInOperators/ColorOperator.d.ts +4 -0
  201. package/types/src/condition/BuiltInOperators/ContainsOperator.d.ts +2 -0
  202. package/types/src/condition/BuiltInOperators/EndsWithOperator.d.ts +2 -0
  203. package/types/src/condition/BuiltInOperators/EqualToOperator.d.ts +4 -1
  204. package/types/src/condition/BuiltInOperators/ExpressionOperator.d.ts +5 -6
  205. package/types/src/condition/BuiltInOperators/GreaterThanEqualToOperator.d.ts +2 -0
  206. package/types/src/condition/BuiltInOperators/GreaterThanOperator.d.ts +2 -0
  207. package/types/src/condition/BuiltInOperators/IconOperator.d.ts +4 -0
  208. package/types/src/condition/BuiltInOperators/InSetOperator.d.ts +22 -5
  209. package/types/src/condition/BuiltInOperators/LessThanEqualToOperator.d.ts +2 -0
  210. package/types/src/condition/BuiltInOperators/LessThanOperator.d.ts +2 -0
  211. package/types/src/condition/BuiltInOperators/NotOperator.d.ts +2 -0
  212. package/types/src/condition/BuiltInOperators/OrOperator.d.ts +3 -1
  213. package/types/src/condition/BuiltInOperators/StartsWithOperator.d.ts +2 -0
  214. package/types/src/condition/BuiltInOperators/TimePeriodOperator.d.ts +2 -0
  215. package/types/src/condition/BuiltInOperators/TopNOperator.d.ts +6 -0
  216. package/types/src/condition/BuiltinSelectors/BaseSelector.d.ts +21 -6
  217. package/types/src/condition/BuiltinSelectors/DateSelector.d.ts +4 -5
  218. package/types/src/condition/BuiltinSelectors/DisplaySelector.d.ts +20 -0
  219. package/types/src/condition/BuiltinSelectors/TextLengthSelector.d.ts +7 -5
  220. package/types/src/condition/BuiltinSelectors/TimeSelector.d.ts +3 -5
  221. package/types/src/condition/BuiltinSelectors/WholeSelector.d.ts +3 -5
  222. package/types/src/condition/BuiltinSelectors/index.d.ts +12 -6
  223. package/types/src/condition/Condition.d.ts +19 -1
  224. package/types/src/condition/ICondition.d.ts +293 -73
  225. package/types/src/condition/_ConditionFormula.d.ts +152 -0
  226. package/types/src/condition/_ConditionUtils.d.ts +167 -13
  227. package/types/src/conditionalFormat/ConditionalEntry.d.ts +3 -3
  228. package/types/src/conditionalFormat/ConditionalFormat.d.ts +25 -14
  229. package/types/src/conditionalFormat/ConditionalFormatCollection.d.ts +19 -8
  230. package/types/src/conditionalFormat/IConditionalFormat.d.ts +12 -10
  231. package/types/src/conditionalFormat/IConditionalFormatCollection.d.ts +2 -0
  232. package/types/src/dataValidation/DataValidation.d.ts +69 -3
  233. package/types/src/dataValidation/DataValidationCollection.d.ts +20 -9
  234. package/types/src/dataValidation/IDataValidation.d.ts +149 -30
  235. package/types/src/dataValidation/IDataValidationCollection.d.ts +10 -2
  236. package/types/src/date/DateUtils.d.ts +20 -0
  237. package/types/src/date/_DateUtils.d.ts +91 -7
  238. package/types/src/externalBook/ExternalBookCollection.d.ts +145 -12
  239. package/types/src/externalBook/ExternalBookName.d.ts +96 -0
  240. package/types/src/externalBook/IExternalBook.d.ts +170 -18
  241. package/types/src/externalBook/IExternalBookCollection.d.ts +79 -7
  242. package/types/src/externalBook/index.d.ts +1 -0
  243. package/types/src/{lib/file → file}/file.browser.d.ts +22 -8
  244. package/types/src/{lib/file → file}/file.node.d.ts +7 -2
  245. package/types/src/fill/IEffect.d.ts +5 -5
  246. package/types/src/fill/IFill.d.ts +123 -78
  247. package/types/src/fill/IStroke.d.ts +190 -64
  248. package/types/src/fill/RectAlignment.d.ts +20 -0
  249. package/types/src/fill/_Fills.d.ts +187 -0
  250. package/types/src/fill/_Stroke.d.ts +89 -0
  251. package/types/src/fill/index.d.ts +1 -0
  252. package/types/src/filter/IFilter.d.ts +188 -5
  253. package/types/src/font/AdvanceBuilder.d.ts +25 -0
  254. package/types/src/font/AdvanceTable.d.ts +114 -0
  255. package/types/src/font/FontCollection.d.ts +57 -0
  256. package/types/src/font/IFont.d.ts +17 -0
  257. package/types/src/font/IFontCollection.d.ts +120 -22
  258. package/types/src/font/TableFileAdvanceBuilder.d.ts +27 -0
  259. package/types/src/font/_BuiltinFontTables.d.ts +10 -0
  260. package/types/src/font/index.d.ts +4 -1
  261. package/types/src/group/Group.d.ts +136 -0
  262. package/types/src/group/GroupMovableCollection.d.ts +37 -0
  263. package/types/src/group/IGroup.d.ts +129 -0
  264. package/types/src/group/index.d.ts +2 -0
  265. package/types/src/history/IHistory.d.ts +3 -2
  266. package/types/src/hyperlink/IHyperlink.d.ts +13 -0
  267. package/types/src/hyperlink/_Hyperlink.d.ts +5 -1
  268. package/types/src/i18n/LanguagePack.d.ts +12 -4
  269. package/types/src/index.d.ts +5 -0
  270. package/types/src/io/AbstractBackingStore.d.ts +24 -1
  271. package/types/src/io/ArrayBackingStore.d.ts +1 -1
  272. package/types/src/io/EmbeddedPart.d.ts +20 -0
  273. package/types/src/io/IEmbeddedPart.d.ts +63 -0
  274. package/types/src/io/IWorkbookIO.d.ts +185 -18
  275. package/types/src/io/WorkbookIO.d.ts +9 -0
  276. package/types/src/io/WorkbookOrigin.d.ts +20 -11
  277. package/types/src/io/WorkbookOriginProvider.d.ts +46 -0
  278. package/types/src/io/_XmlFragment.d.ts +49 -0
  279. package/types/src/io/index.d.ts +1 -0
  280. package/types/src/license/LicenseDetails.d.ts +1 -0
  281. package/types/src/license/LicenseManager.d.ts +4 -1
  282. package/types/src/license/Types.d.ts +38 -0
  283. package/types/src/license/_Utils.d.ts +22 -0
  284. package/types/src/license/details.d.ts +24 -0
  285. package/types/src/license/license-key.d.ts +49 -2
  286. package/types/src/license/runtime.browser.d.ts +41 -0
  287. package/types/src/{lib/utils/utils.node.d.ts → license/runtime.node.d.ts} +9 -12
  288. package/types/src/listener/IListener.d.ts +12 -7
  289. package/types/src/listener/ListenerEmitter.d.ts +46 -5
  290. package/types/src/model/AbstractModel.d.ts +14 -5
  291. package/types/src/movable/AbstractMovableContent.d.ts +182 -0
  292. package/types/src/movable/CustomElement.d.ts +4 -5
  293. package/types/src/movable/ErrorContent.d.ts +49 -0
  294. package/types/src/movable/FormControl.d.ts +285 -0
  295. package/types/src/movable/GroupMember.d.ts +87 -0
  296. package/types/src/movable/ICustomElement.d.ts +7 -2
  297. package/types/src/movable/IErrorContent.d.ts +23 -0
  298. package/types/src/movable/IFormControl.d.ts +455 -0
  299. package/types/src/movable/IMovable.d.ts +378 -46
  300. package/types/src/movable/IMovableCollection.d.ts +63 -3
  301. package/types/src/movable/Movable.d.ts +149 -49
  302. package/types/src/movable/MovableCollection.d.ts +15 -8
  303. package/types/src/movable/MovableContentRegistry.d.ts +113 -0
  304. package/types/src/movable/_BuiltInContents.d.ts +14 -0
  305. package/types/src/movable/_ContentFactory.d.ts +35 -0
  306. package/types/src/movable/_DrawnBounds.d.ts +37 -0
  307. package/types/src/movable/_InsertableCollection.d.ts +28 -0
  308. package/types/src/movable/_MovableUtils.d.ts +5 -0
  309. package/types/src/movable/_PendingContent.d.ts +25 -0
  310. package/types/src/movable/_PlacementUtils.d.ts +55 -0
  311. package/types/src/movable/_RotatedFrame.d.ts +20 -0
  312. package/types/src/movable/index.d.ts +7 -1
  313. package/types/src/named/AbstractNamed.d.ts +1 -1
  314. package/types/src/named/INamed.d.ts +4 -1
  315. package/types/src/named/INamedCollection.d.ts +26 -0
  316. package/types/src/named/NamedCollection.d.ts +16 -15
  317. package/types/src/numFmt/BuiltInFormats.d.ts +20 -7
  318. package/types/src/numFmt/IFormatEngine.d.ts +2 -0
  319. package/types/src/numFmt/NumfmtFormatEngine.d.ts +2 -0
  320. package/types/src/numFmt/_FormatCell.d.ts +11 -2
  321. package/types/src/numFmt/_NumFmtUtils.d.ts +0 -1
  322. package/types/src/numFmt/vendor/numfmt/_sheetxl.d.ts +6 -0
  323. package/types/src/outline/IOutline.d.ts +186 -0
  324. package/types/src/outline/Outline.d.ts +157 -0
  325. package/types/src/outline/index.d.ts +2 -0
  326. package/types/src/person/IPerson.d.ts +99 -0
  327. package/types/src/person/IPersonCollection.d.ts +51 -0
  328. package/types/src/person/Person.d.ts +32 -0
  329. package/types/src/person/PersonCollection.d.ts +49 -0
  330. package/types/src/person/index.d.ts +4 -0
  331. package/types/src/picture/IPicture.d.ts +33 -3
  332. package/types/src/picture/Picture.d.ts +33 -13
  333. package/types/src/pivot/IPivotTable.d.ts +72 -0
  334. package/types/src/pivot/IPivotTableCollection.d.ts +25 -0
  335. package/types/src/pivot/PivotCache.d.ts +34 -0
  336. package/types/src/pivot/PivotTable.d.ts +61 -0
  337. package/types/src/pivot/PivotTableCollection.d.ts +25 -0
  338. package/types/src/pivot/_PivotXml.d.ts +24 -0
  339. package/types/src/pivot/index.d.ts +6 -0
  340. package/types/src/primitives/CompositeRangeStats.d.ts +2 -0
  341. package/types/src/primitives/Criteria.d.ts +1 -1
  342. package/types/src/primitives/Grouping.d.ts +65 -0
  343. package/types/src/primitives/LambdaBrand.d.ts +26 -0
  344. package/types/src/primitives/PrimitiveUtils.d.ts +60 -21
  345. package/types/src/primitives/Range.d.ts +136 -26
  346. package/types/src/primitives/RangeStats.d.ts +30 -2
  347. package/types/src/primitives/ReferenceRange.d.ts +44 -0
  348. package/types/src/primitives/Runtime.d.ts +15 -2
  349. package/types/src/primitives/environment.browser.d.ts +9 -0
  350. package/types/src/primitives/environment.node.d.ts +10 -0
  351. package/types/src/primitives/stats/AggregateStats.d.ts +49 -15
  352. package/types/src/primitives/stats/Cancellation.d.ts +13 -0
  353. package/types/src/primitives/stats/FrequencyStats.d.ts +10 -1
  354. package/types/src/primitives/stats/LookupIndex.d.ts +46 -0
  355. package/types/src/primitives/stats/Ranked.d.ts +1 -1
  356. package/types/src/primitives/stats/SortedNumbers.d.ts +4 -2
  357. package/types/src/primitives/stats/index.d.ts +1 -0
  358. package/types/src/print/IPrint.d.ts +0 -22
  359. package/types/src/protectedRange/IProtectedRange.d.ts +4 -0
  360. package/types/src/protectedRange/IProtectedRangeCollection.d.ts +2 -0
  361. package/types/src/protectedRange/ProtectedRange.d.ts +1 -4
  362. package/types/src/protectedRange/ProtectedRangeCollection.d.ts +19 -8
  363. package/types/src/protection/DefaultProtection.d.ts +12 -1
  364. package/types/src/protection/IProtection.d.ts +36 -2
  365. package/types/src/reference/ReferenceUtils.d.ts +80 -0
  366. package/types/src/reference/index.d.ts +2 -0
  367. package/types/src/resource/IResource.d.ts +21 -1
  368. package/types/src/resource/IResourceCollection.d.ts +9 -1
  369. package/types/src/resource/ResourceCollection.d.ts +6 -6
  370. package/types/src/scripting/FunctionArguments.d.ts +22 -0
  371. package/types/src/scripting/FunctionCollection.d.ts +49 -15
  372. package/types/src/scripting/IFunctionCollection.d.ts +62 -32
  373. package/types/src/scripting/IModule.d.ts +25 -0
  374. package/types/src/scripting/IModuleCollection.d.ts +17 -0
  375. package/types/src/scripting/IScript.d.ts +28 -26
  376. package/types/src/scripting/Module.d.ts +34 -6
  377. package/types/src/scripting/ModuleCollection.d.ts +17 -12
  378. package/types/src/scripting/Runtime.d.ts +15 -0
  379. package/types/src/scripting/Scripts.d.ts +3 -7
  380. package/types/src/scripting/TypedFunction.d.ts +200 -4
  381. package/types/src/scripting/_FunctionIndex.d.ts +8 -3
  382. package/types/src/scripting/_ModuleUtils.d.ts +11 -1
  383. package/types/src/scripting/_ScriptUtils.d.ts +3 -0
  384. package/types/src/scripting/declarations.browser.d.ts +10 -0
  385. package/types/src/scripting/declarations.d.ts +49 -0
  386. package/types/src/scripting/declarations.node.d.ts +9 -0
  387. package/types/src/scripting/index.d.ts +3 -0
  388. package/types/src/selection/IMovableSelection.d.ts +148 -0
  389. package/types/src/selection/IRangeSelection.d.ts +9 -4
  390. package/types/src/selection/MovableSelection.d.ts +48 -0
  391. package/types/src/selection/RangeSelection.d.ts +15 -0
  392. package/types/src/selection/index.d.ts +1 -0
  393. package/types/src/shape/GeometryPreset.d.ts +197 -0
  394. package/types/src/shape/IGeometry.d.ts +380 -0
  395. package/types/src/shape/IShape.d.ts +341 -194
  396. package/types/src/shape/IShapeStyle.d.ts +135 -0
  397. package/types/src/shape/Shape.d.ts +107 -21
  398. package/types/src/shape/ShapeStyleUtils.d.ts +54 -0
  399. package/types/src/shape/_ConnectorFrame.d.ts +32 -0
  400. package/types/src/shape/_ConnectorRoute.d.ts +33 -0
  401. package/types/src/shape/_Connectors.d.ts +108 -0
  402. package/types/src/shape/_Geometry.d.ts +14 -0
  403. package/types/src/shape/_GeometryLoader.d.ts +21 -0
  404. package/types/src/shape/_ShapeStyle.d.ts +70 -0
  405. package/types/src/shape/_builtIn/_BuiltInChunks.d.ts +10 -0
  406. package/types/src/shape/_builtIn/_BuiltInDef.d.ts +9 -0
  407. package/types/src/shape/_builtIn/arrows.d.ts +6 -0
  408. package/types/src/shape/_builtIn/basic.d.ts +6 -0
  409. package/types/src/shape/_builtIn/callouts.d.ts +6 -0
  410. package/types/src/shape/_builtIn/flowchart.d.ts +6 -0
  411. package/types/src/shape/_builtIn/lines.d.ts +6 -0
  412. package/types/src/shape/_builtIn/math.d.ts +6 -0
  413. package/types/src/shape/_builtIn/other.d.ts +6 -0
  414. package/types/src/shape/_builtIn/rectangles.d.ts +6 -0
  415. package/types/src/shape/_builtIn/starsBanners.d.ts +6 -0
  416. package/types/src/shape/geometry/_strokeEnds.d.ts +7 -0
  417. package/types/src/shape/geometry/format.d.ts +3 -0
  418. package/types/src/shape/geometry/geometry.d.ts +85 -0
  419. package/types/src/shape/geometry/guides.d.ts +54 -0
  420. package/types/src/shape/geometry/handles.d.ts +14 -0
  421. package/types/src/shape/geometry/index.d.ts +7 -0
  422. package/types/src/shape/geometry/lineEnds.d.ts +54 -0
  423. package/types/src/shape/geometry/paths.d.ts +35 -0
  424. package/types/src/shape/geometry/segments.d.ts +114 -0
  425. package/types/src/shape/index.d.ts +3 -0
  426. package/types/src/sheet/CellRegion.d.ts +6 -0
  427. package/types/src/sheet/ICellContainerOptions.d.ts +50 -0
  428. package/types/src/sheet/ISheet.d.ts +197 -50
  429. package/types/src/sheet/ISheetCollection.d.ts +2 -5
  430. package/types/src/sheet/NamedCellRange.d.ts +16 -7
  431. package/types/src/sheet/NamedRange.d.ts +8 -0
  432. package/types/src/sheet/Sheet.d.ts +923 -138
  433. package/types/src/sheet/SheetCell.d.ts +92 -32
  434. package/types/src/sheet/SheetCollection.d.ts +19 -8
  435. package/types/src/sheet/SheetRange.d.ts +92 -17
  436. package/types/src/sheet/SheetRanges.d.ts +22 -9
  437. package/types/src/sheet/_CellBuffer.d.ts +214 -0
  438. package/types/src/sheet/_HeldFormula.d.ts +69 -0
  439. package/types/src/sheet/_InvalidSheetRange.d.ts +7 -7
  440. package/types/src/sheet/_ListenerAnchor.d.ts +104 -0
  441. package/types/src/sheet/_RangeStateSweep.d.ts +16 -0
  442. package/types/src/sheet/_ScalarListFactory.d.ts +61 -0
  443. package/types/src/sheet/_SheetAutoFillUtils.d.ts +74 -0
  444. package/types/src/sheet/_SheetAutoFitUtils.d.ts +28 -0
  445. package/types/src/sheet/_SheetEvents.d.ts +43 -0
  446. package/types/src/sheet/_SheetFilterUtils.d.ts +49 -1
  447. package/types/src/sheet/_SheetIntents.d.ts +296 -0
  448. package/types/src/sheet/_SheetMutations.d.ts +182 -62
  449. package/types/src/sheet/_SheetStateReader.d.ts +19 -13
  450. package/types/src/sheet/_SheetStateTypes.d.ts +83 -78
  451. package/types/src/sheet/_SheetUtils.d.ts +39 -22
  452. package/types/src/sheet/_WatchAnchor.d.ts +93 -0
  453. package/types/src/sheet/spatial/HeldFormulaEntry.d.ts +36 -0
  454. package/types/src/sheet/spatial/index.d.ts +1 -0
  455. package/types/src/sheet/style/SheetCellStyle.d.ts +209 -304
  456. package/types/src/sheet/style/SheetDirectStyle.d.ts +30 -19
  457. package/types/src/sheet/style/SheetNamedStyle.d.ts +17 -17
  458. package/types/src/sheet/style/SheetTableStyle.d.ts +5 -5
  459. package/types/src/sheet/style/_Resolvers.d.ts +14 -8
  460. package/types/src/sheet/style/_StyleUtils.d.ts +38 -8
  461. package/types/src/sheetHeader/ISheetHeader.d.ts +94 -53
  462. package/types/src/sheetHeader/SheetCellHeader.d.ts +4 -0
  463. package/types/src/sheetHeader/SheetHeader.d.ts +42 -22
  464. package/types/src/sheetHeader/_HeaderMetrics.d.ts +37 -0
  465. package/types/src/sheetHeader/_HeaderUtils.d.ts +5 -3
  466. package/types/src/sheetProtection/ISheetProtection.d.ts +41 -7
  467. package/types/src/sheetProtection/SheetProtection.d.ts +12 -0
  468. package/types/src/sheetView/ISheetView.d.ts +69 -15
  469. package/types/src/sheetView/SheetView.d.ts +20 -11
  470. package/types/src/slicer/ISlicer.d.ts +304 -17
  471. package/types/src/slicer/ISlicerStyle.d.ts +109 -0
  472. package/types/src/slicer/Slicer.d.ts +128 -13
  473. package/types/src/slicer/SlicerStyle.d.ts +25 -0
  474. package/types/src/slicer/_BuiltInSlicerStyles.d.ts +13 -0
  475. package/types/src/slicer/_SlicerUtils.d.ts +30 -0
  476. package/types/src/slicer/index.d.ts +1 -0
  477. package/types/src/sort/ISort.d.ts +4 -2
  478. package/types/src/string/IStringCollection.d.ts +5 -0
  479. package/types/src/string/StringCollection.d.ts +6 -6
  480. package/types/src/style/{IStyle.d.ts → ICellStyle.d.ts} +72 -52
  481. package/types/src/style/INamedStyleCollection.d.ts +72 -0
  482. package/types/src/style/ISlicerStyleCollection.d.ts +77 -0
  483. package/types/src/style/IStyleCollection.d.ts +91 -60
  484. package/types/src/style/ITableStyleCollection.d.ts +89 -0
  485. package/types/src/style/NamedStyleCollection.d.ts +39 -0
  486. package/types/src/style/SlicerStyleCollection.d.ts +46 -0
  487. package/types/src/style/StyleCollection.d.ts +81 -26
  488. package/types/src/style/TableStyleCollection.d.ts +49 -0
  489. package/types/src/style/_BuiltInStyleDefs.d.ts +6 -6
  490. package/types/src/style/_BuiltInStyleNames.d.ts +2 -2
  491. package/types/src/style/index.d.ts +7 -1
  492. package/types/src/table/AnchoredTable.d.ts +701 -72
  493. package/types/src/table/AutoTable.d.ts +7 -5
  494. package/types/src/table/ITable.d.ts +261 -34
  495. package/types/src/table/ITableCollection.d.ts +12 -0
  496. package/types/src/table/ITableStyle.d.ts +37 -37
  497. package/types/src/table/TableCollection.d.ts +19 -8
  498. package/types/src/table/_FilterField.d.ts +19 -6
  499. package/types/src/table/_NamedTable.d.ts +17 -1
  500. package/types/src/table/_NamedTableSource.d.ts +1 -0
  501. package/types/src/table/_SortField.d.ts +2 -0
  502. package/types/src/table/_TableColumn.d.ts +13 -2
  503. package/types/src/table/_TableMessages.d.ts +1 -0
  504. package/types/src/table/_TableUtils.d.ts +40 -0
  505. package/types/src/text/Bullet.d.ts +4 -0
  506. package/types/src/text/IText.d.ts +182 -0
  507. package/types/src/text/ITextFrame.d.ts +110 -1
  508. package/types/src/text/TextBoxAlignment.d.ts +25 -16
  509. package/types/src/text/TextFrame.d.ts +4 -0
  510. package/types/src/text/TextLine.d.ts +4 -0
  511. package/types/src/text/TextParagraph.d.ts +4 -0
  512. package/types/src/text/TextRotation.d.ts +3 -3
  513. package/types/src/text/TextRun.d.ts +9 -0
  514. package/types/src/text/TextStacked.d.ts +83 -0
  515. package/types/src/text/index.d.ts +1 -0
  516. package/types/src/text/richtext/IRichText.d.ts +36 -0
  517. package/types/src/text/richtext/IStyledFont.d.ts +18 -18
  518. package/types/src/text/richtext/index.d.ts +1 -0
  519. package/types/src/theme/ITheme.d.ts +45 -4
  520. package/types/src/theme/IThemeCollection.d.ts +2 -0
  521. package/types/src/theme/ThemeCollection.d.ts +11 -7
  522. package/types/src/theme/_OfficeFormatScheme.d.ts +3 -0
  523. package/types/src/transaction/ITransaction.d.ts +258 -45
  524. package/types/src/transaction/Transaction.d.ts +101 -11
  525. package/types/src/transaction/TransactionUndoManager.d.ts +4 -1
  526. package/types/src/type/AbstractCollection.d.ts +101 -0
  527. package/types/src/type/ICollection.d.ts +117 -0
  528. package/types/src/type/ITypes.d.ts +9 -7
  529. package/types/src/type/index.d.ts +1 -0
  530. package/types/src/utils/_CSSUtils.d.ts +3 -3
  531. package/types/src/wasm/_sdkWasm.d.ts +7 -0
  532. package/types/src/wasm/index.d.ts +2 -0
  533. package/types/src/wasm/sdkWasm.d.ts +29 -0
  534. package/types/src/workbook/IWorkbook.d.ts +180 -40
  535. package/types/src/workbook/Workbook.d.ts +123 -10
  536. package/types/src/workbook/_WorkbookIntents.d.ts +36 -0
  537. package/types/src/workbookProtection/IWorkbookProtection.d.ts +7 -0
  538. package/types/src/workbookProtection/WorkbookProtection.d.ts +3 -0
  539. package/types/src/workbookView/IWorkbookView.d.ts +12 -0
  540. package/types/src/workbookView/WorkbookView.d.ts +5 -0
  541. package/browser/cjs/B7_pDFYCVzt-3hUs.cjs +0 -1
  542. package/browser/cjs/BF14ZEAnaqxXroSj.cjs +0 -1
  543. package/browser/cjs/BXtvdT1Z-MsB_o5F.cjs +0 -1
  544. package/browser/cjs/Bc4JjVVZfFo3R4He.cjs +0 -33
  545. package/browser/cjs/CD2RXdnfqSYNc6gX.cjs +0 -57
  546. package/browser/cjs/DcLpXGexEtOxi-dD.cjs +0 -1
  547. package/browser/cjs/Dv3x6zut1ZRUt3IF.cjs +0 -10
  548. package/browser/cjs/index.cjs +0 -3
  549. package/browser/esm/0Mj5WKM362q6CECb.mjs +0 -824
  550. package/browser/esm/CPTtL2f6_4iblmFM.mjs +0 -4436
  551. package/browser/esm/CoA-sUxjiIUIpTUF.mjs +0 -109
  552. package/browser/esm/Dy4Sdpju1T2icURu.mjs +0 -50854
  553. package/node/esm/BtGxbEbBm79YvF_k.mjs +0 -843
  554. package/node/esm/DqgWsVXROpSgKq6c.mjs +0 -114
  555. package/types/src/cellRange/_GraphNode.d.ts +0 -38
  556. package/types/src/condition/BuiltinSelectors/ListSelector.d.ts +0 -12
  557. package/types/src/dataValidation/_Utils.d.ts +0 -10
  558. package/types/src/lib/utils/_Utils.d.ts +0 -20
  559. package/types/src/lib/utils/utils.browser.d.ts +0 -33
  560. package/types/src/movable/IGroup.d.ts +0 -30
  561. package/types/src/movable/IMovableSelection.d.ts +0 -49
  562. package/types/src/sheet/listener/RangesListener.d.ts +0 -32
  563. package/types/src/sheet/listener/RangesListenerEntry.d.ts +0 -19
  564. package/types/src/sheet/listener/index.d.ts +0 -3
  565. /package/types/src/{lib/utils → license}/banner.d.ts +0 -0
@@ -1,8 +1,9 @@
1
1
  import { IRange, IFormulaContext } from '@sheetxl/primitives';
2
2
  import { FixedPackedArray } from '../../primitives/PrimitiveUtils';
3
+ import { PendingOverlayGrid } from '../state/_PendingOverlayGrid';
3
4
  import { ISpatialMap, ISpatialMap3D } from '../../collections';
4
5
  import { FormulaSpatialValue, PrecedentSpatialValue, PrecedentKind } from '../spatial';
5
- import { ICalcGrid } from '../grid';
6
+ import { ICalcGrid, CalcGridBackend } from '../grid';
6
7
  import { IContextContainer, CalcNode } from '../state';
7
8
  import { ReadHook } from '../state/_ReadObservedGrid';
8
9
  import { CircularReference, CycleHost } from './CircularReference';
@@ -17,7 +18,9 @@ export declare class CalcExecutor {
17
18
  protected _container: IContextContainer;
18
19
  protected _context: IFormulaContext;
19
20
  private readonly _requestCalculate;
20
- protected _pendingCalcs: Set<CalcNode>;
21
+ protected _pendingCalcs: Map<CalcNode, number>;
22
+ /** Debounced drain of {@link _pendingCalcs} into the volatile set; one instance for the executor's lifetime. */
23
+ private readonly _flushPendingCalcs;
21
24
  /**
22
25
  * The last pass's circular roster: every node it evaluated by demand (a `doMarkAndPlan` that
23
26
  * could not order, or the iteration guard's hand-over) plus every node whose dynamic read
@@ -51,13 +54,41 @@ export declare class CalcExecutor {
51
54
  * Lengths of the module scratch lists of one {@link doDemandEvaluate}: `_iterHits`, the
52
55
  * `Waiting` nodes the evaluation in progress read under iteration (each flagged
53
56
  * `CalcState.IterHit`; consumed when it returns); `_iterMembers`, the members the call marked,
54
- * in marking order — the sweep order; `_iterDownstream`, the nodes it marked downstream,
55
- * evaluated once more after the sweeps. On the executor rather than local because the lists
56
- * grow across the runs a sweep nests.
57
+ * plus the downstream nodes a sweep found one of them reads (`CalcState.Swept`), in ADDRESS
58
+ * order once the sweeps begin ({@link _sortIterMembers}); `_iterDownstream`, the nodes it
59
+ * marked downstream, evaluated once more after the sweeps. On the executor rather than local
60
+ * because the lists grow across the runs a sweep nests.
57
61
  */
58
62
  protected _iterHitsLength: number;
59
63
  protected _iterMembersLength: number;
60
64
  protected _iterDownstreamLength: number;
65
+ /**
66
+ * The cycles of the demand run in progress that are still OPEN, under iteration: per cycle
67
+ * group, the stack index of its lowest started member. A cycle is a strongly connected
68
+ * component, and it is complete only when that member finishes — until then a node that reads
69
+ * one of its FINISHED members reaches the open member through it, and the open member reaches
70
+ * the reader up the stack, so the reader is in the cycle too ({@link _onMemberRead}). Removed
71
+ * when the member at the index finishes, so empty between runs.
72
+ */
73
+ protected _openGroups: Map<number, number>;
74
+ /**
75
+ * Cycle groups a later slice joined to another (`from → into`). A slice relabels only the
76
+ * nodes on the stack, so a group's finished members keep the old id until
77
+ * {@link _settleGroups} rewrites them; every read of a group in between resolves through here.
78
+ */
79
+ protected _groupAlias: Map<number, number>;
80
+ /** Inside {@link _demandSweep}'s sweeps — where a downstream node a swept node reads joins them. */
81
+ protected _sweeping: boolean;
82
+ /**
83
+ * Whether `_iterMembers` is in address order yet ({@link _sortIterMembers}) — false while the
84
+ * discovery that finds the cycles appends to it, true from the first sweep on, when a member
85
+ * that joins has to be placed rather than appended.
86
+ */
87
+ protected _iterSorted: boolean;
88
+ /** Where {@link _demandSweep} stands in the list, so an arrival below it can move it up; `-1` between sweeps. */
89
+ protected _sweepIndex: number;
90
+ /** How many nodes `_demandDeferred` holds for the {@link _demandRun} in progress. */
91
+ protected _deferredLength: number;
61
92
  /** The pass the hook answers for; inert otherwise. Set by `doMarkAndPlan`, released with `_gridUpdates`. */
62
93
  protected _passActive: boolean;
63
94
  protected _passCycleId: number;
@@ -68,6 +99,20 @@ export declare class CalcExecutor {
68
99
  * value is right, it is just not in the grid yet.
69
100
  */
70
101
  protected _flush: (() => void) | null;
102
+ /**
103
+ * Per grid, the committed values with the running pass's uncommitted results over them — the
104
+ * batch and the demand results the plan has not taken yet; what `getGridValues` answers with
105
+ * while a pass evaluates. Released with {@link _flush}.
106
+ */
107
+ _overlays: Map<string, PendingOverlayGrid> | null;
108
+ /**
109
+ * The blank regions of the blocks whose representative could not stand for them this plan
110
+ * (PLAN-WATCHES-BLANK-AWARE §4), and the cells of the regions that WERE shared whose value the
111
+ * share moved under a reader ({@link _dirtyBlankReaders}) — handed to `doEvaluate`'s incremental
112
+ * dirty set at the end of the plan, so the next iteration of the pass collects the first cell
113
+ * by cell and the readers of the second.
114
+ */
115
+ protected _fallbackDirty: ISpatialMap | null;
71
116
  /**
72
117
  * The cycle table (design §7.3): per cycle id, one live {@link CircularReference} holding the
73
118
  * nodes the sheet index currently shows as its members and as downstream of it — the object
@@ -81,6 +126,13 @@ export declare class CalcExecutor {
81
126
  protected _cycleHost: CycleHost;
82
127
  /** Last cycle id handed out by a demand pass; ids are unique across passes. */
83
128
  protected _cycleGroupNext: number;
129
+ /**
130
+ * Advances whenever the circular index changes — a node's shown role or group moves in
131
+ * {@link _trackCircular}. A remembered plan (§1.4) whose closure held no cycle node at the
132
+ * epoch it was made at still holds none while the epoch stands, which is what lets it be
133
+ * reused with the in-degree phase's cycle tainting skipped. See `fastEligible`.
134
+ */
135
+ protected _cycleEpoch: number;
84
136
  /**
85
137
  * Counters over every demand pass since construction: nodes evaluated by demand and
86
138
  * `NeedsFirst` retries. A retry is the cost of the path (a formula run and thrown away), so a
@@ -90,6 +142,63 @@ export declare class CalcExecutor {
90
142
  evaluations: number;
91
143
  retries: number;
92
144
  };
145
+ /**
146
+ * Counters and per-phase timings over every plan since construction — the measurement rig the
147
+ * performance plan's §1.6 rollout asks for, and what validates the §1.2/§1.3 caches while
148
+ * {@link planCacheMode} is `'assert'`.
149
+ */
150
+ protected _planStats: CalcExecutor.PlanStats;
151
+ /**
152
+ * The plan caches of CALC-PERFORMANCE-PLAN.md §1.2/§1.3.
153
+ *
154
+ * - `'on'` (default): an eligible pass skips the in-degree + Kahn phases (plan = affected set
155
+ * sorted by order stamp) and discovery reuses cached `dependents`.
156
+ * - `'assert'` (the §1.6 rollout mode; the diagnostic to flip back to if values ever look
157
+ * stale — `calculation._planCacheMode('assert')`): stamps are written and eligibility computed, but every
158
+ * pass still runs the full search + Kahn phases; the fast path's order and the cached
159
+ * `dependents` are VERIFIED against them, mismatches counted in
160
+ * `planAssertFailures`/`dependentsAssertFailures` and logged. Costs the old planning price
161
+ * plus epsilon.
162
+ * - `'off'`: stamps are neither written nor consulted.
163
+ */
164
+ planCacheMode: 'off' | 'assert' | 'on';
165
+ /** Next order-stamp plan id to hand out; ids are unique across passes. */
166
+ protected _planIdNext: number;
167
+ /** Id of the last fully-ordered plan that stamped (§1.2); `0` = none yet. */
168
+ protected _lastPlanId: number;
169
+ /** Length of the last stamped plan — the `orderIndex` range the fast path's bucket order spans. */
170
+ protected _lastStampedLength: number;
171
+ /**
172
+ * How many of the last stamped plan's nodes Kahn ordered; the rest — stamps at or past this
173
+ * index — are its DEMAND APPENDIX: nodes Kahn could not order (a static self-edge such as
174
+ * `OFFSET(A1,-1,0)` in A1) that are evaluated by demand after everything ordered. A pass that
175
+ * reuses the stamps or the memo re-flags them for demand (`Circular`, the batch, the roster)
176
+ * rather than evaluating them on the ordinary path. Equal to `_lastStampedLength` when the last
177
+ * plan was fully ordered.
178
+ */
179
+ protected _lastStampedOrderedLength: number;
180
+ /**
181
+ * Whole-closure reuse (§1.4): remembered fully-ordered passes — seeds, plan, and the
182
+ * `precedentEpoch` each was planned at (`-1` = empty). A pass with the identical seed set at
183
+ * the same epoch has the identical affected closure and the same valid order, so discovery and
184
+ * the sort are skipped outright: the plan is reused verbatim and each node gets only its
185
+ * per-pass reset. TWO slots, because one was not enough for the common workflow — "type a value,
186
+ * then fill it down": the single-cell pass overwrote the remembered bulk plan every time. Slots
187
+ * are recycled least-recently-USED (a hit refreshes a memo's clock), so the two plans in play
188
+ * both stay resident: bulk → small edits → same bulk hits, and two alternating bulk edits both
189
+ * hit. NOT "keep the largest": a full calc's plan is the same size as a bulk edit's over the
190
+ * same sheet, and that tie evicted the bulk memo on the very next small edit. Per executor, not
191
+ * module scope (§1.5).
192
+ */
193
+ protected _planMemos: [CalcExecutor.PlanMemo, CalcExecutor.PlanMemo];
194
+ /** The memos' LRU clock. Its own counter, NOT `PlanStats.passes`: a stats reset must not reorder the slots. */
195
+ protected _planMemoClock: number;
196
+ /**
197
+ * Nodes with an async promise in flight. Per executor, NOT module scope — module scope would
198
+ * cross-pollute workbook instances (undo to 0 formulas needs to clear these; TODO - revisit
199
+ * how we manage promises).
200
+ */
201
+ protected _pendingPromises: Set<CalcNode>;
93
202
  _gridUpdates: Map<string, ICalcGrid.IncrementalUpdates> | null;
94
203
  _addDynamicPrecedent: ((node: CalcNode, range: IRange.Coords | undefined, kind: PrecedentKind) => void) | null;
95
204
  constructor(container: IContextContainer, context: IFormulaContext, requestCalculate: () => void);
@@ -116,14 +225,74 @@ export declare class CalcExecutor {
116
225
  * batch) is committed on the spot and read; `Done` with a cycle role makes the reader
117
226
  * downstream. Any other cell is a value. Inert outside a pass, so a reference built during one
118
227
  * and read later (a spill committed afterwards) is plain values.
228
+ *
229
+ * `prefetch` is the rectangle an ITERATION was asked for, announced before its first read. Only
230
+ * the `Unevaluated` decision belongs to it — bringing what the sweep may need forward is free,
231
+ * and over-eager is harmless (design §4.3) — while `Waiting` and a finished cycle role are left
232
+ * to the per-position reports the sweep makes, which is what stops an early-exit lookup from
233
+ * reporting the tail it never opened (plan item 1). It answers whether those reports can say
234
+ * anything at all: a rectangle holding no node of this pass and nothing the sheet shows in a
235
+ * cycle is swept unobserved.
119
236
  */
120
237
  private _onPassRead;
121
238
  /**
122
- * Under iteration, a read of a `Done` cycle node by the node being evaluated: the reader is
123
- * downstream of that cycle (design §6.3) unless it is in one itself. Nothing is aborted — the
124
- * reader goes on with the value — so the mark is made here, on the reader.
239
+ * A read of a `Done` cycle node by the node being evaluated: the reader is downstream of that
240
+ * cycle unless it is in one itself. Nothing is aborted — the reader goes on — so the mark is
241
+ * made here, on the reader.
242
+ *
243
+ * @remarks
244
+ * Under iteration this is design §6.3, and the reader goes on with the member's real value.
245
+ * With iteration off the value is discarded when the evaluation finishes (`_demandRun` writes
246
+ * what the cell last had), and the reader runs on for the CLASSIFICATION alone: a cell can be
247
+ * both downstream of one cycle and a member of its own, and aborting at the first read decided
248
+ * that by read order. `A5 = IF(…, A5 - (A4*A2))` meets `A4` before it meets itself — postfix
249
+ * evaluation opens the inner product first — so it used to be reported downstream of `A4`'s
250
+ * cycle and never reached its own, leaving the user an `A4` to fix and an `A5` still circular.
251
+ * Running on lets the later `Waiting` read close it, and `_markCycleSlice` overwrites the role:
252
+ * member wins over downstream, never the reverse.
253
+ */
254
+ private _markDownstream;
255
+ /**
256
+ * A read of a `Done` cycle node inside the demand loop, under iteration. Which of three things
257
+ * it is depends on where the cycle stands, not on the node alone:
258
+ *
259
+ * - **A member of a cycle still open** ({@link _openGroups}): the reader is in that cycle.
260
+ * Recorded as a hit, like a read of a `Waiting` node, and the slice is marked when the reader
261
+ * returns. This is what makes a cycle its whole strongly connected component however the pass
262
+ * entered it. Entered at `reserve = SUM(months)`, a fund-sizing loop first closes through ONE
263
+ * month (`reserve → month → minDist → size → … → reserve`); `size` then finishes, and every
264
+ * other month reads it finished while `reserve` is still open beneath them. They feed
265
+ * `reserve`: left downstream, the sweeps iterate a fragment and settle on a wrong number.
266
+ * - **A downstream node read by a node being swept**: it feeds the sweep, so it is swept too
267
+ * ({@link _sweepAlong}). Nothing the discovery above misses can then leave a swept node
268
+ * reading a value that moves only after the sweeps.
269
+ * - Anything else: the reader is downstream ({@link _markDownstream}).
270
+ */
271
+ private _onMemberRead;
272
+ /**
273
+ * Adds the downstream node `read` to the sweep list because `reader`, which is swept, reads it.
274
+ * Downstream of the reader's own cycle it closes a loop through the reader — a member, and
275
+ * `reader`'s next step if it has none. Downstream of another cycle it lies between the two: it
276
+ * keeps its role and moves with them (`CalcState.Swept`).
277
+ */
278
+ private _sweepAlong;
279
+ /**
280
+ * Adds `member` to the sweep list with the value the sweeps start it from, at its ADDRESS
281
+ * position once {@link _sortIterMembers} has ordered the list — Excel sweeps row-major, always
282
+ * (design §6.3), and a member that JOINS during the sweeps has to land in that order too or the
283
+ * order changes partway through the pass. Before the ordering, which is the discovery that finds
284
+ * the cycles, it appends: the list is sorted once, where it is finalized.
125
285
  */
126
- private _iterRead;
286
+ private _addIterMember;
287
+ /**
288
+ * Puts the sweep list in address order, once, where it is finalized: every sweep of the pass
289
+ * then runs in that one order, and {@link _addIterMember} places what joins later.
290
+ */
291
+ private _sortIterMembers;
292
+ /** The group `group` stands for now — itself unless a later slice joined it to another. */
293
+ private _resolveGroup;
294
+ /** Rewrites every group a slice joined to another ({@link _groupAlias}) on the pass's roster. */
295
+ private _settleGroups;
127
296
  /**
128
297
  * The nodes of this pass inside `coords` that are still `Unevaluated`, written into `into` from
129
298
  * slot `length` on; returns the new length.
@@ -143,39 +312,157 @@ export declare class CalcExecutor {
143
312
  * (the batch, after everything ordered is committed), and `doEvaluate` again for a single
144
313
  * ordered node whose dynamic read landed on a node not yet evaluated — the same suspension,
145
314
  * on the ordinary path (§5). Every node evaluated here is flagged `circular`, so the plan
146
- * takes its `demandValue` when it reaches it, and its finalized scalar is already in the grid
147
- * for later lazy reads; `flush` commits the ordered path's pending batch when a read needs a
148
- * value still sitting in it. Flat: the stack is an array, so a 1,560-row chain is 1,560
149
- * evaluations, not 1,560 JS frames. A node is retried at most once per `NeedsFirst` it raises,
150
- * and with the prefetch of its static precedents that is normally once.
315
+ * takes its `demandValue` when it reaches it, and its finalized scalar is already in the
316
+ * overlay's demand layer for later lazy reads (`_pushDemand`); `flush` commits the ordered
317
+ * path's pending batch when a read needs a value still sitting in it. Flat: the stack is an
318
+ * array, so a 1,560-row chain is 1,560 evaluations, not 1,560 JS frames. A node is retried at
319
+ * most once per `NeedsFirst` it raises, and with the prefetch of its static precedents that is
320
+ * normally once.
151
321
  */
152
322
  protected doDemandEvaluate(cycleId: number, getUpdates: (scope: string) => ICalcGrid.IncrementalUpdates, worklist: readonly CalcNode[], flush: () => void): void;
153
323
  /**
154
- * The finalized scalar goes into the grid now, so a later lazy read sees it; `doEvaluate`
155
- * commits the same value with the notifications when it reaches the node.
324
+ * The finalized scalar goes into the overlay's demand layer now, so a later lazy read sees it;
325
+ * `doEvaluate` takes it from there and commits it with the notifications when it reaches the
326
+ * node. A sweep rewrites a member once per sweep, and none of those is a persistent write.
327
+ */
328
+ private _pushDemand;
329
+ /**
330
+ * The overlay of `gridId` for the `doEvaluate` in progress, made on first use — demand
331
+ * evaluation runs only inside one, so {@link _overlays} is installed. It commits through the
332
+ * `flush` of the `doEvaluate` that made it, and only that one.
333
+ */
334
+ private _overlayFor;
335
+ /**
336
+ * A finalized result fitted to its cell when the block makes every cell its own 1x1
337
+ * array-entered extent (`FormulaSpatialValue.arrayFirstCell`): element `[0,0]` of a range, so the
338
+ * cell stores a scalar and registers no spill. Anything else as it is.
339
+ */
340
+ private _fitCell;
341
+ /**
342
+ * The representative of a gated block has finalized (PLAN-WATCHES-BLANK-AWARE §4): its scalar is
343
+ * shared with the block's blank region, or the gate is closed and the region is re-collected
344
+ * cell by cell.
345
+ *
346
+ * @remarks
347
+ * Shared only when nothing the evaluation read was per cell (`CalcScope.perCellRead`: a draw, a
348
+ * position, a computed reference), the result is a scalar, and the node ran on its own - not a
349
+ * promise, not pending on one, not in a cycle. A per-cell read is a fact of the formula and
350
+ * closes the gate for good ({@link FormulaSpatialValue.blankRefused}); the rest may not recur
351
+ * and close it for this pass ({@link _fallbackBlank}).
352
+ *
353
+ * How the region is shared depends on who can read it (§4c). A block in a SHEET grid is read
354
+ * by other formulas, the sheet and the error index, all through the grid's values, so the
355
+ * scalar is written as runs - one per column of each blank rectangle, which for a column block
356
+ * is one run. A block in a grid that SHADOWS a sheet (a watch body, a one-shot evaluation) has
357
+ * exactly one reader, the range its owner holds, and that range answers the region as its empty
358
+ * value from the block (`FormulaSpatialValue.getBlankValueWithin`): nothing is written, whatever
359
+ * the region's size, and what an earlier pass stored there is removed so the block's answer is
360
+ * the one read.
361
+ *
362
+ * @param refuse The caller's own reasons the result cannot stand for the region.
363
+ */
364
+ private _finalizeRepresentative;
365
+ /**
366
+ * Marks dirty the cells of a shared blank region whose value the share just moved, wherever a
367
+ * formula reads them, so the pass's next iteration evaluates those readers against the runs now
368
+ * in the grid.
369
+ *
370
+ * @remarks
371
+ * A blank cell has no node. A formula that reads one - `=A2+1` beside a block of `=$D$1` whose
372
+ * representative is `A1` - is neither in the representative's dependents, which are searched at
373
+ * its own cell, nor ordered after it, so left alone it keeps the value the cell had before the
374
+ * share. The region is handled as a spill's changed extent is: what moved is content other
375
+ * formulas read, and it is re-collected as a dirty region.
376
+ *
377
+ * What moved is the whole region when the shared value differs from the last one, and otherwise
378
+ * the cells that joined the region since (a cleared input turns a touched cell blank, and the
379
+ * run replaces the value it computed for itself). A region nothing reads costs one search per
380
+ * rectangle and no further iteration.
381
+ *
382
+ * @param unmoved The rectangles that already held this value; `null` when every cell moved.
383
+ */
384
+ private _dirtyBlankReaders;
385
+ /**
386
+ * Closes a gated block's gate — for good when `sticky`, for this pass otherwise — and marks its
387
+ * blank region dirty, so the pass's next iteration collects those cells one by one.
388
+ *
389
+ * @remarks
390
+ * A gate closed for good also settles the block's node store: every collection from here on
391
+ * reaches every cell, so the nodes go dense ({@link FormulaSpatialValue.densify}) rather than
392
+ * being minted one by one through the sparse store.
393
+ */
394
+ private _fallbackBlank;
395
+ /**
396
+ * What the pass reads for `node` right now — a member's starting value, before any demand
397
+ * result of its own.
398
+ *
399
+ * @remarks
400
+ * A sparse grid answers `undefined` for a cell it holds nothing for, which is every formula that
401
+ * was entered and has not calculated yet. That is a blank start (`IF(F1="",…)` sees `""`), and
402
+ * blank as a value is `null`: `undefined` is neither a scalar the grid can store nor a demand
403
+ * result, where it means "none" (`doEvaluate` takes `0` for it). A named formula's body is a
404
+ * cell too, at (0,0) of the name's virtual grid.
405
+ *
406
+ * A formula LOADED without a value was never entered, and starts from `""` instead — Excel's
407
+ * start for it, and not blank, so `_demandSweep` gives it no entry evaluation
408
+ * ({@link FormulaSpatialValue.uncalculated}).
156
409
  */
157
- private _writeEarly;
410
+ private _valueOnGrid;
411
+ /**
412
+ * Puts a prefetched node back where the prefetch found it — `Unevaluated`, with nothing its
413
+ * evaluation decided — because that evaluation reached a node still on the stack under it
414
+ * (trap 4b: a prefetch report is not a read, and neither is a prefetched evaluation). The node
415
+ * below finishes first, and this one is evaluated once nothing is suspended under it: from the
416
+ * reader's retry if the reader does read it after all, and from the run's own seed queue
417
+ * otherwise. `Circular` goes too, so a node neither reaches is evaluated by the plan in its own
418
+ * place rather than taking a demand result it never got.
419
+ */
420
+ private _unstartPrefetched;
421
+ /**
422
+ * Puts back the speculative evaluations that are suspended under one just put back, and answers
423
+ * the stack length that leaves. They asked for it, and they were not asked for themselves, so
424
+ * without it none of them can finish — retrying them would ask for it again, and again.
425
+ * Unwinding to the first entry no prefetch put there hands the stack back to an evaluation a
426
+ * READ wants, and what that one asks for next is asked for in earnest: the chain comes back
427
+ * without the flag, and the cycle it reaches is marked.
428
+ */
429
+ private _unwindSpeculative;
158
430
  /** The worklist loop of {@link doDemandEvaluate}; re-entered by a sweep for the nodes a read needs first. */
159
431
  private _demandRun;
160
432
  /**
161
433
  * Marks the started (`Waiting`) nodes on the in-progress stack from `read` up to the top as one
162
434
  * cycle — the slice a `Waiting` read names (design §4.3). A slice touching a member of an
163
- * earlier cycle joins that cycle. The started nodes are on the stack in READ order — each is
164
- * there because the one below it read it, and the reader on top read `read` — so the slice is
165
- * the walk `getPath` answers: each member is linked to the next, the last back to the first.
435
+ * earlier cycle joins that cycle, and one touching several joins them all into one. The started
436
+ * nodes are on the stack in READ order — each is there because the one below it read it, and the
437
+ * reader on top read `read` — so the slice is the walk `getPath` answers: each member is linked
438
+ * to the next, the last back to the first. When the reader reached `read` through a finished
439
+ * member of its cycle, that member is `via` and is the reader's next step instead.
166
440
  * The demand state is left as it is: the caller finishes the members (iteration off) or lets
167
441
  * them run on (iteration on). Returns the stack index of `read`.
168
442
  */
169
443
  private _markCycleSlice;
170
444
  /**
171
- * Iterative calculation (design §6.3) over the members {@link _demandRun} marked, which it
172
- * evaluated once each — sweep 1. Every further sweep re-evaluates them in marking order, each
173
- * read seeing the latest value (Gauss–Seidel, as Excel: `probe-iterative.ps1`), until no member
174
- * moved by `maxChange` or `maxIterations` sweeps ran. The limits are global, as in Excel — one
175
- * unsettled member keeps every cycle of the pass sweeping. Downstream nodes read the members
176
- * once more afterwards; they never feed a cycle, so they need no sweeping. The members are then
177
- * registered as volatile so the next recalculation re-runs them, which is how `=A1+1` advances
178
- * per recalc (Excel re-iterates every cycle on every `Calculate()`).
445
+ * Iterative calculation (design §6.3) over the members {@link _demandRun} marked. Each sweep
446
+ * evaluates them in ADDRESS order, each read seeing the latest value (Gauss–Seidel in row-major
447
+ * order, as Excel: `probe-iterative.ps1`), until no member moved by `maxChange` or
448
+ * `maxIteration` sweeps ran.
449
+ * The limits are global, as in Excel — one unsettled member keeps every cycle of the pass
450
+ * sweeping. Downstream nodes read the members once more afterwards; one that feeds a swept node
451
+ * is swept with them instead (`_onMemberRead`), so the rest feed no cycle and need no sweeping.
452
+ * Converged means a sweep over a list that did not grow moved nothing by `maxChange`: every
453
+ * node a swept node reads is then swept itself or does not move in this pass, so the state is a
454
+ * fixed point and not a fragment's. The members are then registered as volatile so the next
455
+ * recalculation re-runs them, which is how `=A1+1` advances per recalc (Excel re-iterates every
456
+ * cycle on every `Calculate()`).
457
+ *
458
+ * @remarks
459
+ * The evaluation that FOUND the members ran in dependency order — `B1 = B2+1` needs `B2` first,
460
+ * whichever of the two the plan reached first — so its results are not a sweep of this order,
461
+ * and counting them as one costs a step. The members go back to the values the pass found them
462
+ * at; a member that had none is then evaluated once, in address order, for the entry evaluation
463
+ * Excel gave it when it was written (§2.4), and every one of the `maxIteration` sweeps runs on
464
+ * top of that. Discovery's results are never read: a node that read a member is downstream, and
465
+ * evaluates again below.
179
466
  */
180
467
  private _demandSweep;
181
468
  /** Clears the `IterHit` flags of the hits not consumed by {@link _demandRun}'s loop and empties the list. */
@@ -184,7 +471,7 @@ export declare class CalcExecutor {
184
471
  * One evaluation of a `Done` node under iteration, with the read hook armed. A read that
185
472
  * needs a node not yet evaluated (a handed-over node's sweep runs before the batch) runs those
186
473
  * by demand and retries; a `Waiting` read cannot occur (nothing is waiting) and a member's
187
- * result is a value (`_iterRead`), so nothing aborts.
474
+ * result is a value (`_markDownstream`), so nothing aborts.
188
475
  */
189
476
  private _demandEvaluateOne;
190
477
  /**
@@ -221,11 +508,17 @@ export declare class CalcExecutor {
221
508
  * carrying the {@link CycleRole} its reads gave it. Describes the last pass only.
222
509
  */
223
510
  getCircularNodes(): readonly CalcNode[];
224
- /** @internal Demand-pass counters since construction: evaluations and `NeedsFirst` retries. */
511
+ /**
512
+ * @internal
513
+ * Demand-pass counters since construction — evaluations and `NeedsFirst` retries — plus the
514
+ * plan-phase counters and timings (see {@link _planStats}).
515
+ */
225
516
  getDemandStats(): {
226
517
  evaluations: number;
227
518
  retries: number;
228
- };
519
+ } & CalcExecutor.PlanStats;
520
+ /** @internal Zeroes every counter/timing so a measurement window starts clean (`Calculation._resetStats`). */
521
+ resetStats(): void;
229
522
  /**
230
523
  * Collects and marks all volatile CalcNodes.
231
524
  *
@@ -253,6 +546,28 @@ export declare class CalcExecutor {
253
546
  * Uses Kahn's algorithm.
254
547
  */
255
548
  doMarkAndPlan(cycleId: number, markId: number, initial: FixedPackedArray<CalcNode>, plan: FixedPackedArray<CalcNode>, forceDemand?: boolean): boolean;
549
+ /**
550
+ * The remembered plan whose seed set is exactly this pass's, at this epoch — or `null`. The
551
+ * length check first: it is what rejects the common miss (a single-cell pass against a bulk
552
+ * memo) before any node is touched.
553
+ */
554
+ /**
555
+ * Flags `plan[from..to)` for demand evaluation the way the cycle-detection branch does when it
556
+ * appends them: `Circular`, no carried demand value, in the batch and on the roster. Used by
557
+ * the paths that reuse a plan without rebuilding it (the closure memo, the stamp order).
558
+ */
559
+ private _flagDemandAppendix;
560
+ /**
561
+ * Drop both plan caches (§1.2 order stamps and §1.4 whole-closure reuse): nothing they hold is
562
+ * a valid order for the graph any more. The next mark phase plans from scratch and re-stamps.
563
+ */
564
+ protected _invalidatePlans(): void;
565
+ private _matchPlanMemo;
566
+ /**
567
+ * Records this pass's seeds and plan for whole-closure reuse (§1.4). The victim slot is a stale
568
+ * one if there is one, else the least recently used.
569
+ */
570
+ private _rememberPlan;
256
571
  doEvaluate(cycleId: number, getUpdates: (scope: string) => ICalcGrid.IncrementalUpdates, scheduleRecalculation: (cycleId: number, calcNode?: CalcNode) => void, commit: (calcNodes: CalcNode[], calcNodesLength: number) => void, forceFull: boolean, plan: FixedPackedArray<CalcNode>): ISpatialMap | undefined;
257
572
  }
258
573
  export declare namespace CalcExecutor {
@@ -276,7 +591,7 @@ export declare namespace CalcExecutor {
276
591
  }
277
592
  /** The two limits of `ICalculation.IterativeCalculation`. */
278
593
  interface IterateOptions {
279
- maxIterations: number;
594
+ maxIteration: number;
280
595
  maxChange: number;
281
596
  }
282
597
  /** How a cycle's last iterated evaluation ended — what `ICircularReference` answers. */
@@ -285,17 +600,90 @@ export declare namespace CalcExecutor {
285
600
  converged: boolean;
286
601
  /** Sweeps run, the first evaluation included. */
287
602
  iterationCount: number;
288
- /** The largest change any member made in the last sweep. */
603
+ /**
604
+ * The largest change THIS cycle's members made in the last sweep.
605
+ *
606
+ * @remarks
607
+ * Convergence is global, as Excel has it — one unsettled member keeps every cycle of the pass
608
+ * sweeping — but the number a tooltip shows is the asking cycle's own, or A4 reports the 9.8
609
+ * that A5 moved while it moved 0.98.
610
+ */
289
611
  lastChange: number;
612
+ /**
613
+ * The same, for the sweep BEFORE the last — `NaN` when there was only one.
614
+ *
615
+ * @remarks
616
+ * Two numbers say something one cannot: a run that stopped on the cap while still shrinking is
617
+ * a `maxIteration` that is too low, and one whose change is flat or growing does not settle at
618
+ * any cap. The sweep has both in hand; nothing else can recover the second.
619
+ */
620
+ previousChange: number;
290
621
  }
291
622
  /** Snapshot of Calculation's persistent state for one pass */
292
623
  interface ExecuteState {
293
- gridsAll: Map<string, ICalcGrid>;
624
+ gridsAll: Map<string, CalcGridBackend>;
294
625
  formulaSpatial: ISpatialMap3D<FormulaSpatialValue>;
295
626
  dirtySpatial: ISpatialMap3D;
296
627
  /** Volatiles accumulated before this cycle — drained and cleared by execute() */
297
628
  oldVolatiles: Set<CalcNode>;
298
629
  }
630
+ /** A remembered fully-ordered pass for whole-closure reuse (§1.4) — see `CalcExecutor._planMemos`. */
631
+ interface PlanMemo {
632
+ seeds: CalcNode[];
633
+ seedsLength: number;
634
+ plan: CalcNode[];
635
+ planLength: number;
636
+ /** The `precedentEpoch` the plan was made at; `-1` = empty. */
637
+ epoch: number;
638
+ /** `CalcExecutor._planMemoClock` when last written or matched — the LRU key for slot recycling. */
639
+ used: number;
640
+ /** No node of the plan was shown in a cycle (or downstream of one) when the plan was made. */
641
+ cycleFree: boolean;
642
+ /** `CalcExecutor._cycleEpoch` when the plan was made; a hit requires it unchanged. */
643
+ cycleEpoch: number;
644
+ /**
645
+ * Index of the first demand-appendix node in `plan` — `planLength` when the plan was fully
646
+ * ordered. A hit re-flags `plan[demandStart..planLength)` for demand evaluation.
647
+ */
648
+ demandStart: number;
649
+ }
650
+ /** Plan-phase counters and timings — see `CalcExecutor.planCacheMode` and performance plan §1.6. */
651
+ interface PlanStats {
652
+ /** In-degree formula lookups answered by the single-entry block cache. */
653
+ formulaCacheHits: number;
654
+ formulaCacheMisses: number;
655
+ /** doMarkAndPlan invocations. */
656
+ passes: number;
657
+ /** Passes whose whole affected set carried valid order stamps (fast-path candidates). */
658
+ fastEligible: number;
659
+ /** Eligible passes that actually skipped in-degree + Kahn (`'on'` mode only). */
660
+ fastHits: number;
661
+ /** Passes whose seed set and precedent epoch matched the last plan (§1.4 candidates). */
662
+ closureEligible: number;
663
+ /** Closure-eligible passes that reused the last plan verbatim, skipping discovery too (`'on'` only). */
664
+ closureHits: number;
665
+ /** `'assert'` mode: closure-eligible passes whose fresh affected set differed from the last plan. */
666
+ closureAssertFailures: number;
667
+ /** Fully-ordered plans that wrote order stamps. */
668
+ stampedPlans: number;
669
+ /** `'assert'` mode: eligible passes whose stamp order contradicted a real static edge. */
670
+ planAssertFailures: number;
671
+ /** `'assert'` mode: cached `dependents` that did not match a fresh search. */
672
+ dependentsAssertFailures: number;
673
+ /** Discovery searches skipped (or verified) because `dependentsEpoch` was current. */
674
+ dependentsCacheHits: number;
675
+ dependentsCacheMisses: number;
676
+ /**
677
+ * Nodes evaluated on the ORDERED path (`evaluateAt` from `doEvaluate`); `evaluations` counts
678
+ * the demand path. Their sum is every formula run — what blank-aware evaluation
679
+ * (PLAN-WATCHES-BLANK-AWARE §4) reduces to the touched cells plus one.
680
+ */
681
+ evaluated: number;
682
+ discoveryMs: number;
683
+ inDegreeMs: number;
684
+ kahnMs: number;
685
+ evaluateMs: number;
686
+ }
299
687
  /** Updated spatial maps and committed grid batches returned to Calculation */
300
688
  interface ExecuteResult {
301
689
  precedentSpatial: ISpatialMap3D<PrecedentSpatialValue>;
@@ -3,6 +3,11 @@ import { Tuple, ISpatialMap } from '../../collections';
3
3
  import { CalcSignal } from '../../primitives/CalcSignal';
4
4
  import { CalcNode } from '../state';
5
5
  import { PrecedentSpatialValue, FormulaSpatialValue } from '../spatial';
6
+ /**
7
+ * Visits the nodes of `block` a discovery walk reaches inside a rectangle (absolute, clipped to the
8
+ * block), minting those it decides the pass needs.
9
+ */
10
+ export type MintWindow = (block: FormulaSpatialValue, rowFrom: number, rowTo: number, colFrom: number, colTo: number, fn: (calc: CalcNode) => void) => void;
6
11
  /**
7
12
  * Raised from a read that landed on unorderable nodes not yet evaluated: the reader is suspended,
8
13
  * `nodes` are evaluated first, and the reader is retried from scratch.
@@ -33,10 +38,46 @@ export declare class DownstreamSignal extends CalcSignal {
33
38
  readonly node: CalcNode;
34
39
  constructor(node: CalcNode);
35
40
  }
36
- export declare function rangeToTuples(range: IRange, offsetMajor?: number, offsetMinor?: number): Tuple.BoundedTuples<Scalar>;
41
+ export declare function rangeToTuples(range: IRange, offsetMajor?: number, offsetMinor?: number): Tuple.Region<Scalar>;
42
+ /**
43
+ * Fits a result to a fixed (array-entered) extent, per dimension: a dimension of 1 broadcasts, a
44
+ * longer one is clipped, a shorter one is padded with `#N/A`. Measured against Excel
45
+ * (`probe-cse.ps1`): `=SEQUENCE(5)` into 3 rows is `1,2,3`; `=SEQUENCE(2)` into 5 rows is
46
+ * `1,2,#N/A,#N/A,#N/A`; `=SUM(H1:H5)` into 3x3 is the sum nine times; a 1x3 into 3x3 repeats the
47
+ * row; a 3x1 into 3x3 repeats the column.
48
+ *
49
+ * @returns The fitted values, row-major, exactly `rowCount` x `colCount`. A blank source cell stays
50
+ * blank (`null`), as it does when a dynamic array spills. The fit is a fixed point - fitting the
51
+ * result again yields the same shape - so nothing downstream needs a "do not resize" guard.
52
+ */
53
+ export declare function fitToExtent(value: Scalar | IRange, rowCount: number, colCount: number): Scalar[][];
54
+ /**
55
+ * {@link fitToExtent} as grid tuples over `coords`, in the orientation of the grid they are written
56
+ * to. `null` when every fitted cell is blank.
57
+ */
58
+ export declare function fitToTuples(value: Scalar | IRange, coords: IRange.Coords, isColumn: boolean): Tuple.Region<Scalar> | null;
37
59
  /**
38
60
  * TODO - document and/or rationalize with visitPrecedentBlock
39
61
  */
40
- export declare function visitDependencyBlock(depEntry: ISpatialMap.Entry<PrecedentSpatialValue>, rowIndex: number, colIndex: number, callbackFn: (calc: CalcNode) => void): void;
62
+ export declare function visitDependencyBlock(depEntry: ISpatialMap.Entry<PrecedentSpatialValue>, rowIndex: number, colIndex: number, callbackFn: (calc: CalcNode) => void, mint?: MintWindow | null): void;
63
+ /**
64
+ * Visit the cells of a dependent block that read a spill's BODY — the extent an anchor at
65
+ * (`anchorRow`, `anchorCol`) occupies, MINUS the anchor cell itself.
66
+ *
67
+ * @remarks
68
+ * A spill's body cells are written by the anchor but hold no formula of their own, so a reader
69
+ * that never touches the anchor (`=B4` against a `B2` spill) is invisible to both the precedent
70
+ * index — keyed at the anchor — and `formulaSpatial`, which knows nothing about the body. The
71
+ * anchor stands in for its whole extent here, which is what makes such a reader both DIRTY and
72
+ * ORDERED after it.
73
+ *
74
+ * The anchor cell is excluded because {@link visitDependencyBlock} at the anchor already answers
75
+ * for it: the two together cover the extent exactly once, which is what keeps the in-degree phase
76
+ * and Kahn's decrement in balance. The exclusion is per FORMULA CELL, not per entry — one entry
77
+ * can hold a block whose cells straddle the anchor (`D1=B2`, `D2=B3`) — and it applies only when
78
+ * the anchor is inside the entry at all, since an entry that does not cover the anchor was never
79
+ * in the anchor's dependents to begin with.
80
+ */
81
+ export declare function visitSpillBodyBlock(depEntry: ISpatialMap.Entry<PrecedentSpatialValue>, anchorRow: number, anchorCol: number, extentRowEnd: number, extentColEnd: number, callbackFn: (calc: CalcNode) => void, mint?: MintWindow | null): void;
41
82
  export declare function valueCompareValues(a: ISpatialMap.Entry<FormulaSpatialValue>, removing: ISpatialMap.Entry<FormulaSpatialValue>): boolean;
42
83
  //# sourceMappingURL=CalcExecutorUtils.d.ts.map
@@ -72,6 +72,8 @@ export declare class CircularReference implements ICalculation.ICircularReferenc
72
72
  getIterationCount(): number;
73
73
  /** @inheritdoc ICalculation.ICircularReference.getLastChange */
74
74
  getLastChange(): number;
75
+ /** @inheritdoc ICalculation.ICircularReference.getPreviousChange */
76
+ getPreviousChange(): number;
75
77
  /** The members still on the graph, in row-major order (virtual grids first, then by sheet). */
76
78
  protected _liveMembers(): CalcNode[];
77
79
  protected _countLive(nodes: Set<CalcNode>): number;