@sheetxl/sdk 0.8.0-beta.11 → 0.8.0-beta.12
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/browser/esm/{BpgskG1Er_lGQ_yS.mjs → -Jx-jNHmtIQQfLvK.mjs} +1 -1
- package/browser/esm/{BLoUBId2xZpXAK_H.mjs → 2WuhYrIpYmOR5H73.mjs} +15 -15
- package/browser/esm/{Ctjb0SsxV4K4MMqG.mjs → 2mIwPy2D2JUX-9wx.mjs} +2 -2
- package/browser/esm/{CkxWugaJFjDGZNZ-.mjs → B3wf5vZCsWfWsDbj.mjs} +1 -1
- package/browser/esm/{BjkCiv5Jz6WYKZeu.mjs → BIHrHjRGWVlJglcp.mjs} +2 -2
- package/browser/esm/{BtvLTTfSBdAKplVG.mjs → BTFBedJMRWGvZyCE.mjs} +1 -1
- package/browser/esm/{C4MqfLn9Dm-l3OIk.mjs → BdCJNawfifyPupCP.mjs} +1 -1
- package/browser/esm/{CV5EGEjG5_-CPpP0.mjs → Bg5Di9GLNAkbqQ1P.mjs} +3 -3
- package/browser/esm/{C2VbEI_XVAoseAwa.mjs → BnC4-27Igwb8oDf2.mjs} +2 -2
- package/browser/esm/{CQYjO777cmAznUzK.mjs → Bt8_m94tBdks209L.mjs} +1 -1
- package/browser/esm/{C16ycKja6zG0crV_.mjs → BudSIfXBAsTxvu-K.mjs} +17836 -15712
- package/browser/esm/{DvAaxH6z_tGvrRzl.mjs → C9u8FUewte5ugUjH.mjs} +686 -686
- package/browser/esm/{DEiPS3Dr-s4fPbVZ.mjs → CBYMTDzMf1Vh7pkw.mjs} +1 -1
- package/browser/esm/{Dyq_ivuHvlXLwPCl.mjs → CNdjyofiRu6CYOrr.mjs} +1106 -1102
- package/browser/esm/{PcHFjNzQsE54POri.mjs → CRkYR-siY2C994KV.mjs} +1 -1
- package/browser/esm/{C5E6zSGAALWf61n4.mjs → CTe2qfmIUEad6FJv.mjs} +2 -2
- package/browser/esm/{BoV6zPBnfqCBCqZ7.mjs → CUzYuYTTGsChC_kZ.mjs} +3841 -3148
- package/browser/esm/CdEO8CEee6lEhabA.mjs +117 -0
- package/browser/esm/{S2dNNx1a5ydRnARM.mjs → CfRqiPDg6RBTg1EN.mjs} +2 -2
- package/browser/esm/{ClbvFbFzFzXLBKNN.mjs → CndRBvVfQUJIYRRj.mjs} +50 -50
- package/browser/esm/{BnG31I6Oj_HEtSPS.mjs → CwOPLXU3-9ZHGyOT.mjs} +1 -1
- package/browser/esm/{CHU6iu_WGlm7fLET.mjs → Cxjxk0ncRKx80I-w.mjs} +1 -1
- package/browser/esm/D2RZh0O9neOsyLAE.mjs +281 -0
- package/browser/esm/{BkBhLS0l6z8sxI6D.mjs → D64dM68B1pKYFzdP.mjs} +2 -2
- package/browser/esm/{BVDiOXGMc5_FMGfy.mjs → D9xNz46kAfXMZzp4.mjs} +2 -2
- package/browser/esm/{zlLuW405RSguy4Kn.mjs → DK899HhWX1HINMC1.mjs} +53 -53
- package/browser/esm/{B7aUIvgUjncMMD_i.mjs → DPhGQLNGmDZwODwJ.mjs} +5 -4
- package/browser/esm/{gssVX_FH1XFN-twD.mjs → DVroRnhi-5IDXNgM.mjs} +1 -1
- package/{node/esm/CZICGK_ss0HoGHCP.mjs → browser/esm/DZiivy0NmO1Vnyzk.mjs} +2 -2
- package/browser/esm/{ClPfI4lODvCece29.mjs → DgrAuRD2qr2DvFeJ.mjs} +61 -61
- package/browser/esm/{CU3DmJ-YnVVrC1_k.mjs → DobHLF6VjHr7Xi40.mjs} +1 -1
- package/browser/esm/{CaB7J-xgfKO2uAkG.mjs → DwZCT7DZiiXoTweg.mjs} +2 -2
- package/browser/esm/{BMyDRQ716j79h_bH.mjs → DwwR3O2sEZApPSTF.mjs} +6 -6
- package/browser/esm/{DLLE0FZNsKxbBzRn.mjs → Tah7cnFb_HNZdLtj.mjs} +45 -45
- package/browser/esm/{Dlmig06rIo7cInRk.mjs → fXWUMDhZ5yMSO629.mjs} +1 -1
- package/browser/esm/{DWNzqw7DUKwoxjri.mjs → hCQJcmIzPDxDEv2q.mjs} +2 -2
- package/browser/esm/index.mjs +679 -542
- package/browser/esm/{BFagR2JeWs74iAG3.mjs → qO-ujUrgq6H3TQix.mjs} +1 -1
- package/browser/esm/w6Jea0TiclPrYZ2M.mjs +1703 -0
- package/browser/esm/yuhcOYw6SHQ-RCm3.mjs +114 -0
- package/node/esm/-TA0MneBDKdGhsib.mjs +8668 -0
- package/node/esm/{B21JjOLghRoDOrkx.mjs → B-HUPAcqvK0eeeCz.mjs} +1 -1
- package/node/esm/{DNRhGK-8Tr9xcRyc.mjs → BL2iiEoqxDEV2Xrg.mjs} +3 -3
- package/node/esm/{D1TKBVmoKGAXf37B.mjs → BNXLOEddJ6O9gYws.mjs} +2 -2
- package/node/esm/{BrCKGFRsX_ezFJ4B.mjs → BSvOluusoDM4z_dx.mjs} +15 -15
- package/node/esm/{BIwObuhTJYf0jpUa.mjs → BskP3b8vUoIOGLY6.mjs} +2 -2
- package/node/esm/{2Kihw_-5lVTEnwMa.mjs → Btw4148Ot8ifhNc1.mjs} +1 -1
- package/node/esm/{BqiexuA89caYnAPz.mjs → C14-R6tifRh7pc0p.mjs} +1 -1
- package/node/esm/{DUTskXCXref-IJnI.mjs → C99zzq8DImQXi4BQ.mjs} +47 -47
- package/node/esm/{D8zEN-6ZdDqDvTxM.mjs → CBuEu5Jk-LfaDy-H.mjs} +61 -61
- package/node/esm/{yavzZOiZW_EjG9lE.mjs → CG-qBU5BAaVz7e-P.mjs} +1 -1
- package/node/esm/CPI58duc0j0a-HpJ.mjs +115 -0
- package/node/esm/{CCN5vD410obwdz38.mjs → CRt3vXe6YmXzqk3H.mjs} +15 -14
- package/node/esm/{CzXT00vrQa1_gvW9.mjs → C_aL7CGS1lrNn1Ng.mjs} +1 -1
- package/node/esm/{CZiqiay42tFTrLI4.mjs → C_xf5Bz30VqiJjXn.mjs} +1 -1
- package/node/esm/{BIRq1kT7lLRzns9t.mjs → CiIymQN6aJCul62g.mjs} +9 -9
- package/node/esm/{CNCNJNg890KdgkWh.mjs → Ci_zLYmCD7e-C79O.mjs} +1 -1
- package/{browser/esm/D5np__Jb1euAyaLw.mjs → node/esm/CkRYLed8Mmn3giNg.mjs} +2 -2
- package/node/esm/D3ptRKzASqBut1DE.mjs +117 -0
- package/node/esm/{cGwrLA1RCE-WhJ7w.mjs → D4ROK9UwDpS6jO3Z.mjs} +1 -1
- package/node/esm/{mFiBSM7XgBHV9AY7.mjs → D8hO07ToAibIuniw.mjs} +1535 -1531
- package/node/esm/{CDHdgJXH2vS71WMc.mjs → DUTmDHbFbhLDT4F3.mjs} +1 -1
- package/node/esm/{CGp6VZL-gZa9Uezx.mjs → DV5CU37aEbFbWFL0.mjs} +1 -1
- package/node/esm/{De2IONBxQhz-Qbyh.mjs → DdoiuKg9BKubtF1V.mjs} +1 -1
- package/node/esm/{Db0v7zXNnyjBIjjI.mjs → DggQ23jKMpwhENfa.mjs} +2 -2
- package/node/esm/{CwePQwTILHHjGDkZ.mjs → DhS6yWjrrSNIJMsn.mjs} +204 -204
- package/node/esm/{D_t5AUxSm7_icjzq.mjs → DhTya_mhmN53vskv.mjs} +1 -1
- package/node/esm/{DOU54VsOjG-m-NyQ.mjs → Dn1M7YWi25DeeYUb.mjs} +1 -1
- package/node/esm/{DkwIPzKc3UwdUIfM.mjs → DrCf6ITcBhVOFpRj.mjs} +6 -6
- package/node/esm/{D2KBymQJd1XhpeQD.mjs → DxazKtROyaI51dWl.mjs} +1 -1
- package/node/esm/{D6e2z7eZpxOJXHc7.mjs → Q_S1g46ZOTrdhTae.mjs} +1 -1
- package/node/esm/{OVfaSb506tNSIvbv.mjs → Vocy-I9dKzZMr0Ct.mjs} +19038 -16822
- package/node/esm/ZXPFcsT2zrALCZux.mjs +289 -0
- package/node/esm/{857CIBgQgGpnqrXk.mjs → eimUGjiIP-b8HiM6.mjs} +55 -55
- package/node/esm/{Bbf1Pm9Gk7YpLTvg.mjs → icn2nX5Z8e_3mNAv.mjs} +1 -1
- package/node/esm/index.mjs +740 -603
- package/node/esm/{Ct3h15sCus4Tgt6M.mjs → lGJ42sHqg5if2bba.mjs} +624 -616
- package/node/esm/{CdJHUJSBRHZoryPe.mjs → pYtP7wPyS96NQyXS.mjs} +59 -59
- package/package.json +6 -6
- package/resources/locales/de/model.msg.json +8 -2
- package/resources/locales/en/model.msg.json +9 -2
- package/types/scripting-api.json +10619 -10446
- package/types/scripting-enums.json +20 -1
- package/types/scripting.d.ts +1233 -296
- package/types/src/{sheet → anomalies}/_Anomalies.d.ts +3 -3
- package/types/src/anomalies/_FocusTable.d.ts +11 -0
- package/types/src/{sheet/_AnomalyFormulaChecks.d.ts → anomalies/_FormulaChecks.d.ts} +10 -2
- package/types/src/{sheet/_AnomalyLabelChecks.d.ts → anomalies/_LabelChecks.d.ts} +1 -1
- package/types/src/anomalies/_LiteralChecks.d.ts +35 -0
- package/types/src/anomalies/_SeriesChecks.d.ts +13 -0
- package/types/src/calculation/Calculation.d.ts +47 -9
- package/types/src/calculation/ExternalBookBindings.d.ts +2 -3
- package/types/src/calculation/ICalculation.d.ts +96 -9
- package/types/src/calculation/NamedFormulaCollection.d.ts +104 -8
- package/types/src/calculation/_CloneBoundary.d.ts +1 -1
- package/types/src/calculation/compiler/ASTTypes.d.ts +6 -2
- package/types/src/calculation/compiler/Types.d.ts +8 -0
- package/types/src/calculation/engine/CalcBackend.d.ts +104 -6
- package/types/src/calculation/executor/CalcExecutor.d.ts +73 -22
- package/types/src/calculation/executor/CalcExecutorUtils.d.ts +17 -1
- package/types/src/calculation/executor/_WhatIf.d.ts +50 -0
- package/types/src/calculation/formula/FormulaBlock.d.ts +4 -3
- package/types/src/calculation/formula/IFormulaBlock.d.ts +5 -0
- package/types/src/calculation/functions/_DataTableFunction.d.ts +14 -0
- package/types/src/calculation/grid/CalcGrid.d.ts +4 -6
- package/types/src/calculation/grid/CalcGridBackend.d.ts +5 -27
- package/types/src/calculation/grid/CalcGridProxy.d.ts +0 -2
- package/types/src/calculation/grid/CalcGridUtils.d.ts +4 -2
- package/types/src/calculation/grid/ICalcGrid.d.ts +16 -12
- package/types/src/calculation/grid/_CalcRequest.d.ts +17 -5
- package/types/src/calculation/spatial/FormulaSpatialValue.d.ts +2 -0
- package/types/src/calculation/spatial/SpillEntry.d.ts +16 -2
- package/types/src/calculation/state/CalcNode.d.ts +0 -1
- package/types/src/calculation/state/CalcScope.d.ts +29 -0
- package/types/src/calculation/state/CalcState.d.ts +26 -4
- package/types/src/calculation/state/CalculationContext.d.ts +28 -1
- package/types/src/calculation/state/DeferredCalls.d.ts +260 -0
- package/types/src/calculation/state/IContextContainer.d.ts +20 -0
- package/types/src/calculation/state/_PendingOverlayGrid.d.ts +6 -0
- package/types/src/calculation/state/_WhatIfLayer.d.ts +91 -0
- package/types/src/cell/ICell.d.ts +53 -34
- package/types/src/cellControl/CellControl.d.ts +67 -0
- package/types/src/cellControl/CellControlCollection.d.ts +29 -0
- package/types/src/cellControl/CellControlRegistry.d.ts +47 -0
- package/types/src/cellControl/ICellControl.d.ts +99 -0
- package/types/src/cellControl/ICellControlCollection.d.ts +67 -0
- package/types/src/cellControl/index.d.ts +4 -0
- package/types/src/cellRange/ICellRange.d.ts +207 -59
- package/types/src/cellRange/ICellRanges.d.ts +4 -3
- package/types/src/chart/layout/ChartLayout.d.ts +5 -1
- package/types/src/chart/resolve/_Resolve.d.ts +10 -0
- package/types/src/chart/resolve/_ResolvedChart.d.ts +5 -2
- package/types/src/collections/ISparseGrid.d.ts +11 -2
- package/types/src/collections/MixedTypedArrayList.d.ts +8 -2
- package/types/src/collections/SparseGrid.d.ts +3 -8
- package/types/src/condition/AnchoredConditional.d.ts +2 -2
- package/types/src/externalBook/IExternalBook.d.ts +3 -4
- package/types/src/fetch/Fetcher.d.ts +15 -0
- package/types/src/fetch/IFetcher.d.ts +47 -0
- package/types/src/fetch/_WorkbookFetch.d.ts +43 -0
- package/types/src/fetch/index.d.ts +3 -0
- package/types/src/fill/PaintUtils.d.ts +3 -1
- package/types/src/hyperlink/IHyperlink.d.ts +10 -0
- package/types/src/hyperlink/_Hyperlink.d.ts +4 -1
- package/types/src/index.d.ts +2 -1
- package/types/src/named/INamedCollection.d.ts +36 -0
- package/types/src/named/NamedCollection.d.ts +18 -0
- package/types/src/primitives/AsyncValue.d.ts +58 -0
- package/types/src/resource/IResource.d.ts +9 -0
- package/types/src/resource/IResourceCollection.d.ts +4 -0
- package/types/src/resource/Resource.d.ts +2 -0
- package/types/src/resource/_AddResource.d.ts +13 -0
- package/types/src/richData/CellImage.d.ts +95 -0
- package/types/src/richData/Hyperlink.d.ts +49 -0
- package/types/src/richData/IRichDataCollection.d.ts +76 -0
- package/types/src/richData/IRichDataKind.d.ts +55 -11
- package/types/src/richData/RichArray.d.ts +42 -0
- package/types/src/richData/RichDataCollection.d.ts +23 -0
- package/types/src/richData/RichDataRegistry.d.ts +46 -14
- package/types/src/richData/RichDataValues.d.ts +20 -0
- package/types/src/richData/RichRecord.d.ts +68 -0
- package/types/src/richData/RichText.d.ts +5 -5
- package/types/src/richData/index.d.ts +6 -0
- package/types/src/scripting/FunctionArguments.d.ts +17 -1
- package/types/src/scripting/FunctionCollection.d.ts +8 -0
- package/types/src/scripting/Scripts.d.ts +10 -0
- package/types/src/scripting/TypedFunction.d.ts +2 -0
- package/types/src/sheet/ICellContainerOptions.d.ts +6 -0
- package/types/src/sheet/IWorksheet.d.ts +24 -17
- package/types/src/sheet/SheetCell.d.ts +17 -1
- package/types/src/sheet/SheetRange.d.ts +8 -2
- package/types/src/sheet/SheetRanges.d.ts +2 -2
- package/types/src/sheet/Worksheet.d.ts +110 -56
- package/types/src/sheet/_ListenerAnchor.d.ts +7 -1
- package/types/src/sheet/_ScalarListFactory.d.ts +54 -6
- package/types/src/sheet/_SheetMutations.d.ts +4 -1
- package/types/src/sheet/_SheetStateTypes.d.ts +23 -11
- package/types/src/workbook/IWorkbook.d.ts +40 -1
- package/types/src/workbook/Workbook.d.ts +25 -3
- package/types/src/workbook/WorkbookRanges.d.ts +1 -1
- package/browser/esm/BGOFfpxr2jPIdqmV.mjs +0 -40
- package/browser/esm/f1IoRb7tEb0QmCSt.mjs +0 -110
- package/browser/esm/nvU0ClAbf0g94YBK.mjs +0 -1695
- package/node/esm/B084DssTcdBheTp_.mjs +0 -7966
- package/node/esm/Df1bL6VFvrqIdSLB.mjs +0 -40
- package/node/esm/DrTZbfemSLq2mseG.mjs +0 -111
- package/types/src/dataTable/DataTable.d.ts +0 -67
- package/types/src/dataTable/DataTableCollection.d.ts +0 -19
- package/types/src/dataTable/IDataTable.d.ts +0 -99
- package/types/src/dataTable/IDataTableCollection.d.ts +0 -18
- package/types/src/dataTable/index.d.ts +0 -6
|
@@ -3,9 +3,9 @@ import { ICell } from '../cell';
|
|
|
3
3
|
import { ISpatialMap, ISpatialQuery } from '../collections';
|
|
4
4
|
import { ICellStyle, IStyleCollection } from '../style';
|
|
5
5
|
import { IProperties } from '../type';
|
|
6
|
-
import { IWorksheet } from '
|
|
7
|
-
import { IgnoredErrors } from '
|
|
8
|
-
import { CellKind } from '
|
|
6
|
+
import { IWorksheet } from '../sheet/IWorksheet';
|
|
7
|
+
import { IgnoredErrors } from '../sheet/_IgnoredErrors';
|
|
8
|
+
import { CellKind } from '../sheet/_Kinds';
|
|
9
9
|
/**
|
|
10
10
|
* The findings at a cell, interned per map: equal findings are one object, in rank order, so a
|
|
11
11
|
* region's payload identity is its content and the fragments of one finding regroup.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per focus, the share of a class of finding's regions that held a planted defect of that kind on the
|
|
3
|
+
* SpreadsheetBench v2 Debugging inputs, and `prior`, the kind's rate over every region. A class is
|
|
4
|
+
* `check/evidence key/repeats` (`ICellRange.AnomalyFocus`).
|
|
5
|
+
* @internal
|
|
6
|
+
*/
|
|
7
|
+
export declare const ANOMALY_FOCUS_TABLE: Readonly<Record<string, {
|
|
8
|
+
readonly prior: number;
|
|
9
|
+
readonly classes: Readonly<Record<string, number>>;
|
|
10
|
+
}>>;
|
|
11
|
+
//# sourceMappingURL=_FocusTable.d.ts.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { IRange } from '@sheetxl/primitives';
|
|
2
2
|
import { ICalculation } from '../calculation';
|
|
3
3
|
import { SpatialMap } from '../collections';
|
|
4
|
-
import { IWorksheet } from '
|
|
4
|
+
import { IWorksheet } from '../sheet/IWorksheet';
|
|
5
5
|
import { AnomalySource, FormulaRegion, RoleSource, _Findings } from './_Anomalies';
|
|
6
6
|
type Node = ICalculation.FormulaNode;
|
|
7
7
|
type Rect = IRange.Coords;
|
|
@@ -53,6 +53,14 @@ export declare function checkLookupShape(source: AnomalySource, regions: readonl
|
|
|
53
53
|
* a converter wrapped as unknown (`_XLUDF.`, `'udf'`).
|
|
54
54
|
*/
|
|
55
55
|
export declare function checkExternalReference(source: AnomalySource, regions: readonly FormulaRegion[], findings: _Findings): void;
|
|
56
|
+
/**
|
|
57
|
+
* `errorConstant`: a formula that is only an error value — `=#DIV/0!`, `=#REF!`. Nobody types
|
|
58
|
+
* one; it is what a converter leaves when it drops the formula that computed the error. When the
|
|
59
|
+
* block sits against a data table (`=TABLE(…)`) that spills less than the block covers,
|
|
60
|
+
* `dataTable` names the table's anchor and `extent` the rectangle the two cover together: the
|
|
61
|
+
* table's results were replaced by constants.
|
|
62
|
+
*/
|
|
63
|
+
export declare function checkErrorConstant(source: AnomalySource, regions: readonly FormulaRegion[], findings: _Findings): void;
|
|
56
64
|
/** One term of a sum: a reference, added (`1`) or taken away (`-1`). */
|
|
57
65
|
export interface Leaf {
|
|
58
66
|
readonly node: Node;
|
|
@@ -122,4 +130,4 @@ export interface Resolved {
|
|
|
122
130
|
/** Where a cell or range reference lands when its formula sits at `at`; `null` for anything else. @internal */
|
|
123
131
|
export declare function resolve(node: Node, at: At, own: string): Resolved | null;
|
|
124
132
|
export {};
|
|
125
|
-
//# sourceMappingURL=
|
|
133
|
+
//# sourceMappingURL=_FormulaChecks.d.ts.map
|
|
@@ -18,4 +18,4 @@ export declare function checkKeyLabelMismatch(source: AnomalySource, regions: re
|
|
|
18
18
|
* other sign — `=-'Debt'!C20` where two other links read `='Debt'!D20`, `='Debt'!E20`.
|
|
19
19
|
*/
|
|
20
20
|
export declare function checkSignVsSiblings(source: AnomalySource, regions: readonly FormulaRegion[], findings: _Findings): void;
|
|
21
|
-
//# sourceMappingURL=
|
|
21
|
+
//# sourceMappingURL=_LabelChecks.d.ts.map
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { AnomalySource, FormulaRegion, _Findings } from './_Anomalies';
|
|
2
|
+
/**
|
|
3
|
+
* `literalMatchesInput`: a number typed into a formula that equals a typed number on the sheet no
|
|
4
|
+
* formula reads — `=(-0.595*J19)` with `0.595` in J52, which nothing reads. The reference the
|
|
5
|
+
* literal replaced is what left the input unread, so an unread input is the signal; a literal
|
|
6
|
+
* matching an input something still reads is the formula's own constant.
|
|
7
|
+
*
|
|
8
|
+
* Small counts, calendar periods and powers of ten never fire (`isConventional`). The nearest
|
|
9
|
+
* occurrence is the evidence, with its label when it has one, and `matches`, the places the value
|
|
10
|
+
* is typed, scales the rank down: a value typed all over a data block is a weak witness.
|
|
11
|
+
*/
|
|
12
|
+
export declare function checkLiteralMatchesInput(source: AnomalySource, regions: readonly FormulaRegion[], findings: _Findings): void;
|
|
13
|
+
/**
|
|
14
|
+
* `constantFrequency`: every constant a formula types — a number, a string, a boolean — as a
|
|
15
|
+
* finding of its own, with how often the workbook types it. A model's conventions are typed many
|
|
16
|
+
* times (`/365` in every days line, `"Total"` in every lookup); a value typed once, or a unit typed
|
|
17
|
+
* in two rows where the workbook types another in twenty, is the exception to read first. The
|
|
18
|
+
* count is the second pass's: it adds `uses` and `of` and divides the rank by `uses`, so nothing is
|
|
19
|
+
* cut and a convention lists last. A number keys without its sign, so `-0.595` and `0.595` are one
|
|
20
|
+
* constant.
|
|
21
|
+
*/
|
|
22
|
+
export declare function checkConstantFrequency(source: AnomalySource, regions: readonly FormulaRegion[], findings: _Findings): void;
|
|
23
|
+
/**
|
|
24
|
+
* `twinBlockDivergence`: twin formulas that differ in a typed number — the formulas on the sheet
|
|
25
|
+
* with the same shape once references, literals and signs are set aside. `($D136/100)` in one
|
|
26
|
+
* tranche where the next has `($D145/10000)`; `*(1/360)` beside `*(1/365)`. Every side of a
|
|
27
|
+
* divergence fires, naming the other side's value and a twin that carries it: two planted rows can
|
|
28
|
+
* outvote the one that is right, and which literal the business meant is the reader's call. The
|
|
29
|
+
* side fewer twins carry ranks higher, by `twins / (twins + its own count)`.
|
|
30
|
+
*
|
|
31
|
+
* Only a unit pair compares (`isUnitPair`). A position whose values are spread with no plurality
|
|
32
|
+
* carries no convention and says nothing.
|
|
33
|
+
*/
|
|
34
|
+
export declare function checkTwinBlockDivergence(source: AnomalySource, regions: readonly FormulaRegion[], findings: _Findings): void;
|
|
35
|
+
//# sourceMappingURL=_LiteralChecks.d.ts.map
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { AnomalySource, _Findings } from './_Anomalies';
|
|
2
|
+
/**
|
|
3
|
+
* `scaleOutlier`: a typed percent a hundred times or more off the typical value of the sheet's
|
|
4
|
+
* typed percents — `30` in a percent cell where the others are around `0.4`: a 30% rate typed as a
|
|
5
|
+
* whole number, which shows as 3000%. The typical value is the median of the sheet's typed
|
|
6
|
+
* percents; `times`, the power of ten the value is off by, is the evidence, with the median and
|
|
7
|
+
* how many numbers it is taken over.
|
|
8
|
+
*
|
|
9
|
+
* Read for percents only today: a percent has a scale the format states, so a value off it is a
|
|
10
|
+
* unit fact rather than a large line item.
|
|
11
|
+
*/
|
|
12
|
+
export declare function checkScaleOutlier(source: AnomalySource, findings: _Findings): void;
|
|
13
|
+
//# sourceMappingURL=_SeriesChecks.d.ts.map
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { IRange, IRuntime, Scalar } from '@sheetxl/primitives';
|
|
1
|
+
import { IRange, IFunction, IRuntime, Scalar } from '@sheetxl/primitives';
|
|
2
2
|
import { IListener } from '../listener';
|
|
3
3
|
import { FunctionProvider } from '@sheetxl/scripting';
|
|
4
4
|
import { AbstractModel, IModel } from '../model';
|
|
5
5
|
import { ITransaction } from '../transaction';
|
|
6
6
|
import { IStringCollection } from '../string';
|
|
7
|
+
import { IResourceCollection } from '../resource';
|
|
7
8
|
import { IFunctionCollection } from '../scripting';
|
|
8
9
|
import { INamed, INamedCollection } from '../named';
|
|
9
10
|
import { ICellRange, ICellRanges } from '../cellRange';
|
|
@@ -44,6 +45,7 @@ export declare class Calculation extends AbstractModel<AbstractModel.State, ICal
|
|
|
44
45
|
protected _engineModule: typeof import('./engine') | null;
|
|
45
46
|
protected _planCache: 'off' | 'assert' | 'on' | null;
|
|
46
47
|
protected _getActiveCell: () => IRange.CellCoords | null;
|
|
48
|
+
protected _startFunctions: (() => Promise<readonly IFunction[]>) | null;
|
|
47
49
|
protected _getRange: (address: ICellRange.Address, options?: ICellRange.GetRangeOptions) => ICellRange;
|
|
48
50
|
protected _getRanges: (address: ICellRanges.Address, options?: ICellRange.GetRangeOptions) => ICellRanges;
|
|
49
51
|
/** The current handle of every formula host's grid, by grid id. */
|
|
@@ -363,6 +365,14 @@ export declare class Calculation extends AbstractModel<AbstractModel.State, ICal
|
|
|
363
365
|
* read returns the raw text instead (`use-signs.test.ts`).
|
|
364
366
|
*/
|
|
365
367
|
protected _drainPending(priorityOnly?: boolean): Promise<void>;
|
|
368
|
+
/** @inheritdoc ICalculation.getPendingCount */
|
|
369
|
+
getPendingCount(): number;
|
|
370
|
+
/** @inheritdoc ICalculation.whenPendingDone */
|
|
371
|
+
whenPendingDone(options?: {
|
|
372
|
+
timeout?: number;
|
|
373
|
+
}): Promise<boolean>;
|
|
374
|
+
/** @inheritdoc ICalculation.cancelAsync */
|
|
375
|
+
cancelAsync(options?: ICalculation.CancelOptions): Promise<ICalculation.Status>;
|
|
366
376
|
/** @inheritdoc ICalculation.calculate */
|
|
367
377
|
calculate(options?: ICalculation.CalculateOptions | boolean): Promise<ICalculation.Status>;
|
|
368
378
|
/**
|
|
@@ -372,10 +382,14 @@ export declare class Calculation extends AbstractModel<AbstractModel.State, ICal
|
|
|
372
382
|
* successful one (the tail simply fell off the end), and two call sites cast the result
|
|
373
383
|
* to `Status` to satisfy {@link ICalculation.calculate}.
|
|
374
384
|
*/
|
|
375
|
-
protected _calculate(options?: ICalculation.CalculateOptions, gridId?: string): Promise<ICalculation.Status>;
|
|
385
|
+
protected _calculate(options?: ICalculation.CalculateOptions, gridId?: string, settle?: boolean): Promise<ICalculation.Status>;
|
|
376
386
|
/** A pass, counted while it runs: what the calculation state reads as a pass in flight. */
|
|
377
|
-
protected _calculateNow(options?: ICalculation.CalculateOptions, gridId?: string): Promise<ICalculation.Status>;
|
|
378
|
-
|
|
387
|
+
protected _calculateNow(options?: ICalculation.CalculateOptions, gridId?: string, settle?: boolean): Promise<ICalculation.Status>;
|
|
388
|
+
/**
|
|
389
|
+
* @param settle The settle pass (DESIGN-ASYNC §4.5): seeded from what a settle marked only;
|
|
390
|
+
* volatiles and the dirty set are left for the pass that owes them.
|
|
391
|
+
*/
|
|
392
|
+
protected _runCalculation(options?: ICalculation.CalculateOptions, gridId?: string, settle?: boolean): Promise<ICalculation.Status>;
|
|
379
393
|
/**
|
|
380
394
|
* The model commit the last pass recalculated for, `null` before the first: what a sheet
|
|
381
395
|
* realizing the pass's results amends them into.
|
|
@@ -520,13 +534,17 @@ export declare class Calculation extends AbstractModel<AbstractModel.State, ICal
|
|
|
520
534
|
* @internal
|
|
521
535
|
*/
|
|
522
536
|
_tableChanged(table: ITable, removed: boolean): void;
|
|
523
|
-
/**
|
|
524
|
-
protected _nameWritten(written: NamedFormulaCollection.NamesWritten): void;
|
|
537
|
+
/** Names written, as {@link _tableChanged} tells a table: one message for a batch. */
|
|
538
|
+
protected _nameWritten(written: readonly NamedFormulaCollection.NamesWritten[]): void;
|
|
539
|
+
/** {@link _sendSymbolChanges} for one change. */
|
|
540
|
+
protected _sendSymbolChange<T>(kind: 'tables' | 'names', id: string, entry: T | null, same: (a: T | null | undefined, b: T | null) => boolean): void;
|
|
525
541
|
/**
|
|
526
|
-
*
|
|
527
|
-
*
|
|
542
|
+
* Changes to a replica, as messages: sent to a `Starting` engine as they are (the channel holds
|
|
543
|
+
* them in order), and to a `Running` one only where the replica does not already say so, as ONE
|
|
544
|
+
* message - the replica is rebuilt and reconciled once per message, over every symbol, so a batch
|
|
545
|
+
* told a symbol at a time costs the square of its size.
|
|
528
546
|
*/
|
|
529
|
-
protected
|
|
547
|
+
protected _sendSymbolChanges<T>(kind: 'tables' | 'names', changes: readonly (readonly [string, T | null])[], same: (a: T | null | undefined, b: T | null) => boolean): void;
|
|
530
548
|
/**
|
|
531
549
|
* While `Starting`: per kind, the held symbol message a new symbol of that kind joins, and the
|
|
532
550
|
* ids every message of the start has told. Dropped with the channel - see {@link _sendSymbolChange}.
|
|
@@ -729,6 +747,8 @@ export declare namespace Calculation {
|
|
|
729
747
|
authoredAt: IRange.CellCoords;
|
|
730
748
|
/** Each cell of the block is its own 1x1 array-entered formula. See {@link ICalculation.EvaluateOptions.arrayFirstCell}. */
|
|
731
749
|
arrayFirstCell?: boolean;
|
|
750
|
+
/** How long to wait for the cells' async calls. See {@link ICalculation.EvaluateOptions.timeout}. */
|
|
751
|
+
timeout?: number;
|
|
732
752
|
}
|
|
733
753
|
/** See {@link Calculation._createFormulaHost}. */
|
|
734
754
|
interface FormulaHostOptions {
|
|
@@ -789,6 +809,15 @@ export declare namespace Calculation {
|
|
|
789
809
|
* @see {@link FunctionProvider}
|
|
790
810
|
*/
|
|
791
811
|
functions?: readonly FunctionProvider[];
|
|
812
|
+
/**
|
|
813
|
+
* Custom functions to register at every start, ahead of the first pass: a workbook's script
|
|
814
|
+
* functions, so a formula calling one calculates on load rather than answering `#NAME?`.
|
|
815
|
+
*
|
|
816
|
+
* @remarks
|
|
817
|
+
* Asked once per start, alongside loading the engine. A function the registry refuses (a
|
|
818
|
+
* built-in's name) is reported and skipped; the start goes on with the rest.
|
|
819
|
+
*/
|
|
820
|
+
startFunctions?: () => Promise<readonly IFunction[]>;
|
|
792
821
|
/**
|
|
793
822
|
* Returns the active cell — the current selection anchor — with its sheet id as `scope`.
|
|
794
823
|
* Supplies the default scope for temporary / named-formula resolution, and the default
|
|
@@ -846,6 +875,15 @@ export declare namespace Calculation {
|
|
|
846
875
|
getSheetIndex?: (sheetName?: string) => number;
|
|
847
876
|
getSheetCount?: () => number;
|
|
848
877
|
strings?: IStringCollection;
|
|
878
|
+
/**
|
|
879
|
+
* The workbook's binary resources (image bytes), for rich values a formula makes.
|
|
880
|
+
*/
|
|
881
|
+
resources?: IResourceCollection;
|
|
882
|
+
/**
|
|
883
|
+
* The workbook's fetch, for async functions (`IFormulaContext.IBatchContext.fetch`). Omitted,
|
|
884
|
+
* the global `fetch`.
|
|
885
|
+
*/
|
|
886
|
+
fetch?: (input: string, init?: RequestInit) => Promise<Response>;
|
|
849
887
|
/**
|
|
850
888
|
* Whether to perform iterative calculations when there are circular dependencies.
|
|
851
889
|
*
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { Scalar } from '@sheetxl/primitives';
|
|
2
|
-
import { ICell } from '../cell';
|
|
3
2
|
import { Tuple } from '../collections';
|
|
4
3
|
import { IExternalBookCollection } from '../externalBook';
|
|
5
4
|
import { CalcGridBackend, FormulaHost } from './grid';
|
|
@@ -87,11 +86,11 @@ export declare class ExternalBookBindings {
|
|
|
87
86
|
* column-major scalar tuples a `CalcGridBackend` loads.
|
|
88
87
|
*
|
|
89
88
|
* @remarks
|
|
90
|
-
* `
|
|
89
|
+
* `Scalar.JSON`'s untyped arm is a bare primitive, and the cache's strings are LITERAL (never a
|
|
91
90
|
* string-table index — the part inlines them, design doc §1). The typed arm carries an error by
|
|
92
91
|
* code. `null` when the cache holds nothing.
|
|
93
92
|
*/
|
|
94
|
-
export declare function cacheToGridTuples(data: Tuple.GridTuple<
|
|
93
|
+
export declare function cacheToGridTuples(data: Tuple.GridTuple<Scalar.JSON> | null | undefined): Tuple.GridTuple<Scalar> | null;
|
|
95
94
|
export declare namespace ExternalBookBindings {
|
|
96
95
|
interface ConstructorOptions {
|
|
97
96
|
/** The collection to mirror — read fresh on every {@link ExternalBookBindings.sync}. */
|
|
@@ -19,7 +19,9 @@ export interface ICalculation extends IModel {
|
|
|
19
19
|
* @returns A promise that will be resolved when the calculation is completed.
|
|
20
20
|
*
|
|
21
21
|
* @remarks
|
|
22
|
-
* For async functions this will return before they are completed.
|
|
22
|
+
* For async functions this will return before they are completed. An async function is called
|
|
23
|
+
* again unless its call is still running; what it fetches is answered
|
|
24
|
+
* from the workbook's cache unless {@link ICalculation.CalculateOptions.external} is set.
|
|
23
25
|
*/
|
|
24
26
|
calculate(options?: boolean | ICalculation.CalculateOptions): Promise<ICalculation.Status>;
|
|
25
27
|
/**
|
|
@@ -38,7 +40,7 @@ export interface ICalculation extends IModel {
|
|
|
38
40
|
/**
|
|
39
41
|
* Resolves once the engine is running and idle: its calculation state is
|
|
40
42
|
* {@link ICalculation.CalculationState.Done}, or {@link ICalculation.CalculationState.Pending} in
|
|
41
|
-
* manual mode.
|
|
43
|
+
* manual mode (and, under `AutomaticExceptTables`, with only data tables out of date).
|
|
42
44
|
*
|
|
43
45
|
* @remarks
|
|
44
46
|
* * After it, every answer the engine owes has landed: a formula written before it reads as
|
|
@@ -46,14 +48,46 @@ export interface ICalculation extends IModel {
|
|
|
46
48
|
* * Manual mode does not wait for a recalculation nobody has asked for; call {@link calculate}.
|
|
47
49
|
* * Waits for what consumers derive from the results too ({@link waitUntil}): a conditional
|
|
48
50
|
* format reads as painted after it, including one a read just asked to evaluate.
|
|
49
|
-
* *
|
|
50
|
-
*
|
|
51
|
+
* * An async function's result in flight is not waited for: its cell reads as what the
|
|
52
|
+
* function returned until the result arrives.
|
|
51
53
|
* * Starts the engine if it is {@link ICalculation.Status.Off}. An engine in
|
|
52
54
|
* {@link ICalculation.Status.Error} is not started; {@link start} tries again.
|
|
53
55
|
*
|
|
54
56
|
* @param options Pass `{ full: true }` to recalculate every grid rather than only the dirty ones.
|
|
55
57
|
*/
|
|
56
58
|
ready(options?: ICalculation.CalculateOptions): Promise<ICalculation.Status>;
|
|
59
|
+
/**
|
|
60
|
+
* How many async function calls are waiting for an answer.
|
|
61
|
+
*/
|
|
62
|
+
getPendingCount(): number;
|
|
63
|
+
/**
|
|
64
|
+
* Resolves once no async function call is pending ({@link getPendingCount} is `0`) and every
|
|
65
|
+
* answer has been calculated into the workbook — Excel's `CalculateUntilAsyncQueriesDone`.
|
|
66
|
+
*
|
|
67
|
+
* @param options `timeout` in milliseconds; 30 seconds when absent.
|
|
68
|
+
* @returns `true` when nothing is pending; `false` when the timeout came first.
|
|
69
|
+
*
|
|
70
|
+
* @remarks
|
|
71
|
+
* * An answer that makes a formula ask a new question (one call's answer is another's input)
|
|
72
|
+
* is waited for too.
|
|
73
|
+
* * {@link ready} is the engine's own readiness and does not wait for answers.
|
|
74
|
+
*/
|
|
75
|
+
whenPendingDone(options?: {
|
|
76
|
+
timeout?: number;
|
|
77
|
+
}): Promise<boolean>;
|
|
78
|
+
/**
|
|
79
|
+
* Stops waiting for async function calls — Excel's *Cancel Refresh*: each pending
|
|
80
|
+
* call the options cover is closed, and the function is told (its `onCancel`).
|
|
81
|
+
*
|
|
82
|
+
* @param options Which calls; every call when absent.
|
|
83
|
+
* @returns A promise that resolves once the cells have been recalculated.
|
|
84
|
+
*
|
|
85
|
+
* @remarks
|
|
86
|
+
* * A cell keeps what it showed — its last answer, or the value its function returned while it
|
|
87
|
+
* waited — and is no longer pending. An answer that arrives later is dropped.
|
|
88
|
+
* * A recalculation of a cancelled cell calls its function again.
|
|
89
|
+
*/
|
|
90
|
+
cancelAsync(options?: ICalculation.CancelOptions): Promise<ICalculation.Status>;
|
|
57
91
|
/**
|
|
58
92
|
* Counts `work` that a consumer derives from the engine's results as calculation in flight
|
|
59
93
|
* until it settles: {@link ready} waits for it, and {@link getCalculationState} reads
|
|
@@ -1042,6 +1076,14 @@ export declare namespace ICalculation {
|
|
|
1042
1076
|
* Use {@link ICalculation.FormulaToken.evalIndex} to discover valid indices.
|
|
1043
1077
|
*/
|
|
1044
1078
|
evalIndex?: number;
|
|
1079
|
+
/**
|
|
1080
|
+
* How long to wait, in milliseconds, for the answers of async functions the formula calls:
|
|
1081
|
+
* the evaluation resolves once each has answered, and
|
|
1082
|
+
* answers a `#TIMEOUT!` error naming the call it waited on when the time runs out.
|
|
1083
|
+
*
|
|
1084
|
+
* @defaultValue `30000`
|
|
1085
|
+
*/
|
|
1086
|
+
timeout?: number;
|
|
1045
1087
|
/**
|
|
1046
1088
|
* Temporary range of values to use for this evaluation.
|
|
1047
1089
|
*
|
|
@@ -1174,6 +1216,15 @@ export declare namespace ICalculation {
|
|
|
1174
1216
|
* Called when the calculation state has changed - see {@link ICalculation.getCalculationState}.
|
|
1175
1217
|
*/
|
|
1176
1218
|
onCalculationStateChange?(source: ICalculation): void;
|
|
1219
|
+
/**
|
|
1220
|
+
* Called when the number of async function calls waiting for an answer may have changed — see
|
|
1221
|
+
* {@link ICalculation.getPendingCount}.
|
|
1222
|
+
*
|
|
1223
|
+
* @remarks
|
|
1224
|
+
* Called when calls are made, when answers are applied, and on a cancel or a stop: answers
|
|
1225
|
+
* arriving together are one call.
|
|
1226
|
+
*/
|
|
1227
|
+
onPendingChange?(source: ICalculation): void;
|
|
1177
1228
|
/**
|
|
1178
1229
|
* Called when a calculation is completed.
|
|
1179
1230
|
*/
|
|
@@ -1242,7 +1293,8 @@ export declare namespace ICalculation {
|
|
|
1242
1293
|
readonly Calculating: "calculating";
|
|
1243
1294
|
/**
|
|
1244
1295
|
* Changes have been made that need a recalculation, and none will run until one is asked for:
|
|
1245
|
-
* manual mode between an edit and {@link ICalculation.calculate}
|
|
1296
|
+
* manual mode between an edit and {@link ICalculation.calculate}, or the `TABLE` data tables an
|
|
1297
|
+
* edit left out of date under `AutomaticExceptTables`.
|
|
1246
1298
|
*/
|
|
1247
1299
|
readonly Pending: "pending";
|
|
1248
1300
|
};
|
|
@@ -1313,14 +1365,16 @@ export declare namespace ICalculation {
|
|
|
1313
1365
|
*/
|
|
1314
1366
|
readonly Stale: "stale";
|
|
1315
1367
|
/**
|
|
1316
|
-
* The
|
|
1317
|
-
*
|
|
1368
|
+
* The cell's own function asked for its result later (`FormulaContext.defer`) and it has not
|
|
1369
|
+
* arrived: the cell shows what the function returned meanwhile, and its dependents calculate
|
|
1370
|
+
* from that and read as {@link Waiting}. A failed call answers an error value.
|
|
1318
1371
|
*/
|
|
1319
1372
|
readonly Pending: "pending";
|
|
1320
1373
|
/**
|
|
1321
|
-
* The value
|
|
1374
|
+
* The value was calculated from a pending value — a precedent whose function has not answered —
|
|
1375
|
+
* and will be calculated again when it does.
|
|
1322
1376
|
*/
|
|
1323
|
-
readonly
|
|
1377
|
+
readonly Waiting: "waiting";
|
|
1324
1378
|
};
|
|
1325
1379
|
type ResultStatus = typeof ResultStatus[keyof typeof ResultStatus];
|
|
1326
1380
|
/**
|
|
@@ -1358,6 +1412,39 @@ export declare namespace ICalculation {
|
|
|
1358
1412
|
* live in other sheets, and a named formula's body lives in a virtual grid of its own.
|
|
1359
1413
|
*/
|
|
1360
1414
|
scope?: string;
|
|
1415
|
+
/**
|
|
1416
|
+
* If `true`, what the calculation reads from outside the workbook is read from the source
|
|
1417
|
+
* again rather than from the workbook's cache — Excel's *Data › Refresh All*: what the async
|
|
1418
|
+
* functions it calls fetch, and, for a calculation that is neither {@link range} nor
|
|
1419
|
+
* {@link scope}, every external book (`IExternalBookCollection.refreshAll`).
|
|
1420
|
+
*
|
|
1421
|
+
* @remarks
|
|
1422
|
+
* * Which functions are called is the calculation's own choice, as without it: pass
|
|
1423
|
+
* {@link full} for every formula. A call still running is left be.
|
|
1424
|
+
* * The calculation resolves without waiting for the new answers or the external books.
|
|
1425
|
+
*
|
|
1426
|
+
* @example Refresh All
|
|
1427
|
+
* ```ts
|
|
1428
|
+
* await workbook.getCalculation().calculate({ full: true, external: true });
|
|
1429
|
+
* ```
|
|
1430
|
+
*
|
|
1431
|
+
* @defaultValue `false`
|
|
1432
|
+
*/
|
|
1433
|
+
external?: boolean;
|
|
1434
|
+
}
|
|
1435
|
+
/**
|
|
1436
|
+
* Options for {@link ICalculation.cancelAsync}.
|
|
1437
|
+
*/
|
|
1438
|
+
interface CancelOptions {
|
|
1439
|
+
/**
|
|
1440
|
+
* Only the calls of the formulas in this range are cancelled.
|
|
1441
|
+
*/
|
|
1442
|
+
range?: ICellRange.Address;
|
|
1443
|
+
/**
|
|
1444
|
+
* Only the calls of the formulas on this sheet, by name, are cancelled. Ignored when
|
|
1445
|
+
* {@link range} is set.
|
|
1446
|
+
*/
|
|
1447
|
+
scope?: string;
|
|
1361
1448
|
}
|
|
1362
1449
|
interface JSON {
|
|
1363
1450
|
/**
|
|
@@ -3,9 +3,9 @@ import { ITransaction } from '../transaction';
|
|
|
3
3
|
import { IListener } from '../listener';
|
|
4
4
|
import { ICellRange, ICellRanges } from '../cellRange';
|
|
5
5
|
import { NamedNodeInfo, ReferenceCoords } from './Types';
|
|
6
|
-
import { INamed } from '../named';
|
|
6
|
+
import { INamed, INamedCollection } from '../named';
|
|
7
7
|
import { ITypes, AbstractCollection } from '../type';
|
|
8
|
-
import { FormulaHost } from './grid';
|
|
8
|
+
import { FormulaHost, ICalcGrid } from './grid';
|
|
9
9
|
import { Formula, IFormulaBlockView } from './formula';
|
|
10
10
|
import { ICalculation } from './ICalculation';
|
|
11
11
|
import { INamedFormulasCollection } from './INamedFormulasCollection';
|
|
@@ -75,6 +75,8 @@ export declare class NamedFormulaCollection extends AbstractCollection<ICalculat
|
|
|
75
75
|
*/
|
|
76
76
|
private _nameIndex;
|
|
77
77
|
constructor(options?: NamedFormulaCollection.ConstructorOptions);
|
|
78
|
+
/** Loaded names some write has given a state of their own - see {@link NamedFormula._writeNamedState}. */
|
|
79
|
+
private _written;
|
|
78
80
|
/**
|
|
79
81
|
* Hydrates from `IWorkbook.JSON.names`. A malformed entry is warned and skipped rather than
|
|
80
82
|
* failing the whole load — one bad name must not cost the workbook every other name.
|
|
@@ -157,6 +159,27 @@ export declare class NamedFormulaCollection extends AbstractCollection<ICalculat
|
|
|
157
159
|
* text and is left alone. Items of another source are not this collection's and are skipped.
|
|
158
160
|
*/
|
|
159
161
|
prepareRanges(items: readonly INamed[]): void;
|
|
162
|
+
/**
|
|
163
|
+
* {@inheritDoc NamedCollection.Source.removeUnused}
|
|
164
|
+
*
|
|
165
|
+
* @remarks
|
|
166
|
+
* A name that has not compiled has no compiled reader - a formula that reads a name binds it - so
|
|
167
|
+
* only the compiled ones are asked of the engine. What the engine cannot see is a reader that has
|
|
168
|
+
* not compiled either: a kept name whose definition spells a candidate keeps it, and whatever that
|
|
169
|
+
* one spells in turn. By spelling, so lenient - a name wrongly kept costs nothing, one wrongly
|
|
170
|
+
* removed breaks the name that read it.
|
|
171
|
+
*
|
|
172
|
+
* A LAMBDA is called, not bound, so it is never removed; nor is a built-in name (`_xlnm.`),
|
|
173
|
+
* which the sheet reads rather than any formula.
|
|
174
|
+
*/
|
|
175
|
+
removeUnused(options: INamedCollection.RemoveUnusedOptions & {
|
|
176
|
+
scope?: string;
|
|
177
|
+
}): Promise<number>;
|
|
178
|
+
/**
|
|
179
|
+
* Deletes `items` as ONE operation: each item's own writes, then a single rewrite of the set.
|
|
180
|
+
* Deleted one at a time, each removal copies the set, and a legacy file's names are thousands.
|
|
181
|
+
*/
|
|
182
|
+
protected _removeMany(items: readonly NamedFormula[]): void;
|
|
160
183
|
/**
|
|
161
184
|
* Compiles the loaded names among `items` that have not compiled, as ONE operation.
|
|
162
185
|
*
|
|
@@ -306,6 +329,8 @@ export declare class NamedFormulaCollection extends AbstractCollection<ICalculat
|
|
|
306
329
|
*/
|
|
307
330
|
_addNamesWrittenListener(listeners: IListener.Callbacks<NamedFormulaCollection, NamedFormulaCollection.NamesWrittenEvents>): IListener.Remove;
|
|
308
331
|
protected _notifyNamesWritten(item: NamedFormula, removed: boolean): void;
|
|
332
|
+
/** {@link _notifyNamesWritten} for a batch, told as one. */
|
|
333
|
+
protected _notifyManyWritten(items: readonly NamedFormula[], removed: boolean): void;
|
|
309
334
|
/**
|
|
310
335
|
* Every name as {@link _addNamesWrittenListener} tells one: what a listener starts from.
|
|
311
336
|
* @internal
|
|
@@ -331,7 +356,7 @@ export declare namespace NamedFormulaCollection {
|
|
|
331
356
|
}
|
|
332
357
|
/** See {@link NamedFormulaCollection._addNamesWrittenListener}. */
|
|
333
358
|
interface NamesWrittenEvents {
|
|
334
|
-
onNamesWritten?(source: NamedFormulaCollection, written: NamesWritten): void;
|
|
359
|
+
onNamesWritten?(source: NamedFormulaCollection, written: readonly NamesWritten[]): void;
|
|
335
360
|
}
|
|
336
361
|
interface ConstructorOptions {
|
|
337
362
|
/**
|
|
@@ -396,6 +421,12 @@ export declare namespace NamedFormulaCollection {
|
|
|
396
421
|
recompileNamed(nameId: string): void;
|
|
397
422
|
/** The root of the name's compiled body, or `null` while it has none. */
|
|
398
423
|
getBodyNode(nameId: string): ICalculation.FormulaNode | null;
|
|
424
|
+
/**
|
|
425
|
+
* The name's precedents or dependents, cells in calc currency and names, as the engine walks
|
|
426
|
+
* them - asked by the name's id, so a name that has not compiled is asked without compiling it.
|
|
427
|
+
* Nothing while the engine is `Off`.
|
|
428
|
+
*/
|
|
429
|
+
getNameGraph(nameId: string, kind: 'precedents' | 'dependents', direct: boolean): Promise<ICalcGrid.GraphNeighbors>;
|
|
399
430
|
/**
|
|
400
431
|
* Runs `batch` with the grids it makes collected into one write of the engine's registry, under
|
|
401
432
|
* one clone key - see `CalcBackend._collectingGrids`. Without it each grid is its own write,
|
|
@@ -457,7 +488,10 @@ interface NamedFormulaWireOptions {
|
|
|
457
488
|
* supplied is implemented here against the transaction store the item already holds.
|
|
458
489
|
*/
|
|
459
490
|
declare class NamedFormula extends Formula implements ICalculation.INamedFormula, INamed<string> {
|
|
460
|
-
/**
|
|
491
|
+
/**
|
|
492
|
+
* Transactional state — see the field docs on `_transactions`. A loaded name nothing has written
|
|
493
|
+
* reads what the file said, as does one an undo took back past its first write.
|
|
494
|
+
*/
|
|
461
495
|
private _getNamedState;
|
|
462
496
|
private readonly _id;
|
|
463
497
|
/**
|
|
@@ -465,7 +499,19 @@ declare class NamedFormula extends Formula implements ICalculation.INamedFormula
|
|
|
465
499
|
* mutation is undoable.
|
|
466
500
|
*/
|
|
467
501
|
private readonly _transactions;
|
|
468
|
-
|
|
502
|
+
/**
|
|
503
|
+
* `null` for a loaded name until its first write: every commit copies the store's snapshot, and a
|
|
504
|
+
* legacy file's tens of thousands of names were nearly all of it. See {@link _writeNamedState}.
|
|
505
|
+
*/
|
|
506
|
+
private _stateId;
|
|
507
|
+
/** What a loaded name's file said: its state until written, and again when undone past that write. */
|
|
508
|
+
private readonly _loaded;
|
|
509
|
+
/** Tells the collection a loaded name has a state now, so it hears an undo that removes it. */
|
|
510
|
+
private readonly _noteWritten;
|
|
511
|
+
/** Whether the collection lists this item now — a loaded name's deletion when it has no state. */
|
|
512
|
+
private readonly _isListed;
|
|
513
|
+
/** {@link _loaded}, deleted. */
|
|
514
|
+
private _loadedDeleted;
|
|
469
515
|
private readonly _deleteFromCollection;
|
|
470
516
|
private readonly _wire;
|
|
471
517
|
/** Refuses a rename that would collide with a sibling — see {@link setName}. */
|
|
@@ -484,6 +530,11 @@ declare class NamedFormula extends Formula implements ICalculation.INamedFormula
|
|
|
484
530
|
private readonly _notifyCollection;
|
|
485
531
|
/** The collection's {@link NamedFormulaCollection._addNamesWrittenListener}, for a rename. */
|
|
486
532
|
private readonly _notifyNameWritten;
|
|
533
|
+
/**
|
|
534
|
+
* Made on the first `addListeners`. Every emitter on the shared store is told of every commit, and
|
|
535
|
+
* a legacy file's tens of thousands of names nothing listens to made each commit pay for all of
|
|
536
|
+
* them. Until it exists there is nobody to notify.
|
|
537
|
+
*/
|
|
487
538
|
private _emitter;
|
|
488
539
|
private _transactionsRemoveListener;
|
|
489
540
|
private _closed;
|
|
@@ -528,8 +579,48 @@ declare class NamedFormula extends Formula implements ICalculation.INamedFormula
|
|
|
528
579
|
* `undefined` (no grid, or nothing compiled at its origin) is the pre-wire state, which every
|
|
529
580
|
* accessor below already has a fallback for.
|
|
530
581
|
*/
|
|
582
|
+
/** Hears this name's own state: made with the item, or by a loaded name's first write. */
|
|
583
|
+
private _listenToState;
|
|
584
|
+
/**
|
|
585
|
+
* Whether an undo has taken this loaded name back past its first write: it has a state id, and
|
|
586
|
+
* the snapshot the store is at does not hold it.
|
|
587
|
+
* @internal
|
|
588
|
+
*/
|
|
589
|
+
_isStateAbsent(): boolean;
|
|
590
|
+
/**
|
|
591
|
+
* An undo/redo repointed the store.
|
|
592
|
+
* @internal
|
|
593
|
+
*/
|
|
594
|
+
_onRestoreOrRevert(): void;
|
|
595
|
+
/**
|
|
596
|
+
* {@link delete}'s own writes, inside an operation the collection holds — its removal from the
|
|
597
|
+
* set is the caller's, made once for many.
|
|
598
|
+
*
|
|
599
|
+
* @remarks
|
|
600
|
+
* A loaded name nothing has written writes no state: not being listed is its deletion (see
|
|
601
|
+
* {@link _getNamedState}), so deleting a legacy file's thousands of names adds nothing to every
|
|
602
|
+
* later commit's snapshot.
|
|
603
|
+
* @internal
|
|
604
|
+
*/
|
|
605
|
+
_deleteWithin(trans: ITransaction): void;
|
|
606
|
+
/**
|
|
607
|
+
* Adds every identifier this name's definition spells, lowercased, to `into` — nothing for a
|
|
608
|
+
* literal, which reads no name.
|
|
609
|
+
* @internal
|
|
610
|
+
*/
|
|
611
|
+
_addSpelledNames(into: Set<string>): void;
|
|
612
|
+
/**
|
|
613
|
+
* Writes this item's state in `trans`.
|
|
614
|
+
*
|
|
615
|
+
* @remarks
|
|
616
|
+
* A loaded name has no state until this runs: it is made here, inside the write, so the commit
|
|
617
|
+
* before the write has none and an undo past it reads {@link _loaded} again. Whenever the
|
|
618
|
+
* snapshot holds no state - the first write, or one after such an undo - the write carries the
|
|
619
|
+
* whole of it, since an update merges onto what the store holds.
|
|
620
|
+
*/
|
|
621
|
+
private _writeNamedState;
|
|
531
622
|
protected get _block(): IFormulaBlockView;
|
|
532
|
-
constructor(coords: IRange.CellCoords | null, options: INamedFormulasCollection.AddOptions, deleteFromCollection: () => void, wire: NamedFormulaWireOptions | null, gridId?: string | null, checkRename?: (nextName: string) => void, transactions?: ITransaction.IStore, isReadOnly?: (() => boolean) | null, resolveSheetScope?: (stableId: string) => string | null, notifyCollection?: () => void, notifyNameWritten?: () => void, lazy?: boolean);
|
|
623
|
+
constructor(coords: IRange.CellCoords | null, options: INamedFormulasCollection.AddOptions, deleteFromCollection: () => void, wire: NamedFormulaWireOptions | null, gridId?: string | null, checkRename?: (nextName: string) => void, transactions?: ITransaction.IStore, isReadOnly?: (() => boolean) | null, resolveSheetScope?: (stableId: string) => string | null, notifyCollection?: () => void, notifyNameWritten?: () => void, lazy?: boolean, noteWritten?: () => void, isListed?: () => boolean);
|
|
533
624
|
/**
|
|
534
625
|
* Writes this name's body, which binds it to the region its expression designates once the
|
|
535
626
|
* engine answers.
|
|
@@ -811,10 +902,15 @@ declare class NamedFormula extends Formula implements ICalculation.INamedFormula
|
|
|
811
902
|
getPrecedents(): Promise<ICellRanges | null>;
|
|
812
903
|
/**
|
|
813
904
|
* The precedents or dependents of this NAME — cells and names, ONE answer — as the engine walks
|
|
814
|
-
* them
|
|
815
|
-
*
|
|
905
|
+
* them (see `CalcBackend._nameGraphNow` for the walk: the symbol edges names ride on, and the
|
|
906
|
+
* cell graph between them).
|
|
816
907
|
*
|
|
817
908
|
* @remarks
|
|
909
|
+
* Only the precedents read the body, so only they compile it, and a literal has none. The
|
|
910
|
+
* dependents are asked by id and never compile: a formula that reads this name bound it when it
|
|
911
|
+
* compiled, so a name still waiting for its first use has no compiled reader to find — and a
|
|
912
|
+
* report asking every name of a legacy file must not compile thousands of them to learn that.
|
|
913
|
+
*
|
|
818
914
|
* What is left here is the translation out of calc currency: a cell on no addressable sheet
|
|
819
915
|
* drops, and the rest are reduced to regions, not a list of blocks - two formulas naming this
|
|
820
916
|
* name in adjacent cells are one range, and the deep walk can reach one block down two paths.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* The clone boundary: a test mode that treats the model/engine crossing as if it were a wire
|
|
3
|
-
* (DESIGN-CALC-SERVICE §11, goal G1
|
|
3
|
+
* (DESIGN-CALC-SERVICE §11, goal G1).
|
|
4
4
|
*
|
|
5
5
|
* @remarks
|
|
6
6
|
* Every request into a grid and every {@link ICalcGrid.Results} out of one passes through here.
|
|
@@ -235,10 +235,14 @@ export interface NamedNode extends ASTNode<typeof TokenType.Named, NamedReferenc
|
|
|
235
235
|
}
|
|
236
236
|
export interface FunctionNode extends ASTNode<typeof TokenType.Function, any> {
|
|
237
237
|
/**
|
|
238
|
-
*
|
|
239
|
-
*
|
|
238
|
+
* The function this call resolved to.
|
|
240
239
|
*/
|
|
241
240
|
cacheFn?: IFunction;
|
|
241
|
+
/**
|
|
242
|
+
* The registry stamp `cacheFn` resolved under, for a custom function; `undefined` for a built-in,
|
|
243
|
+
* which never changes.
|
|
244
|
+
*/
|
|
245
|
+
cacheFnStamp?: number;
|
|
242
246
|
}
|
|
243
247
|
export type ParenNode = ASTNode<typeof TokenType.Paren>;
|
|
244
248
|
/**
|