@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.
- package/THIRD-PARTY-NOTICES.md +1 -1
- package/browser/esm/{DBIu6NUHIcxOOBQp.mjs → BEAY9XgKNx-bakXW.mjs} +2 -2
- package/browser/esm/BbSmt62FpFIpoVzu.mjs +392 -0
- package/browser/esm/BcHmrKHwMMOlzc9_.mjs +357 -0
- package/browser/esm/BgcZ-CoTbMfmyDJL.mjs +412 -0
- package/browser/esm/Bk7xxbdDpa7-sIwd.mjs +7 -0
- package/browser/esm/BqskM7wA8oPfFQue.mjs +20 -0
- package/browser/esm/Btg43M1Bf-ENDreu.mjs +540 -0
- package/browser/esm/BzLfNyc6OOShIErH.mjs +598 -0
- package/browser/esm/C9B0djuUarfNdoj0.mjs +466 -0
- package/browser/esm/{CHSahmMFYNB0Ajkf.mjs → CSx9ed1JOs7K5BXO.mjs} +2 -2
- package/browser/esm/CYyv6uGjo10ig5FP.mjs +142 -0
- package/browser/esm/CZ5oa92wZEAXebgk.mjs +622 -0
- package/browser/esm/CdLZWVcH8cncBUPJ.mjs +849 -0
- package/browser/esm/Cgd5BnM3hg9RyUel.mjs +171 -0
- package/browser/esm/CjsUGJEQSbGjnH6R.mjs +1001 -0
- package/browser/esm/ClB5ix51roQOpZEr.mjs +7402 -0
- package/browser/esm/{CKk58ZLcrllMzfou.mjs → Cqr3knDsBvoVZ6MN.mjs} +179 -202
- package/browser/esm/D4uVlrG0xEFctsSM.mjs +905 -0
- package/browser/esm/DOMHmhYzPcLVcpAW.mjs +7 -0
- package/browser/esm/DUvUK61b2_4pf4tG.mjs +484 -0
- package/browser/esm/De175LygU7ot4nQm.mjs +441 -0
- package/browser/esm/DhKkrCVASZ6Isvz6.mjs +527 -0
- package/browser/esm/Di58Ji1n--3Mgc_2.mjs +607 -0
- package/browser/esm/Dtoyt8q5RyGAlxCp.mjs +1141 -0
- package/browser/esm/Y79I7Sm8kjaYexhf.mjs +167 -0
- package/browser/esm/index.mjs +1472 -1023
- package/browser/esm/o8MFgcVXns987D6_.mjs +400 -0
- package/browser/esm/zqJOaweiXE9D8RY1.mjs +66681 -0
- package/licenses/dependencies.txt +209 -209
- package/node/esm/B6D7sSetrcOWLsKj.mjs +1135 -0
- package/node/esm/B9ljpEIZg6wOTzRE.mjs +142 -0
- package/node/esm/BH1v-E4Ro3bR7Znw.mjs +962 -0
- package/node/esm/BN9j8V9gCExMjVtJ.mjs +540 -0
- package/node/esm/{DUYP6faJJHCaW1Xf.mjs → Bh4dv6tMjXX3X4nI.mjs} +1 -1
- package/node/esm/Bqd62L8KFgdS0Vou.mjs +7 -0
- package/node/esm/Bsx9uijd4X_SKV3L.mjs +360 -0
- package/node/esm/BtuY37FumvLE7EBo.mjs +629 -0
- package/node/esm/C6ZXsNyLXI6zA63X.mjs +402 -0
- package/node/esm/CCouEwT37f08qO3V.mjs +7 -0
- package/node/esm/CD9wbvufChVYYkrI.mjs +451 -0
- package/node/esm/CImNvdz1iP-lUlro.mjs +610 -0
- package/node/esm/CT0CN82y0_Qgoryk.mjs +7568 -0
- package/node/esm/CUQi5ZtMO02nhG0W.mjs +596 -0
- package/node/esm/CUUoseJmFsCf82bb.mjs +28 -0
- package/node/esm/CnSQ7MTXAUAyBOoS.mjs +911 -0
- package/node/esm/D7MfcID2Wf6l6VpC.mjs +171 -0
- package/node/esm/DCplLG93GfTs1vNw.mjs +1860 -0
- package/node/esm/DHUADiCmxNQS1ARz.mjs +417 -0
- package/node/esm/DMD12JUh7HJw2-jl.mjs +638 -0
- package/node/esm/DdFgXl-Ux2cMBTs_.mjs +15 -0
- package/node/esm/DefYISWfdZJFx57m.mjs +255 -0
- package/node/esm/Ds0d8zXzmgOu3MGx.mjs +403 -0
- package/node/esm/MiU4rDOiocmJ-9Ry.mjs +1783 -0
- package/node/esm/index.mjs +49153 -36824
- package/package.json +15 -16
- package/resources/contents.json +64 -0
- package/resources/fonts/arial-bold-italic.metrics.json +139 -0
- package/resources/fonts/arial-bold.metrics.json +139 -0
- package/resources/fonts/arial-italic.metrics.json +139 -0
- package/resources/fonts/arial-regular.metrics.json +139 -0
- package/resources/fonts/calibri-bold-italic.metrics.json +137 -0
- package/resources/fonts/calibri-bold.metrics.json +137 -0
- package/resources/fonts/calibri-italic.metrics.json +137 -0
- package/resources/fonts/calibri-regular.metrics.json +137 -0
- package/resources/fonts/cambria-bold-italic.metrics.json +66 -0
- package/resources/fonts/cambria-bold.metrics.json +66 -0
- package/resources/fonts/cambria-italic.metrics.json +66 -0
- package/resources/fonts/cambria-regular.metrics.json +66 -0
- package/resources/fonts/contents.json +126 -0
- package/resources/fonts/courier-new-bold-italic.metrics.json +143 -0
- package/resources/fonts/courier-new-bold.metrics.json +143 -0
- package/resources/fonts/courier-new-italic.metrics.json +143 -0
- package/resources/fonts/courier-new-regular.metrics.json +143 -0
- package/resources/fonts/times-new-roman-bold-italic.metrics.json +141 -0
- package/resources/fonts/times-new-roman-bold.metrics.json +141 -0
- package/resources/fonts/times-new-roman-italic.metrics.json +143 -0
- package/resources/fonts/times-new-roman-regular.metrics.json +141 -0
- package/resources/locales/de/model.msg.json +112 -12
- package/resources/locales/en/model.msg.json +119 -13
- package/types/scripting-api.json +8048 -0
- package/types/scripting-enums.json +277 -106
- package/types/scripting.d.ts +18126 -7971
- package/types/src/anchored/AbstractAnchored.d.ts +18 -8
- package/types/src/anchored/AnchoredMap.d.ts +2 -0
- package/types/src/anchored/IAnchoredMap.d.ts +52 -4
- package/types/src/autoFill/AutoFill.d.ts +316 -32
- package/types/src/autoFill/IAutoFill.d.ts +232 -15
- package/types/src/border/{IBorder.d.ts → IBorders.d.ts} +42 -41
- package/types/src/border/index.d.ts +1 -1
- package/types/src/calculation/Calculation.d.ts +759 -49
- package/types/src/calculation/ExternalBookBindings.d.ts +118 -0
- package/types/src/calculation/FormulaText.d.ts +82 -0
- package/types/src/calculation/ICalculation.d.ts +318 -81
- package/types/src/calculation/INamedFormulasCollection.d.ts +5 -8
- package/types/src/calculation/NamedFormulaCollection.d.ts +139 -107
- package/types/src/calculation/NamedLambdaFunction.d.ts +28 -0
- package/types/src/calculation/TokenType.d.ts +9 -0
- package/types/src/calculation/Types.d.ts +83 -2
- package/types/src/calculation/_CloneBoundary.d.ts +80 -0
- package/types/src/calculation/_TableRename.d.ts +13 -0
- package/types/src/calculation/compiler/ASTTypes.d.ts +71 -0
- package/types/src/calculation/compiler/CompilerUtils.d.ts +135 -44
- package/types/src/calculation/compiler/FormulaCompiler.d.ts +29 -4
- package/types/src/calculation/compiler/FormulaParser.d.ts +1 -2
- package/types/src/calculation/compiler/LiteTransform.d.ts +17 -0
- package/types/src/calculation/compiler/ParserUtils.d.ts +26 -1
- package/types/src/calculation/compiler/SRParser.d.ts +2 -1
- package/types/src/calculation/compiler/Types.d.ts +79 -9
- package/types/src/calculation/executor/CalcExecutor.d.ts +422 -34
- package/types/src/calculation/executor/CalcExecutorUtils.d.ts +43 -2
- package/types/src/calculation/executor/CircularReference.d.ts +2 -0
- package/types/src/calculation/formula/Formula.d.ts +58 -21
- package/types/src/calculation/formula/FormulaBlock.d.ts +125 -23
- package/types/src/calculation/formula/FormulaRecordView.d.ts +79 -0
- package/types/src/calculation/formula/FunctionValues.d.ts +10 -0
- package/types/src/calculation/formula/IFormulaBlock.d.ts +261 -67
- package/types/src/calculation/formula/LambdaValue.d.ts +46 -23
- package/types/src/calculation/formula/LazyValue.d.ts +96 -0
- package/types/src/calculation/formula/TokenUtils.d.ts +25 -1
- package/types/src/calculation/formula/index.d.ts +1 -0
- package/types/src/calculation/functions/FunctionDeclarations.d.ts +31 -0
- package/types/src/calculation/functions/Operators.d.ts +8 -0
- package/types/src/calculation/functions/initializeFunctions.d.ts +15 -2
- package/types/src/calculation/grid/CalcGrid.d.ts +407 -158
- package/types/src/calculation/grid/CalcGridBackend.d.ts +493 -0
- package/types/src/calculation/grid/CalcGridProxy.d.ts +133 -0
- package/types/src/calculation/grid/CalcGridUtils.d.ts +62 -12
- package/types/src/calculation/grid/FormulaEntry.d.ts +129 -0
- package/types/src/calculation/grid/FormulaHost.d.ts +239 -0
- package/types/src/calculation/grid/ICalcGrid.d.ts +499 -141
- package/types/src/calculation/grid/_CalcRequest.d.ts +289 -0
- package/types/src/calculation/grid/index.d.ts +4 -0
- package/types/src/calculation/index.d.ts +2 -0
- package/types/src/calculation/spatial/ContentfulSpatialValue.d.ts +6 -2
- package/types/src/calculation/spatial/FormulaSpatialValue.d.ts +339 -11
- package/types/src/calculation/spatial/SpillEntry.d.ts +20 -5
- package/types/src/calculation/spatial/TouchedWindows.d.ts +86 -0
- package/types/src/calculation/spatial/index.d.ts +1 -0
- package/types/src/calculation/state/CalcInputs.d.ts +41 -0
- package/types/src/calculation/state/CalcNode.d.ts +160 -29
- package/types/src/calculation/state/CalcScope.d.ts +37 -0
- package/types/src/calculation/state/CalcState.d.ts +22 -1
- package/types/src/calculation/state/CalculationContext.d.ts +53 -4
- package/types/src/calculation/state/IContextContainer.d.ts +159 -26
- package/types/src/calculation/state/_PendingOverlayGrid.d.ts +163 -0
- package/types/src/calculation/state/_ReadObservedGrid.d.ts +74 -8
- package/types/src/calculation/state/index.d.ts +1 -0
- package/types/src/calculation/symbol/ExternalSheetSymbols.d.ts +80 -0
- package/types/src/calculation/symbol/ISymbolRegistry.d.ts +23 -0
- package/types/src/calculation/symbol/IndirectSymbolProvider.d.ts +16 -2
- package/types/src/calculation/symbol/SheetSymbolProvider.d.ts +63 -3
- package/types/src/calculation/symbol/SymbolRegistry.d.ts +20 -0
- package/types/src/calculation/symbol/index.d.ts +3 -2
- package/types/src/cell/ICell.d.ts +104 -29
- package/types/src/cell/ICellHeader.d.ts +24 -2
- package/types/src/cell/ICellProtection.d.ts +50 -10
- package/types/src/cellRange/ICellRange.d.ts +458 -97
- package/types/src/cellRange/ICellRanges.d.ts +23 -21
- package/types/src/chart/Chart.d.ts +41 -13
- package/types/src/chart/ChartCollection.d.ts +26 -0
- package/types/src/chart/IChart.d.ts +166 -12
- package/types/src/chart/IChartCollection.d.ts +25 -0
- package/types/src/chart/_ChartXml.d.ts +70 -0
- package/types/src/chart/index.d.ts +1 -3
- package/types/src/collections/ArraysGrid.d.ts +1 -1
- package/types/src/collections/IGrid.d.ts +1 -1
- package/types/src/collections/ISparseGrid.d.ts +9 -0
- package/types/src/collections/ISpatialMap.d.ts +59 -21
- package/types/src/collections/ImmutableList.d.ts +28 -0
- package/types/src/collections/MixedTypedArrayList.d.ts +168 -108
- package/types/src/collections/OverlappingRangeIterator.d.ts +13 -17
- package/types/src/collections/RepeatingList.d.ts +7 -0
- package/types/src/collections/ScalarGrid.d.ts +50 -0
- package/types/src/collections/SparseGrid.d.ts +1 -1
- package/types/src/collections/SpatialMap.d.ts +13 -21
- package/types/src/collections/Tuple.d.ts +128 -16
- package/types/src/collections/_GridUtils.d.ts +19 -6
- package/types/src/collections/_RangeSweep.d.ts +97 -0
- package/types/src/collections/_SpatialUtils.d.ts +20 -2
- package/types/src/collections/index.d.ts +1 -0
- package/types/src/color/_BuiltInIndexDefs.d.ts +6 -0
- package/types/src/comment/Comment.d.ts +223 -0
- package/types/src/comment/CommentCollection.d.ts +40 -0
- package/types/src/comment/IComment.d.ts +340 -50
- package/types/src/comment/ICommentCollection.d.ts +90 -0
- package/types/src/comment/NoteMovable.d.ts +26 -0
- package/types/src/comment/_CommentUtils.d.ts +50 -0
- package/types/src/comment/_NoteBox.d.ts +50 -0
- package/types/src/comment/index.d.ts +1 -0
- package/types/src/condition/AnchoredConditional.d.ts +82 -17
- package/types/src/condition/BuiltInOperators/AbstractOperator.d.ts +42 -12
- package/types/src/condition/BuiltInOperators/AfterEqualToOperator.d.ts +2 -0
- package/types/src/condition/BuiltInOperators/AfterOperator.d.ts +2 -0
- package/types/src/condition/BuiltInOperators/AndOperator.d.ts +3 -1
- package/types/src/condition/BuiltInOperators/AverageOperator.d.ts +2 -0
- package/types/src/condition/BuiltInOperators/BeforeEqualToOperator.d.ts +2 -0
- package/types/src/condition/BuiltInOperators/BeforeOperator.d.ts +2 -0
- package/types/src/condition/BuiltInOperators/BetweenOperator.d.ts +2 -0
- package/types/src/condition/BuiltInOperators/ColorOperator.d.ts +4 -0
- package/types/src/condition/BuiltInOperators/ContainsOperator.d.ts +2 -0
- package/types/src/condition/BuiltInOperators/EndsWithOperator.d.ts +2 -0
- package/types/src/condition/BuiltInOperators/EqualToOperator.d.ts +4 -1
- package/types/src/condition/BuiltInOperators/ExpressionOperator.d.ts +5 -6
- package/types/src/condition/BuiltInOperators/GreaterThanEqualToOperator.d.ts +2 -0
- package/types/src/condition/BuiltInOperators/GreaterThanOperator.d.ts +2 -0
- package/types/src/condition/BuiltInOperators/IconOperator.d.ts +4 -0
- package/types/src/condition/BuiltInOperators/InSetOperator.d.ts +22 -5
- package/types/src/condition/BuiltInOperators/LessThanEqualToOperator.d.ts +2 -0
- package/types/src/condition/BuiltInOperators/LessThanOperator.d.ts +2 -0
- package/types/src/condition/BuiltInOperators/NotOperator.d.ts +2 -0
- package/types/src/condition/BuiltInOperators/OrOperator.d.ts +3 -1
- package/types/src/condition/BuiltInOperators/StartsWithOperator.d.ts +2 -0
- package/types/src/condition/BuiltInOperators/TimePeriodOperator.d.ts +2 -0
- package/types/src/condition/BuiltInOperators/TopNOperator.d.ts +6 -0
- package/types/src/condition/BuiltinSelectors/BaseSelector.d.ts +21 -6
- package/types/src/condition/BuiltinSelectors/DateSelector.d.ts +4 -5
- package/types/src/condition/BuiltinSelectors/DisplaySelector.d.ts +20 -0
- package/types/src/condition/BuiltinSelectors/TextLengthSelector.d.ts +7 -5
- package/types/src/condition/BuiltinSelectors/TimeSelector.d.ts +3 -5
- package/types/src/condition/BuiltinSelectors/WholeSelector.d.ts +3 -5
- package/types/src/condition/BuiltinSelectors/index.d.ts +12 -6
- package/types/src/condition/Condition.d.ts +19 -1
- package/types/src/condition/ICondition.d.ts +293 -73
- package/types/src/condition/_ConditionFormula.d.ts +152 -0
- package/types/src/condition/_ConditionUtils.d.ts +167 -13
- package/types/src/conditionalFormat/ConditionalEntry.d.ts +3 -3
- package/types/src/conditionalFormat/ConditionalFormat.d.ts +25 -14
- package/types/src/conditionalFormat/ConditionalFormatCollection.d.ts +19 -8
- package/types/src/conditionalFormat/IConditionalFormat.d.ts +12 -10
- package/types/src/conditionalFormat/IConditionalFormatCollection.d.ts +2 -0
- package/types/src/dataValidation/DataValidation.d.ts +69 -3
- package/types/src/dataValidation/DataValidationCollection.d.ts +20 -9
- package/types/src/dataValidation/IDataValidation.d.ts +149 -30
- package/types/src/dataValidation/IDataValidationCollection.d.ts +10 -2
- package/types/src/date/DateUtils.d.ts +20 -0
- package/types/src/date/_DateUtils.d.ts +91 -7
- package/types/src/externalBook/ExternalBookCollection.d.ts +145 -12
- package/types/src/externalBook/ExternalBookName.d.ts +96 -0
- package/types/src/externalBook/IExternalBook.d.ts +170 -18
- package/types/src/externalBook/IExternalBookCollection.d.ts +79 -7
- package/types/src/externalBook/index.d.ts +1 -0
- package/types/src/{lib/file → file}/file.browser.d.ts +22 -8
- package/types/src/{lib/file → file}/file.node.d.ts +7 -2
- package/types/src/fill/IEffect.d.ts +5 -5
- package/types/src/fill/IFill.d.ts +123 -78
- package/types/src/fill/IStroke.d.ts +190 -64
- package/types/src/fill/RectAlignment.d.ts +20 -0
- package/types/src/fill/_Fills.d.ts +187 -0
- package/types/src/fill/_Stroke.d.ts +89 -0
- package/types/src/fill/index.d.ts +1 -0
- package/types/src/filter/IFilter.d.ts +188 -5
- package/types/src/font/AdvanceBuilder.d.ts +25 -0
- package/types/src/font/AdvanceTable.d.ts +114 -0
- package/types/src/font/FontCollection.d.ts +57 -0
- package/types/src/font/IFont.d.ts +17 -0
- package/types/src/font/IFontCollection.d.ts +120 -22
- package/types/src/font/TableFileAdvanceBuilder.d.ts +27 -0
- package/types/src/font/_BuiltinFontTables.d.ts +10 -0
- package/types/src/font/index.d.ts +4 -1
- package/types/src/group/Group.d.ts +136 -0
- package/types/src/group/GroupMovableCollection.d.ts +37 -0
- package/types/src/group/IGroup.d.ts +129 -0
- package/types/src/group/index.d.ts +2 -0
- package/types/src/history/IHistory.d.ts +3 -2
- package/types/src/hyperlink/IHyperlink.d.ts +13 -0
- package/types/src/hyperlink/_Hyperlink.d.ts +5 -1
- package/types/src/i18n/LanguagePack.d.ts +12 -4
- package/types/src/index.d.ts +5 -0
- package/types/src/io/AbstractBackingStore.d.ts +24 -1
- package/types/src/io/ArrayBackingStore.d.ts +1 -1
- package/types/src/io/EmbeddedPart.d.ts +20 -0
- package/types/src/io/IEmbeddedPart.d.ts +63 -0
- package/types/src/io/IWorkbookIO.d.ts +185 -18
- package/types/src/io/WorkbookIO.d.ts +9 -0
- package/types/src/io/WorkbookOrigin.d.ts +20 -11
- package/types/src/io/WorkbookOriginProvider.d.ts +46 -0
- package/types/src/io/_XmlFragment.d.ts +49 -0
- package/types/src/io/index.d.ts +1 -0
- package/types/src/license/LicenseDetails.d.ts +1 -0
- package/types/src/license/LicenseManager.d.ts +4 -1
- package/types/src/license/Types.d.ts +38 -0
- package/types/src/license/_Utils.d.ts +22 -0
- package/types/src/license/details.d.ts +24 -0
- package/types/src/license/license-key.d.ts +49 -2
- package/types/src/license/runtime.browser.d.ts +41 -0
- package/types/src/{lib/utils/utils.node.d.ts → license/runtime.node.d.ts} +9 -12
- package/types/src/listener/IListener.d.ts +12 -7
- package/types/src/listener/ListenerEmitter.d.ts +46 -5
- package/types/src/model/AbstractModel.d.ts +14 -5
- package/types/src/movable/AbstractMovableContent.d.ts +182 -0
- package/types/src/movable/CustomElement.d.ts +4 -5
- package/types/src/movable/ErrorContent.d.ts +49 -0
- package/types/src/movable/FormControl.d.ts +285 -0
- package/types/src/movable/GroupMember.d.ts +87 -0
- package/types/src/movable/ICustomElement.d.ts +7 -2
- package/types/src/movable/IErrorContent.d.ts +23 -0
- package/types/src/movable/IFormControl.d.ts +455 -0
- package/types/src/movable/IMovable.d.ts +378 -46
- package/types/src/movable/IMovableCollection.d.ts +63 -3
- package/types/src/movable/Movable.d.ts +149 -49
- package/types/src/movable/MovableCollection.d.ts +15 -8
- package/types/src/movable/MovableContentRegistry.d.ts +113 -0
- package/types/src/movable/_BuiltInContents.d.ts +14 -0
- package/types/src/movable/_ContentFactory.d.ts +35 -0
- package/types/src/movable/_DrawnBounds.d.ts +37 -0
- package/types/src/movable/_InsertableCollection.d.ts +28 -0
- package/types/src/movable/_MovableUtils.d.ts +5 -0
- package/types/src/movable/_PendingContent.d.ts +25 -0
- package/types/src/movable/_PlacementUtils.d.ts +55 -0
- package/types/src/movable/_RotatedFrame.d.ts +20 -0
- package/types/src/movable/index.d.ts +7 -1
- package/types/src/named/AbstractNamed.d.ts +1 -1
- package/types/src/named/INamed.d.ts +4 -1
- package/types/src/named/INamedCollection.d.ts +26 -0
- package/types/src/named/NamedCollection.d.ts +16 -15
- package/types/src/numFmt/BuiltInFormats.d.ts +20 -7
- package/types/src/numFmt/IFormatEngine.d.ts +2 -0
- package/types/src/numFmt/NumfmtFormatEngine.d.ts +2 -0
- package/types/src/numFmt/_FormatCell.d.ts +11 -2
- package/types/src/numFmt/_NumFmtUtils.d.ts +0 -1
- package/types/src/numFmt/vendor/numfmt/_sheetxl.d.ts +6 -0
- package/types/src/outline/IOutline.d.ts +186 -0
- package/types/src/outline/Outline.d.ts +157 -0
- package/types/src/outline/index.d.ts +2 -0
- package/types/src/person/IPerson.d.ts +99 -0
- package/types/src/person/IPersonCollection.d.ts +51 -0
- package/types/src/person/Person.d.ts +32 -0
- package/types/src/person/PersonCollection.d.ts +49 -0
- package/types/src/person/index.d.ts +4 -0
- package/types/src/picture/IPicture.d.ts +33 -3
- package/types/src/picture/Picture.d.ts +33 -13
- package/types/src/pivot/IPivotTable.d.ts +72 -0
- package/types/src/pivot/IPivotTableCollection.d.ts +25 -0
- package/types/src/pivot/PivotCache.d.ts +34 -0
- package/types/src/pivot/PivotTable.d.ts +61 -0
- package/types/src/pivot/PivotTableCollection.d.ts +25 -0
- package/types/src/pivot/_PivotXml.d.ts +24 -0
- package/types/src/pivot/index.d.ts +6 -0
- package/types/src/primitives/CompositeRangeStats.d.ts +2 -0
- package/types/src/primitives/Criteria.d.ts +1 -1
- package/types/src/primitives/Grouping.d.ts +65 -0
- package/types/src/primitives/LambdaBrand.d.ts +26 -0
- package/types/src/primitives/PrimitiveUtils.d.ts +60 -21
- package/types/src/primitives/Range.d.ts +136 -26
- package/types/src/primitives/RangeStats.d.ts +30 -2
- package/types/src/primitives/ReferenceRange.d.ts +44 -0
- package/types/src/primitives/Runtime.d.ts +15 -2
- package/types/src/primitives/environment.browser.d.ts +9 -0
- package/types/src/primitives/environment.node.d.ts +10 -0
- package/types/src/primitives/stats/AggregateStats.d.ts +49 -15
- package/types/src/primitives/stats/Cancellation.d.ts +13 -0
- package/types/src/primitives/stats/FrequencyStats.d.ts +10 -1
- package/types/src/primitives/stats/LookupIndex.d.ts +46 -0
- package/types/src/primitives/stats/Ranked.d.ts +1 -1
- package/types/src/primitives/stats/SortedNumbers.d.ts +4 -2
- package/types/src/primitives/stats/index.d.ts +1 -0
- package/types/src/print/IPrint.d.ts +0 -22
- package/types/src/protectedRange/IProtectedRange.d.ts +4 -0
- package/types/src/protectedRange/IProtectedRangeCollection.d.ts +2 -0
- package/types/src/protectedRange/ProtectedRange.d.ts +1 -4
- package/types/src/protectedRange/ProtectedRangeCollection.d.ts +19 -8
- package/types/src/protection/DefaultProtection.d.ts +12 -1
- package/types/src/protection/IProtection.d.ts +36 -2
- package/types/src/reference/ReferenceUtils.d.ts +80 -0
- package/types/src/reference/index.d.ts +2 -0
- package/types/src/resource/IResource.d.ts +21 -1
- package/types/src/resource/IResourceCollection.d.ts +9 -1
- package/types/src/resource/ResourceCollection.d.ts +6 -6
- package/types/src/scripting/FunctionArguments.d.ts +22 -0
- package/types/src/scripting/FunctionCollection.d.ts +49 -15
- package/types/src/scripting/IFunctionCollection.d.ts +62 -32
- package/types/src/scripting/IModule.d.ts +25 -0
- package/types/src/scripting/IModuleCollection.d.ts +17 -0
- package/types/src/scripting/IScript.d.ts +28 -26
- package/types/src/scripting/Module.d.ts +34 -6
- package/types/src/scripting/ModuleCollection.d.ts +17 -12
- package/types/src/scripting/Runtime.d.ts +15 -0
- package/types/src/scripting/Scripts.d.ts +3 -7
- package/types/src/scripting/TypedFunction.d.ts +200 -4
- package/types/src/scripting/_FunctionIndex.d.ts +8 -3
- package/types/src/scripting/_ModuleUtils.d.ts +11 -1
- package/types/src/scripting/_ScriptUtils.d.ts +3 -0
- package/types/src/scripting/declarations.browser.d.ts +10 -0
- package/types/src/scripting/declarations.d.ts +49 -0
- package/types/src/scripting/declarations.node.d.ts +9 -0
- package/types/src/scripting/index.d.ts +3 -0
- package/types/src/selection/IMovableSelection.d.ts +148 -0
- package/types/src/selection/IRangeSelection.d.ts +9 -4
- package/types/src/selection/MovableSelection.d.ts +48 -0
- package/types/src/selection/RangeSelection.d.ts +15 -0
- package/types/src/selection/index.d.ts +1 -0
- package/types/src/shape/GeometryPreset.d.ts +197 -0
- package/types/src/shape/IGeometry.d.ts +380 -0
- package/types/src/shape/IShape.d.ts +341 -194
- package/types/src/shape/IShapeStyle.d.ts +135 -0
- package/types/src/shape/Shape.d.ts +107 -21
- package/types/src/shape/ShapeStyleUtils.d.ts +54 -0
- package/types/src/shape/_ConnectorFrame.d.ts +32 -0
- package/types/src/shape/_ConnectorRoute.d.ts +33 -0
- package/types/src/shape/_Connectors.d.ts +108 -0
- package/types/src/shape/_Geometry.d.ts +14 -0
- package/types/src/shape/_GeometryLoader.d.ts +21 -0
- package/types/src/shape/_ShapeStyle.d.ts +70 -0
- package/types/src/shape/_builtIn/_BuiltInChunks.d.ts +10 -0
- package/types/src/shape/_builtIn/_BuiltInDef.d.ts +9 -0
- package/types/src/shape/_builtIn/arrows.d.ts +6 -0
- package/types/src/shape/_builtIn/basic.d.ts +6 -0
- package/types/src/shape/_builtIn/callouts.d.ts +6 -0
- package/types/src/shape/_builtIn/flowchart.d.ts +6 -0
- package/types/src/shape/_builtIn/lines.d.ts +6 -0
- package/types/src/shape/_builtIn/math.d.ts +6 -0
- package/types/src/shape/_builtIn/other.d.ts +6 -0
- package/types/src/shape/_builtIn/rectangles.d.ts +6 -0
- package/types/src/shape/_builtIn/starsBanners.d.ts +6 -0
- package/types/src/shape/geometry/_strokeEnds.d.ts +7 -0
- package/types/src/shape/geometry/format.d.ts +3 -0
- package/types/src/shape/geometry/geometry.d.ts +85 -0
- package/types/src/shape/geometry/guides.d.ts +54 -0
- package/types/src/shape/geometry/handles.d.ts +14 -0
- package/types/src/shape/geometry/index.d.ts +7 -0
- package/types/src/shape/geometry/lineEnds.d.ts +54 -0
- package/types/src/shape/geometry/paths.d.ts +35 -0
- package/types/src/shape/geometry/segments.d.ts +114 -0
- package/types/src/shape/index.d.ts +3 -0
- package/types/src/sheet/CellRegion.d.ts +6 -0
- package/types/src/sheet/ICellContainerOptions.d.ts +50 -0
- package/types/src/sheet/ISheet.d.ts +197 -50
- package/types/src/sheet/ISheetCollection.d.ts +2 -5
- package/types/src/sheet/NamedCellRange.d.ts +16 -7
- package/types/src/sheet/NamedRange.d.ts +8 -0
- package/types/src/sheet/Sheet.d.ts +923 -138
- package/types/src/sheet/SheetCell.d.ts +92 -32
- package/types/src/sheet/SheetCollection.d.ts +19 -8
- package/types/src/sheet/SheetRange.d.ts +92 -17
- package/types/src/sheet/SheetRanges.d.ts +22 -9
- package/types/src/sheet/_CellBuffer.d.ts +214 -0
- package/types/src/sheet/_HeldFormula.d.ts +69 -0
- package/types/src/sheet/_InvalidSheetRange.d.ts +7 -7
- package/types/src/sheet/_ListenerAnchor.d.ts +104 -0
- package/types/src/sheet/_RangeStateSweep.d.ts +16 -0
- package/types/src/sheet/_ScalarListFactory.d.ts +61 -0
- package/types/src/sheet/_SheetAutoFillUtils.d.ts +74 -0
- package/types/src/sheet/_SheetAutoFitUtils.d.ts +28 -0
- package/types/src/sheet/_SheetEvents.d.ts +43 -0
- package/types/src/sheet/_SheetFilterUtils.d.ts +49 -1
- package/types/src/sheet/_SheetIntents.d.ts +296 -0
- package/types/src/sheet/_SheetMutations.d.ts +182 -62
- package/types/src/sheet/_SheetStateReader.d.ts +19 -13
- package/types/src/sheet/_SheetStateTypes.d.ts +83 -78
- package/types/src/sheet/_SheetUtils.d.ts +39 -22
- package/types/src/sheet/_WatchAnchor.d.ts +93 -0
- package/types/src/sheet/spatial/HeldFormulaEntry.d.ts +36 -0
- package/types/src/sheet/spatial/index.d.ts +1 -0
- package/types/src/sheet/style/SheetCellStyle.d.ts +209 -304
- package/types/src/sheet/style/SheetDirectStyle.d.ts +30 -19
- package/types/src/sheet/style/SheetNamedStyle.d.ts +17 -17
- package/types/src/sheet/style/SheetTableStyle.d.ts +5 -5
- package/types/src/sheet/style/_Resolvers.d.ts +14 -8
- package/types/src/sheet/style/_StyleUtils.d.ts +38 -8
- package/types/src/sheetHeader/ISheetHeader.d.ts +94 -53
- package/types/src/sheetHeader/SheetCellHeader.d.ts +4 -0
- package/types/src/sheetHeader/SheetHeader.d.ts +42 -22
- package/types/src/sheetHeader/_HeaderMetrics.d.ts +37 -0
- package/types/src/sheetHeader/_HeaderUtils.d.ts +5 -3
- package/types/src/sheetProtection/ISheetProtection.d.ts +41 -7
- package/types/src/sheetProtection/SheetProtection.d.ts +12 -0
- package/types/src/sheetView/ISheetView.d.ts +69 -15
- package/types/src/sheetView/SheetView.d.ts +20 -11
- package/types/src/slicer/ISlicer.d.ts +304 -17
- package/types/src/slicer/ISlicerStyle.d.ts +109 -0
- package/types/src/slicer/Slicer.d.ts +128 -13
- package/types/src/slicer/SlicerStyle.d.ts +25 -0
- package/types/src/slicer/_BuiltInSlicerStyles.d.ts +13 -0
- package/types/src/slicer/_SlicerUtils.d.ts +30 -0
- package/types/src/slicer/index.d.ts +1 -0
- package/types/src/sort/ISort.d.ts +4 -2
- package/types/src/string/IStringCollection.d.ts +5 -0
- package/types/src/string/StringCollection.d.ts +6 -6
- package/types/src/style/{IStyle.d.ts → ICellStyle.d.ts} +72 -52
- package/types/src/style/INamedStyleCollection.d.ts +72 -0
- package/types/src/style/ISlicerStyleCollection.d.ts +77 -0
- package/types/src/style/IStyleCollection.d.ts +91 -60
- package/types/src/style/ITableStyleCollection.d.ts +89 -0
- package/types/src/style/NamedStyleCollection.d.ts +39 -0
- package/types/src/style/SlicerStyleCollection.d.ts +46 -0
- package/types/src/style/StyleCollection.d.ts +81 -26
- package/types/src/style/TableStyleCollection.d.ts +49 -0
- package/types/src/style/_BuiltInStyleDefs.d.ts +6 -6
- package/types/src/style/_BuiltInStyleNames.d.ts +2 -2
- package/types/src/style/index.d.ts +7 -1
- package/types/src/table/AnchoredTable.d.ts +701 -72
- package/types/src/table/AutoTable.d.ts +7 -5
- package/types/src/table/ITable.d.ts +261 -34
- package/types/src/table/ITableCollection.d.ts +12 -0
- package/types/src/table/ITableStyle.d.ts +37 -37
- package/types/src/table/TableCollection.d.ts +19 -8
- package/types/src/table/_FilterField.d.ts +19 -6
- package/types/src/table/_NamedTable.d.ts +17 -1
- package/types/src/table/_NamedTableSource.d.ts +1 -0
- package/types/src/table/_SortField.d.ts +2 -0
- package/types/src/table/_TableColumn.d.ts +13 -2
- package/types/src/table/_TableMessages.d.ts +1 -0
- package/types/src/table/_TableUtils.d.ts +40 -0
- package/types/src/text/Bullet.d.ts +4 -0
- package/types/src/text/IText.d.ts +182 -0
- package/types/src/text/ITextFrame.d.ts +110 -1
- package/types/src/text/TextBoxAlignment.d.ts +25 -16
- package/types/src/text/TextFrame.d.ts +4 -0
- package/types/src/text/TextLine.d.ts +4 -0
- package/types/src/text/TextParagraph.d.ts +4 -0
- package/types/src/text/TextRotation.d.ts +3 -3
- package/types/src/text/TextRun.d.ts +9 -0
- package/types/src/text/TextStacked.d.ts +83 -0
- package/types/src/text/index.d.ts +1 -0
- package/types/src/text/richtext/IRichText.d.ts +36 -0
- package/types/src/text/richtext/IStyledFont.d.ts +18 -18
- package/types/src/text/richtext/index.d.ts +1 -0
- package/types/src/theme/ITheme.d.ts +45 -4
- package/types/src/theme/IThemeCollection.d.ts +2 -0
- package/types/src/theme/ThemeCollection.d.ts +11 -7
- package/types/src/theme/_OfficeFormatScheme.d.ts +3 -0
- package/types/src/transaction/ITransaction.d.ts +258 -45
- package/types/src/transaction/Transaction.d.ts +101 -11
- package/types/src/transaction/TransactionUndoManager.d.ts +4 -1
- package/types/src/type/AbstractCollection.d.ts +101 -0
- package/types/src/type/ICollection.d.ts +117 -0
- package/types/src/type/ITypes.d.ts +9 -7
- package/types/src/type/index.d.ts +1 -0
- package/types/src/utils/_CSSUtils.d.ts +3 -3
- package/types/src/wasm/_sdkWasm.d.ts +7 -0
- package/types/src/wasm/index.d.ts +2 -0
- package/types/src/wasm/sdkWasm.d.ts +29 -0
- package/types/src/workbook/IWorkbook.d.ts +180 -40
- package/types/src/workbook/Workbook.d.ts +123 -10
- package/types/src/workbook/_WorkbookIntents.d.ts +36 -0
- package/types/src/workbookProtection/IWorkbookProtection.d.ts +7 -0
- package/types/src/workbookProtection/WorkbookProtection.d.ts +3 -0
- package/types/src/workbookView/IWorkbookView.d.ts +12 -0
- package/types/src/workbookView/WorkbookView.d.ts +5 -0
- package/browser/cjs/B7_pDFYCVzt-3hUs.cjs +0 -1
- package/browser/cjs/BF14ZEAnaqxXroSj.cjs +0 -1
- package/browser/cjs/BXtvdT1Z-MsB_o5F.cjs +0 -1
- package/browser/cjs/Bc4JjVVZfFo3R4He.cjs +0 -33
- package/browser/cjs/CD2RXdnfqSYNc6gX.cjs +0 -57
- package/browser/cjs/DcLpXGexEtOxi-dD.cjs +0 -1
- package/browser/cjs/Dv3x6zut1ZRUt3IF.cjs +0 -10
- package/browser/cjs/index.cjs +0 -3
- package/browser/esm/0Mj5WKM362q6CECb.mjs +0 -824
- package/browser/esm/CPTtL2f6_4iblmFM.mjs +0 -4436
- package/browser/esm/CoA-sUxjiIUIpTUF.mjs +0 -109
- package/browser/esm/Dy4Sdpju1T2icURu.mjs +0 -50854
- package/node/esm/BtGxbEbBm79YvF_k.mjs +0 -843
- package/node/esm/DqgWsVXROpSgKq6c.mjs +0 -114
- package/types/src/cellRange/_GraphNode.d.ts +0 -38
- package/types/src/condition/BuiltinSelectors/ListSelector.d.ts +0 -12
- package/types/src/dataValidation/_Utils.d.ts +0 -10
- package/types/src/lib/utils/_Utils.d.ts +0 -20
- package/types/src/lib/utils/utils.browser.d.ts +0 -33
- package/types/src/movable/IGroup.d.ts +0 -30
- package/types/src/movable/IMovableSelection.d.ts +0 -49
- package/types/src/sheet/listener/RangesListener.d.ts +0 -32
- package/types/src/sheet/listener/RangesListenerEntry.d.ts +0 -19
- package/types/src/sheet/listener/index.d.ts +0 -3
- /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:
|
|
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
|
-
*
|
|
55
|
-
*
|
|
56
|
-
*
|
|
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
|
-
*
|
|
123
|
-
*
|
|
124
|
-
*
|
|
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
|
|
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
|
|
147
|
-
* for later lazy reads; `flush` commits the ordered
|
|
148
|
-
* value still sitting in it. Flat: the stack is an
|
|
149
|
-
* evaluations, not 1,560 JS frames. A node is retried at
|
|
150
|
-
* and with the prefetch of its static precedents that is
|
|
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
|
|
155
|
-
*
|
|
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
|
|
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
|
|
164
|
-
* there because the one below it read it, and the
|
|
165
|
-
* the walk `getPath` answers: each member is linked
|
|
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
|
|
172
|
-
*
|
|
173
|
-
*
|
|
174
|
-
*
|
|
175
|
-
* unsettled member keeps every cycle of the pass
|
|
176
|
-
*
|
|
177
|
-
*
|
|
178
|
-
*
|
|
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 (`
|
|
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
|
-
/**
|
|
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
|
-
|
|
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
|
-
/**
|
|
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,
|
|
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.
|
|
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;
|