@univerjs-pro/engine-formula 1.0.0-alpha.2 → 1.0.0-alpha.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -2
- package/lib/cjs/facade.js +1 -1
- package/lib/cjs/index.js +1 -1
- package/lib/es/facade.js +1 -1
- package/lib/es/index.js +1 -1
- package/lib/facade.js +1 -1
- package/lib/index.js +1 -1
- package/lib/types/controllers/external-reference-data-providers.controller.d.ts +6 -0
- package/lib/types/controllers/external-reference-rename.controller.d.ts +9 -0
- package/lib/types/controllers/external-reference-resource.controller.d.ts +6 -0
- package/lib/types/controllers/formula-reference-data-rpc.controller.d.ts +7 -0
- package/lib/types/engine/dependency-engine/dependency-engine.d.ts +11 -0
- package/lib/types/engine/dependency-engine/formula-cell-index.d.ts +1 -0
- package/lib/types/engine/dependency-engine/range-index.d.ts +1 -0
- package/lib/types/engine/dependency-engine/types.d.ts +1 -0
- package/lib/types/engine/formula-dependency.d.ts +31 -5
- package/lib/types/index.d.ts +22 -4
- package/lib/types/models/external-reference-overlay.model.d.ts +41 -0
- package/lib/types/models/external-reference.model.d.ts +91 -0
- package/lib/types/plugin.d.ts +8 -0
- package/lib/types/services/calculate-formula.service.d.ts +20 -3
- package/lib/types/services/dependency-manager.service.d.ts +7 -2
- package/lib/types/services/external-cache-reference-data.provider.d.ts +10 -0
- package/lib/types/services/external-reference-prefetch-planner.d.ts +18 -0
- package/lib/types/services/external-reference-prefetch.service.d.ts +38 -0
- package/lib/types/services/external-unit-reference-resolver.service.d.ts +8 -0
- package/lib/types/services/formula-reference-data.service.d.ts +71 -0
- package/lib/types/services/main-formula-reference-data.service.d.ts +12 -0
- package/lib/umd/facade.js +1 -1
- package/lib/umd/index.js +1 -1
- package/package.json +7 -6
- package/lib/types/engine/dependency-engine.d.ts +0 -8
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Disposable, IResourceManagerService } from '@univerjs/core';
|
|
2
|
+
import { ExternalReferenceOverlayModel } from '../models/external-reference-overlay.model';
|
|
3
|
+
import { ExternalReferenceModel } from '../models/external-reference.model';
|
|
4
|
+
export declare class ExternalReferenceResourceController extends Disposable {
|
|
5
|
+
constructor(resourceManagerService: IResourceManagerService, externalReferenceModel: ExternalReferenceModel, externalReferenceOverlayModel: ExternalReferenceOverlayModel);
|
|
6
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Disposable } from '@univerjs/core';
|
|
2
|
+
import { IRPCChannelService } from '@univerjs/rpc';
|
|
3
|
+
import { IFormulaReferenceDataService } from '../services/formula-reference-data.service';
|
|
4
|
+
export declare const FORMULA_REFERENCE_DATA_RPC_CHANNEL = "univer-pro.formula.reference-data";
|
|
5
|
+
export declare class FormulaReferenceDataRpcController extends Disposable {
|
|
6
|
+
constructor(rpcChannelService: IRPCChannelService, referenceDataService: IFormulaReferenceDataService);
|
|
7
|
+
}
|
|
@@ -85,6 +85,7 @@ export declare class DependencyEngine {
|
|
|
85
85
|
*/
|
|
86
86
|
reset(): void;
|
|
87
87
|
encodeCell(unitId: string, sheetId: string, row: number, col: number): CellId;
|
|
88
|
+
reserveDependencyCapacity(minNodeCapacity: number, minRangeCapacity?: number): void;
|
|
88
89
|
decodeCell(cell: CellId): IDecodedCell;
|
|
89
90
|
encodeFeatureCalculationId(unitId: string, sheetId: string, formulaId: string): string;
|
|
90
91
|
decodeFeatureCalculationId(id: ExternalNodeId): IDecodedFeatureCalculationId;
|
|
@@ -95,6 +96,12 @@ export declare class DependencyEngine {
|
|
|
95
96
|
markDirty?: boolean;
|
|
96
97
|
mode?: 'replace' | 'merge';
|
|
97
98
|
}): ISetNodeResult;
|
|
99
|
+
setNewCellFormulaDeps(cell: CellId, deps: ICalcNodeDeps): ISetNodeResult;
|
|
100
|
+
setNewCellFormulaNodeOnly(cell: CellId): ISetNodeResult;
|
|
101
|
+
setNewCellFormulaNodeOnlyRange(unitId: string, sheetId: string, range: IRefRange['range'], skip?: {
|
|
102
|
+
row: number;
|
|
103
|
+
col: number;
|
|
104
|
+
}): CalcNodeIndex[];
|
|
98
105
|
setOtherFormulaDeps(id: ExternalNodeId, deps: ICalcNodeDeps, options?: {
|
|
99
106
|
checkCycle?: boolean;
|
|
100
107
|
markDirty?: boolean;
|
|
@@ -279,7 +286,9 @@ export declare class DependencyEngine {
|
|
|
279
286
|
private _isEmptyCalcNodeDeps;
|
|
280
287
|
private _unregisterCompressedSharedFormulaGroupByNode;
|
|
281
288
|
private _markCompressedSharedFormulaMembership;
|
|
289
|
+
private _markCompressedSharedFormulaMembershipByNodeIndices;
|
|
282
290
|
private _clearCompressedSharedFormulaMembership;
|
|
291
|
+
private _clearCompressedSharedFormulaMembershipByNodeIndices;
|
|
283
292
|
private _getCompressedSharedSourceCoverage;
|
|
284
293
|
private _forEachCompressedSharedDependentByRange;
|
|
285
294
|
private _forEachActiveCellFormulaInRange;
|
|
@@ -289,6 +298,7 @@ export declare class DependencyEngine {
|
|
|
289
298
|
private _getCompressedSharedPrecedentCell;
|
|
290
299
|
private _getCompressedSharedPrecedentRange;
|
|
291
300
|
private _addNodeDepsOnly;
|
|
301
|
+
private _addNewNodeDepsOnly;
|
|
292
302
|
private _removeNodeDepsOnly;
|
|
293
303
|
private _collectDynamicResolveResult;
|
|
294
304
|
private _addRuntimeDepsOnly;
|
|
@@ -297,6 +307,7 @@ export declare class DependencyEngine {
|
|
|
297
307
|
private _detachPrecedentFromDependent;
|
|
298
308
|
private _detachRuntimePrecedentFromDependent;
|
|
299
309
|
private _addDirectEdge;
|
|
310
|
+
private _addDirectEdgeForNewNode;
|
|
300
311
|
private _removeDirectEdge;
|
|
301
312
|
private _addRuntimeDirectEdge;
|
|
302
313
|
private _removeRuntimeDirectEdge;
|
|
@@ -14,6 +14,7 @@ export declare class FormulaCellIndex {
|
|
|
14
14
|
private readonly _colBuckets;
|
|
15
15
|
constructor(_codec: CellCodec, _indexToNodeId: ExternalNodeId[]);
|
|
16
16
|
addFormulaCell(formulaCell: number, nodeIndex: CalcNodeIndex): void;
|
|
17
|
+
addFormulaCellByPosition(sheetKey: number, row: number, col: number, nodeIndex: CalcNodeIndex): void;
|
|
17
18
|
removeFormulaCell(formulaCell: number, nodeIndex: CalcNodeIndex): void;
|
|
18
19
|
forEachFormulaInRange(rangeInput: IRefRange, cb: (nodeIndex: CalcNodeIndex) => boolean | void): boolean;
|
|
19
20
|
private _scanRows;
|
|
@@ -36,6 +36,7 @@ export declare class RangeIndex {
|
|
|
36
36
|
private readonly _nodeToWholeColKeys;
|
|
37
37
|
private readonly _nodeToWholeRowKeys;
|
|
38
38
|
constructor(_codec: CellCodec, initialCapacity: number, _maxIndexedSpan: number);
|
|
39
|
+
reserveCapacity(minCapacity: number): void;
|
|
39
40
|
addRange(nodeIndex: CalcNodeIndex, rangeInput: IRefRange): void;
|
|
40
41
|
removeNode(nodeIndex: CalcNodeIndex): void;
|
|
41
42
|
/**
|
|
@@ -109,6 +109,7 @@ export interface ICompressedSharedFormulaGroup {
|
|
|
109
109
|
groupId: string;
|
|
110
110
|
fillRange: IRefRange;
|
|
111
111
|
patterns: ICompressedSharedFormulaPattern[];
|
|
112
|
+
memberNodeIndices?: CalcNodeIndex[];
|
|
112
113
|
}
|
|
113
114
|
export interface IDynamicDependency {
|
|
114
115
|
id: DynamicDependencyId;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { IUnitRange, Nullable } from '@univerjs/core';
|
|
2
2
|
import type { BaseAstNode, IFormulaDataItem, IFormulaDependencyTree, IFormulaDependencyTreeJson, IUnitData } from '@univerjs/engine-formula';
|
|
3
|
-
import type { DynamicResolver } from './dependency-engine';
|
|
3
|
+
import type { DynamicResolver } from './dependency-engine/types';
|
|
4
4
|
import type { ISharedFormulaCompressionMetrics } from './shared-formula-group-analyzer';
|
|
5
5
|
import { FormulaDependencyGenerator, FormulaDependencyTree, FormulaDependencyTreeType } from '@univerjs/engine-formula';
|
|
6
6
|
export interface IFormulaCalculationTree {
|
|
@@ -37,14 +37,14 @@ export declare class FormulaDependencyProGenerator extends FormulaDependencyGene
|
|
|
37
37
|
clearCachedCalculationNodeData(): void;
|
|
38
38
|
clearCachedCalculationTree(): void;
|
|
39
39
|
getCachedCalculationNodeData(nodeIndex: number): IFormulaCalculationNodeData | undefined;
|
|
40
|
-
getCalculationOrder(): import("./dependency-engine").ICalculationOrderResult;
|
|
40
|
+
getCalculationOrder(): import("./dependency-engine/types").ICalculationOrderResult;
|
|
41
41
|
getSharedFormulaCompressionMetrics(): ISharedFormulaCompressionMetrics;
|
|
42
42
|
hasDynamicDepsByIndex(nodeIndex: number): boolean;
|
|
43
43
|
refreshDynamicDepsByIndex(nodeIndex: number, resolver: DynamicResolver): boolean;
|
|
44
44
|
hasUncalculatedDirtyPrecedentByIndex(nodeIndex: number, calculatedNodeIndices: ReadonlySet<number>): boolean;
|
|
45
45
|
getAllDependencyJson(): Promise<IFormulaDependencyTreeJson[]>;
|
|
46
46
|
generatePro(isCalculateTreeModel?: boolean): Promise<{
|
|
47
|
-
calculationOrderResult: import("./dependency-engine").ICalculationOrderResult;
|
|
47
|
+
calculationOrderResult: import("./dependency-engine/types").ICalculationOrderResult;
|
|
48
48
|
dependencyTree: Map<number, IFormulaCalculationTree>;
|
|
49
49
|
}>;
|
|
50
50
|
/**
|
|
@@ -66,9 +66,12 @@ export declare class FormulaDependencyProGenerator extends FormulaDependencyGene
|
|
|
66
66
|
private _normalizeSharedFormulaRange;
|
|
67
67
|
private _recordCompressedSharedFormulaGroupMetrics;
|
|
68
68
|
private _recordExpandedSharedFormulaGroupMetrics;
|
|
69
|
+
private _shouldEagerCacheCalculationTrees;
|
|
70
|
+
private _hasAnyDirtyMapValue;
|
|
69
71
|
private _markDirtyDependenciesPro;
|
|
70
72
|
private _markForcedRecalculationNodesPro;
|
|
71
73
|
private _markDirtyDefinedNameDependenciesPro;
|
|
74
|
+
private _markDirtySuperTableDependenciesPro;
|
|
72
75
|
private _cacheCalculationTree;
|
|
73
76
|
private _cacheCompressedVirtualCalculationTree;
|
|
74
77
|
private _getOffsetRangeList;
|
|
@@ -78,13 +81,36 @@ export declare class FormulaDependencyProGenerator extends FormulaDependencyGene
|
|
|
78
81
|
private _releaseDependencyTree;
|
|
79
82
|
private _hasDirtyDefinedNames;
|
|
80
83
|
private _syncForcedRecalculationNodeIndex;
|
|
81
|
-
private
|
|
84
|
+
private _hasForcedRecalculationFunction;
|
|
82
85
|
private _detectForcedRecalculationNodePro;
|
|
83
86
|
private _includeDirtyDefinedNamePro;
|
|
87
|
+
private _includeDirtySuperTablePro;
|
|
84
88
|
private _ensureTreeInitializedForDependencies;
|
|
85
|
-
private _ensureTreeNodeForCalculation;
|
|
86
89
|
private _getFeatureFormulaDependencyNodes;
|
|
87
90
|
private _rangesIntersectAny;
|
|
88
91
|
private _initialAstNodeAndRanges;
|
|
92
|
+
private _initialDependencyRanges;
|
|
93
|
+
private _tryInitialStaticReferenceRanges;
|
|
94
|
+
private _replaceDoubleQuotedStrings;
|
|
95
|
+
private _replaceQuotedSheetNames;
|
|
96
|
+
private _hasOnlyStaticReferenceSafeIdentifiers;
|
|
97
|
+
private _looksLikeA1ReferenceAt;
|
|
98
|
+
private _looksLikeColumnReferencePart;
|
|
99
|
+
private _isStaticReferenceTokenBoundarySafe;
|
|
100
|
+
private _tryCreateStaticReferenceRange;
|
|
101
|
+
private _tryCreateStaticColumnReferenceRange;
|
|
102
|
+
private _tryExtractStaticOffsetRanges;
|
|
103
|
+
private _tryCreateStaticOffsetRange;
|
|
104
|
+
private _tryInferOffsetRowSpan;
|
|
105
|
+
private _tryInferPositiveInteger;
|
|
106
|
+
private _tryParseInteger;
|
|
107
|
+
private _tryParseSingleStaticReference;
|
|
108
|
+
private _extractFunctionCalls;
|
|
109
|
+
private _findMatchingParen;
|
|
110
|
+
private _splitTopLevelArguments;
|
|
111
|
+
private _getStaticReferenceSheetSize;
|
|
112
|
+
private _dedupeStaticReferenceRanges;
|
|
113
|
+
private _columnNameToIndex;
|
|
114
|
+
private _nextNonSpaceChar;
|
|
89
115
|
protected _createFDtree(unitId: string, sheetId: string, row: number, column: number, unitData: IUnitData, formulaDataItem: IFormulaDataItem): FormulaDependencyTree;
|
|
90
116
|
}
|
package/lib/types/index.d.ts
CHANGED
|
@@ -1,5 +1,23 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { ExternalReferenceDataProvidersController } from './controllers/external-reference-data-providers.controller';
|
|
2
|
+
export { ExternalReferenceRenameController } from './controllers/external-reference-rename.controller';
|
|
3
|
+
export { ExternalReferenceResourceController } from './controllers/external-reference-resource.controller';
|
|
4
|
+
export { FORMULA_REFERENCE_DATA_RPC_CHANNEL, FormulaReferenceDataRpcController } from './controllers/formula-reference-data-rpc.controller';
|
|
5
|
+
export { ExternalReferenceOverlayModel } from './models/external-reference-overlay.model';
|
|
6
|
+
export type { IExternalOverlayCellState } from './models/external-reference-overlay.model';
|
|
7
|
+
export { createEmptyExternalReferenceResource, createExternalSyntheticUnitId, EXTERNAL_REFERENCE_SCHEMA_VERSION, ExternalReferenceModel, SHEET_EXTERNAL_DATA_PLUGIN, } from './models/external-reference.model';
|
|
8
|
+
export type { ExternalReferenceBindingResult, IExternalReferenceCachedCell, IExternalReferenceCachedSheet, IExternalReferenceCoverage, IExternalReferenceLink, IExternalReferenceResource, IExternalReferenceTable, IExternalReferenceTableColumn, } from './models/external-reference.model';
|
|
2
9
|
export { UniverProFormulaEnginePlugin } from './plugin';
|
|
3
|
-
export {
|
|
4
|
-
export {
|
|
5
|
-
export
|
|
10
|
+
export { ExternalCacheReferenceDataProvider } from './services/external-cache-reference-data.provider';
|
|
11
|
+
export { ExternalReferencePrefetchPlanner } from './services/external-reference-prefetch-planner';
|
|
12
|
+
export { ExternalReferencePrefetchService } from './services/external-reference-prefetch.service';
|
|
13
|
+
export type { IExternalReferencePrefetchLimits, IExternalReferencePrefetchResult, } from './services/external-reference-prefetch.service';
|
|
14
|
+
export { ExternalFormulaUnitReferenceResolver } from './services/external-unit-reference-resolver.service';
|
|
15
|
+
export { createUnavailableReferenceDataResponse, FormulaReferenceDataProviderRegistry, IFormulaReferenceDataProviderRegistry, IFormulaReferenceDataService, } from './services/formula-reference-data.service';
|
|
16
|
+
export type { FormulaReferenceDataFreshness, FormulaReferenceDataSource, IFormulaReferenceDataCell, IFormulaReferenceDataProvider, IFormulaReferenceDataRangeRequest, IFormulaReferenceDataRequest, IFormulaReferenceDataResponse, IFormulaReferenceDataSheet, } from './services/formula-reference-data.service';
|
|
17
|
+
export { MainFormulaReferenceDataService } from './services/main-formula-reference-data.service';
|
|
18
|
+
export { RemoveSuperTableMutation, SetFormulaCalculationResultMutation, SetFormulaCalculationStartMutation, SetSuperTableMutation, SetTriggerFormulaCalculationStartMutation, } from '@univerjs/engine-formula';
|
|
19
|
+
export type { ISetFormulaCalculationResultMutation, ISetFormulaCalculationStartMutation, ISuperTable, } from '@univerjs/engine-formula';
|
|
20
|
+
export { SetFormulaDataMutation } from '@univerjs/engine-formula';
|
|
21
|
+
export { refactorFormulaUnitQualifier } from '@univerjs/engine-formula';
|
|
22
|
+
export type { IUniverEngineFormulaConfig } from '@univerjs/engine-formula';
|
|
23
|
+
export { FormulaCalculationTriggerService, FormulaDataModel, IActiveDirtyManagerService, ISuperTableService, } from '@univerjs/engine-formula';
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { IRange, IUnitRange } from '@univerjs/core';
|
|
2
|
+
import type { IFormulaDatasetConfig } from '@univerjs/engine-formula';
|
|
3
|
+
import type { IFormulaReferenceDataRequest, IFormulaReferenceDataResponse } from '../services/formula-reference-data.service';
|
|
4
|
+
import { Disposable } from '@univerjs/core';
|
|
5
|
+
import { ISuperTableService } from '@univerjs/engine-formula';
|
|
6
|
+
import { ExternalReferenceModel } from './external-reference.model';
|
|
7
|
+
export interface IExternalOverlayCellState {
|
|
8
|
+
covered: boolean;
|
|
9
|
+
value: unknown;
|
|
10
|
+
}
|
|
11
|
+
export declare class ExternalReferenceOverlayModel extends Disposable {
|
|
12
|
+
private readonly _externalReferenceModel;
|
|
13
|
+
private readonly _superTableService;
|
|
14
|
+
private readonly _units;
|
|
15
|
+
private readonly _pendingDirtyRanges;
|
|
16
|
+
constructor(_externalReferenceModel: ExternalReferenceModel, _superTableService: ISuperTableService);
|
|
17
|
+
apply(request: IFormulaReferenceDataRequest, response: IFormulaReferenceDataResponse): Array<{
|
|
18
|
+
sheetId: string;
|
|
19
|
+
range: IRange;
|
|
20
|
+
}>;
|
|
21
|
+
materialize(config: IFormulaDatasetConfig): void;
|
|
22
|
+
getCellState(unitId: string, sheetId: string, row: number, column: number): IExternalOverlayCellState;
|
|
23
|
+
isRangeCovered(unitId: string, sheetNameOrId: string | undefined, range: IRange): boolean;
|
|
24
|
+
enforceLimits(maxCells: number, maxBytes: number): number;
|
|
25
|
+
invalidateHost(hostUnitId: string): IUnitRange[];
|
|
26
|
+
invalidateSyntheticUnit(unitId: string): IUnitRange[];
|
|
27
|
+
invalidateSourceRange(targetUnitIdOrName: string, sheetNameOrId: string, range: IRange): IUnitRange[];
|
|
28
|
+
invalidateSourceMetadata(targetUnitIdOrName: string): IUnitRange[];
|
|
29
|
+
drainDirtyRanges(): IUnitRange[];
|
|
30
|
+
getUnitCount(): number;
|
|
31
|
+
dispose(): void;
|
|
32
|
+
private _unitRanges;
|
|
33
|
+
private _queueDirty;
|
|
34
|
+
private _mergeSheet;
|
|
35
|
+
private _oldestCoverage;
|
|
36
|
+
private _coveredCellCount;
|
|
37
|
+
private _estimatedBytes;
|
|
38
|
+
private _writeCoverageMisses;
|
|
39
|
+
private _createUnavailableSheets;
|
|
40
|
+
private _registerTables;
|
|
41
|
+
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import type { FormulaUnitType } from '@univerjs/engine-formula';
|
|
2
|
+
import { Disposable } from '@univerjs/core';
|
|
3
|
+
export declare const SHEET_EXTERNAL_DATA_PLUGIN = "SHEET_EXTERNAL_DATA_PLUGIN";
|
|
4
|
+
export declare const EXTERNAL_REFERENCE_SCHEMA_VERSION: 1;
|
|
5
|
+
export interface IExternalReferenceCoverage {
|
|
6
|
+
startRow: number;
|
|
7
|
+
endRow: number;
|
|
8
|
+
startColumn: number;
|
|
9
|
+
endColumn: number;
|
|
10
|
+
}
|
|
11
|
+
export interface IExternalReferenceCachedCell {
|
|
12
|
+
row: number;
|
|
13
|
+
column: number;
|
|
14
|
+
value: unknown;
|
|
15
|
+
valueType?: number;
|
|
16
|
+
}
|
|
17
|
+
export interface IExternalReferenceCachedSheet {
|
|
18
|
+
name: string;
|
|
19
|
+
sheetId?: string;
|
|
20
|
+
rowCount?: number;
|
|
21
|
+
columnCount?: number;
|
|
22
|
+
coverage: IExternalReferenceCoverage[];
|
|
23
|
+
cells: IExternalReferenceCachedCell[];
|
|
24
|
+
}
|
|
25
|
+
export interface IExternalReferenceTableColumn {
|
|
26
|
+
id?: string;
|
|
27
|
+
name: string;
|
|
28
|
+
}
|
|
29
|
+
export interface IExternalReferenceTable {
|
|
30
|
+
id?: string;
|
|
31
|
+
name: string;
|
|
32
|
+
sheetName?: string;
|
|
33
|
+
columns: IExternalReferenceTableColumn[];
|
|
34
|
+
range?: IExternalReferenceCoverage;
|
|
35
|
+
/** Base virtual tables start with records at row 0; Sheet tables default to a physical header. */
|
|
36
|
+
showHeader?: boolean;
|
|
37
|
+
}
|
|
38
|
+
export interface IExternalReferenceLink {
|
|
39
|
+
/** Host-local OOXML slot. Slots are one-based and order is preserved. */
|
|
40
|
+
slot: number;
|
|
41
|
+
name: string;
|
|
42
|
+
target: {
|
|
43
|
+
name: string;
|
|
44
|
+
unitType: FormulaUnitType;
|
|
45
|
+
uri?: string;
|
|
46
|
+
liveUnitId?: string;
|
|
47
|
+
};
|
|
48
|
+
sheetNames: Array<{
|
|
49
|
+
name: string;
|
|
50
|
+
sheetId?: string;
|
|
51
|
+
}>;
|
|
52
|
+
definedNames: Array<{
|
|
53
|
+
name: string;
|
|
54
|
+
formulaOrRefString: string;
|
|
55
|
+
}>;
|
|
56
|
+
tables: IExternalReferenceTable[];
|
|
57
|
+
cache?: {
|
|
58
|
+
revision?: string;
|
|
59
|
+
freshness: 'fresh' | 'stale';
|
|
60
|
+
complete: boolean;
|
|
61
|
+
sheets: IExternalReferenceCachedSheet[];
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
export interface IExternalReferenceResource {
|
|
65
|
+
schemaVersion: typeof EXTERNAL_REFERENCE_SCHEMA_VERSION;
|
|
66
|
+
links: IExternalReferenceLink[];
|
|
67
|
+
}
|
|
68
|
+
export type ExternalReferenceBindingResult = {
|
|
69
|
+
status: 'resolved';
|
|
70
|
+
link: IExternalReferenceLink;
|
|
71
|
+
} | {
|
|
72
|
+
status: 'missing' | 'ambiguous';
|
|
73
|
+
};
|
|
74
|
+
export declare function createEmptyExternalReferenceResource(): IExternalReferenceResource;
|
|
75
|
+
export declare function createExternalSyntheticUnitId(hostUnitId: string, slot: number): string;
|
|
76
|
+
export declare class ExternalReferenceModel extends Disposable {
|
|
77
|
+
private readonly _resources;
|
|
78
|
+
private readonly _loadErrors;
|
|
79
|
+
load(hostUnitId: string, value: unknown): boolean;
|
|
80
|
+
set(hostUnitId: string, resource: IExternalReferenceResource): boolean;
|
|
81
|
+
serialize(hostUnitId: string): IExternalReferenceResource;
|
|
82
|
+
get(hostUnitId: string): IExternalReferenceResource | undefined;
|
|
83
|
+
getLoadError(hostUnitId: string): 'invalid-resource' | 'unsupported-version' | undefined;
|
|
84
|
+
resolveBinding(hostUnitId: string, qualifier: string): ExternalReferenceBindingResult;
|
|
85
|
+
renameLiveTarget(unitId: string, oldName: string, newName: string): Array<{
|
|
86
|
+
hostUnitId: string;
|
|
87
|
+
slot: number;
|
|
88
|
+
}>;
|
|
89
|
+
remove(hostUnitId: string): void;
|
|
90
|
+
dispose(): void;
|
|
91
|
+
}
|
package/lib/types/plugin.d.ts
CHANGED
|
@@ -1,6 +1,14 @@
|
|
|
1
|
+
import type { Dependency } from '@univerjs/core';
|
|
1
2
|
import { UniverFormulaEnginePlugin } from '@univerjs/engine-formula';
|
|
2
3
|
export declare class UniverProFormulaEnginePlugin extends UniverFormulaEnginePlugin {
|
|
3
4
|
static packageName: string;
|
|
4
5
|
static version: string;
|
|
6
|
+
/**
|
|
7
|
+
* Allows execution backends to replace individual formula services before
|
|
8
|
+
* they are registered. Keeping one registration pass avoids duplicate DI
|
|
9
|
+
* bindings when a backend only swaps the calculator.
|
|
10
|
+
*/
|
|
11
|
+
protected _extendFormulaExecutionDependencies(_dependencies: Dependency[]): void;
|
|
5
12
|
protected _initializeWithOverride(): void;
|
|
13
|
+
onReady(): void;
|
|
6
14
|
}
|
|
@@ -1,14 +1,25 @@
|
|
|
1
1
|
import type { IFormulaDatasetConfig } from '@univerjs/engine-formula';
|
|
2
|
-
import type { CalcNodeIndex, DynamicResolver, ICalculationOrderResult } from '../engine/dependency-engine';
|
|
2
|
+
import type { CalcNodeIndex, DynamicResolver, ICalculationOrderResult } from '../engine/dependency-engine/types';
|
|
3
3
|
import type { IFormulaCalculationTree } from '../engine/formula-dependency';
|
|
4
|
-
import {
|
|
4
|
+
import { IConfigService } from '@univerjs/core';
|
|
5
|
+
import { AstTreeBuilder, CalculateFormulaService, IFormulaCurrentConfigService, IFormulaDependencyGenerator, IFormulaRuntimeService, Interpreter, Lexer } from '@univerjs/engine-formula';
|
|
6
|
+
import { ExternalReferencePrefetchPlanner } from './external-reference-prefetch-planner';
|
|
7
|
+
import { ExternalReferencePrefetchService } from './external-reference-prefetch.service';
|
|
5
8
|
export declare class CalculateFormulaProService extends CalculateFormulaService {
|
|
9
|
+
private readonly _externalPrefetchPlanner;
|
|
10
|
+
private readonly _externalPrefetchService;
|
|
6
11
|
private _dynamicRuntimeRanges;
|
|
12
|
+
private _externalFormulaDatasetConfig;
|
|
13
|
+
private _externalPrefetchedNodes;
|
|
14
|
+
constructor(configService: IConfigService, lexer: Lexer, currentConfigService: IFormulaCurrentConfigService, runtimeService: IFormulaRuntimeService, formulaDependencyGenerator: IFormulaDependencyGenerator, interpreter: Interpreter, astTreeBuilder: AstTreeBuilder, _externalPrefetchPlanner: ExternalReferencePrefetchPlanner, _externalPrefetchService: ExternalReferencePrefetchService);
|
|
7
15
|
execute(formulaDatasetConfig: IFormulaDatasetConfig): Promise<void>;
|
|
8
16
|
protected _executeStep(cycleReferenceCount?: number): Promise<true | undefined>;
|
|
9
17
|
protected _apply(isArrayFormulaState?: boolean, cycleReferenceCount?: number): Promise<import("@univerjs/engine-formula").IAllRuntimeData | undefined>;
|
|
18
|
+
private _setFormulaExecuteStage;
|
|
19
|
+
private _setTotalFormulasToCalculate;
|
|
10
20
|
private _shouldRescheduleAfterDynamicChange;
|
|
11
|
-
protected _forEachCalculationPlanTree(calculationOrderResult: Pick<ICalculationOrderResult, 'calculationForest'>, dependencyTree: Map<CalcNodeIndex, IFormulaCalculationTree>, cycleReferenceCount: number, visitor: (tree: IFormulaCalculationTree, nodeIndex: CalcNodeIndex, cycleIndex?: number) => Promise<boolean | void>): Promise<void>;
|
|
21
|
+
protected _forEachCalculationPlanTree(calculationOrderResult: Pick<ICalculationOrderResult, 'calculationForest'>, dependencyTree: Map<CalcNodeIndex, IFormulaCalculationTree>, cycleReferenceCount: number, visitor: (tree: IFormulaCalculationTree, nodeIndex: CalcNodeIndex, cycleIndex?: number, shouldPreserveCycleTree?: boolean) => Promise<boolean | void>): Promise<void>;
|
|
22
|
+
private _calculationPlanHasSelfReference;
|
|
12
23
|
protected _getCalculationPlanTreeCount(calculationOrderResult: Pick<ICalculationOrderResult, 'calculationForest'>, dependencyTree: Map<CalcNodeIndex, IFormulaCalculationTree>, cycleReferenceCount: number): number;
|
|
13
24
|
protected _getDynamicResolver(): DynamicResolver | undefined;
|
|
14
25
|
private _refreshDynamicDepsAfterCalculate;
|
|
@@ -17,5 +28,11 @@ export declare class CalculateFormulaProService extends CalculateFormulaService
|
|
|
17
28
|
private _getRangeSignature;
|
|
18
29
|
private _waitForExecutionSlot;
|
|
19
30
|
private _calculateDependencyTree;
|
|
31
|
+
private _prefetchDynamicExternalReferences;
|
|
32
|
+
private _collectAddressFunctionRuntimeReferences;
|
|
33
|
+
private _setFunctionRefInfoForTree;
|
|
34
|
+
private _formulaReferencesTreeCell;
|
|
35
|
+
private _isReferenceMetadataFunctionArgument;
|
|
36
|
+
private _parseA1Reference;
|
|
20
37
|
private _getCalculationNodeData;
|
|
21
38
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { IUnitRange } from '@univerjs/core';
|
|
2
2
|
import type { FormulaDependencyTree, IDirtyUnitFeatureMap, IDirtyUnitOtherFormulaMap, IDirtyUnitSheetNameMap, IFormulaDependencyTree } from '@univerjs/engine-formula';
|
|
3
|
-
import type { DynamicResolver, ICalcNodeRef, ICompressedSharedFormulaGroup } from '../engine/dependency-engine';
|
|
3
|
+
import type { DynamicResolver, ICalcNodeRef, ICompressedSharedFormulaGroup } from '../engine/dependency-engine/types';
|
|
4
4
|
import { DependencyManagerBaseService } from '@univerjs/engine-formula';
|
|
5
5
|
export declare class DependencyManagerProService extends DependencyManagerBaseService {
|
|
6
6
|
private _dependencyEngineCache;
|
|
@@ -16,8 +16,13 @@ export declare class DependencyManagerProService extends DependencyManagerBaseSe
|
|
|
16
16
|
clearFeatureFormulaDependency(unitId: string, sheetId?: string): void;
|
|
17
17
|
getFeatureFormulaDependencyPro(unitId: string, sheetId: string, featureId: string): number | undefined;
|
|
18
18
|
getFeatureFormulaDependencyNodePro(unitId: string, sheetId: string, featureId: string): ICalcNodeRef;
|
|
19
|
+
reserveFormulaDependencyCapacity(minNodeCapacity: number, minRangeCapacity?: number): void;
|
|
19
20
|
addFormulaDependencyPro(unitId: string, sheetId: string, row: number, column: number, dependencyTree: IFormulaDependencyTree, featureNodes?: ICalcNodeRef[], mode?: 'replace' | 'merge'): number;
|
|
20
21
|
addFormulaDependencyNodeOnlyPro(unitId: string, sheetId: string, row: number, column: number): number;
|
|
22
|
+
addFormulaDependencyNodeOnlyRangePro(unitId: string, sheetId: string, range: IUnitRange['range'], skip?: {
|
|
23
|
+
row: number;
|
|
24
|
+
col: number;
|
|
25
|
+
}): number[];
|
|
21
26
|
registerCompressedSharedFormulaGroup(group: ICompressedSharedFormulaGroup): void;
|
|
22
27
|
clearCompressedSharedFormulaGroups(unitId?: string, sheetId?: string): void;
|
|
23
28
|
removeFormulaDependency(unitId: string, sheetId: string, row: number, column: number): void;
|
|
@@ -45,5 +50,5 @@ export declare class DependencyManagerProService extends DependencyManagerBaseSe
|
|
|
45
50
|
prepareDynamicDependencies(resolver: DynamicResolver): boolean;
|
|
46
51
|
getCalculationOrder(options?: {
|
|
47
52
|
detectCycles?: boolean;
|
|
48
|
-
}): import("../engine/dependency-engine").ICalculationOrderResult;
|
|
53
|
+
}): import("../engine/dependency-engine/types").ICalculationOrderResult;
|
|
49
54
|
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { IFormulaReferenceDataProvider, IFormulaReferenceDataRequest, IFormulaReferenceDataResponse } from './formula-reference-data.service';
|
|
2
|
+
import { ExternalReferenceModel } from '../models/external-reference.model';
|
|
3
|
+
export declare class ExternalCacheReferenceDataProvider implements IFormulaReferenceDataProvider {
|
|
4
|
+
private readonly _externalReferenceModel;
|
|
5
|
+
readonly id = "ooxml-external-cache";
|
|
6
|
+
readonly priority = -100;
|
|
7
|
+
constructor(_externalReferenceModel: ExternalReferenceModel);
|
|
8
|
+
canRead(request: IFormulaReferenceDataRequest): boolean;
|
|
9
|
+
readData(request: IFormulaReferenceDataRequest): Promise<IFormulaReferenceDataResponse | undefined>;
|
|
10
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { IFormulaDatasetConfig } from '@univerjs/engine-formula';
|
|
2
|
+
import type { IFormulaReferenceDataRangeRequest, IFormulaReferenceDataRequest } from './formula-reference-data.service';
|
|
3
|
+
import { ExternalReferenceModel } from '../models/external-reference.model';
|
|
4
|
+
export declare class ExternalReferencePrefetchPlanner {
|
|
5
|
+
private readonly _externalReferenceModel;
|
|
6
|
+
private _calculationCounter;
|
|
7
|
+
private _requestCounter;
|
|
8
|
+
constructor(_externalReferenceModel: ExternalReferenceModel);
|
|
9
|
+
plan(config: IFormulaDatasetConfig): IFormulaReferenceDataRequest[];
|
|
10
|
+
planDynamic(hostUnitId: string, references: Array<{
|
|
11
|
+
unitId: string;
|
|
12
|
+
sheetName: string;
|
|
13
|
+
range: IFormulaReferenceDataRangeRequest['range'];
|
|
14
|
+
}>): IFormulaReferenceDataRequest[];
|
|
15
|
+
private _collectA1;
|
|
16
|
+
private _collectTables;
|
|
17
|
+
private _addRange;
|
|
18
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { IUnitRange } from '@univerjs/core';
|
|
2
|
+
import type { IFormulaDatasetConfig } from '@univerjs/engine-formula';
|
|
3
|
+
import type { IFormulaReferenceDataRequest, IFormulaReferenceDataResponse } from './formula-reference-data.service';
|
|
4
|
+
import { Disposable } from '@univerjs/core';
|
|
5
|
+
import { FormulaDataModel } from '@univerjs/engine-formula';
|
|
6
|
+
import { ExternalReferenceOverlayModel } from '../models/external-reference-overlay.model';
|
|
7
|
+
import { IFormulaReferenceDataService } from './formula-reference-data.service';
|
|
8
|
+
export interface IExternalReferencePrefetchLimits {
|
|
9
|
+
maxCells: number;
|
|
10
|
+
maxBytes: number;
|
|
11
|
+
concurrency: number;
|
|
12
|
+
timeoutMs: number;
|
|
13
|
+
}
|
|
14
|
+
export interface IExternalReferencePrefetchResult {
|
|
15
|
+
responses: IFormulaReferenceDataResponse[];
|
|
16
|
+
dirtyRanges: Array<{
|
|
17
|
+
unitId: string;
|
|
18
|
+
sheetId: string;
|
|
19
|
+
range: NonNullable<IFormulaReferenceDataRequest['ranges'][number]['range']>;
|
|
20
|
+
}>;
|
|
21
|
+
discarded: number;
|
|
22
|
+
}
|
|
23
|
+
export declare class ExternalReferencePrefetchService extends Disposable {
|
|
24
|
+
private readonly _referenceDataService;
|
|
25
|
+
private readonly _overlayModel;
|
|
26
|
+
private readonly _formulaDataModel;
|
|
27
|
+
private readonly _inflight;
|
|
28
|
+
private readonly _latestCalculation;
|
|
29
|
+
constructor(_referenceDataService: IFormulaReferenceDataService, _overlayModel: ExternalReferenceOverlayModel, _formulaDataModel: FormulaDataModel);
|
|
30
|
+
prefetch(requests: IFormulaReferenceDataRequest[], config: IFormulaDatasetConfig, limits?: Partial<IExternalReferencePrefetchLimits>): Promise<IExternalReferencePrefetchResult>;
|
|
31
|
+
cancelHost(hostUnitId: string, nextCalculationId: string): void;
|
|
32
|
+
getInflightCount(): number;
|
|
33
|
+
drainDirtyRanges(): IUnitRange[];
|
|
34
|
+
dispose(): void;
|
|
35
|
+
private _hydrateLiveUnits;
|
|
36
|
+
private _hasWorkerLiveUnit;
|
|
37
|
+
private _readWithInflight;
|
|
38
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { IFormulaUnitReferenceResolution, IFormulaUnitReferenceResolveInput } from '@univerjs/engine-formula';
|
|
2
|
+
import { ErrorType, FormulaUnitReferenceResolver, IFormulaCurrentConfigService } from '@univerjs/engine-formula';
|
|
3
|
+
import { ExternalReferenceModel } from '../models/external-reference.model';
|
|
4
|
+
export declare class ExternalFormulaUnitReferenceResolver extends FormulaUnitReferenceResolver {
|
|
5
|
+
private readonly _externalReferenceModel;
|
|
6
|
+
constructor(currentConfigService: IFormulaCurrentConfigService, _externalReferenceModel: ExternalReferenceModel);
|
|
7
|
+
resolve(input: IFormulaUnitReferenceResolveInput): IFormulaUnitReferenceResolution | ErrorType;
|
|
8
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import type { ICellData, IDisposable, IRange } from '@univerjs/core';
|
|
2
|
+
import type { FormulaUnitType } from '@univerjs/engine-formula';
|
|
3
|
+
import { Disposable } from '@univerjs/core';
|
|
4
|
+
export type FormulaReferenceDataSource = 'worker-live' | 'main-live' | 'provider' | 'ooxml-cache' | 'unavailable';
|
|
5
|
+
export type FormulaReferenceDataFreshness = 'fresh' | 'stale' | 'unavailable';
|
|
6
|
+
export interface IFormulaReferenceDataRangeRequest {
|
|
7
|
+
sheetName?: string;
|
|
8
|
+
sheetId?: string;
|
|
9
|
+
tableName?: string;
|
|
10
|
+
range?: IRange;
|
|
11
|
+
}
|
|
12
|
+
export interface IFormulaReferenceDataRequest {
|
|
13
|
+
requestId: string;
|
|
14
|
+
calculationId: string;
|
|
15
|
+
hostUnitId: string;
|
|
16
|
+
bindingSlot: number;
|
|
17
|
+
syntheticUnitId: string;
|
|
18
|
+
target: {
|
|
19
|
+
name: string;
|
|
20
|
+
unitType: FormulaUnitType;
|
|
21
|
+
uri?: string;
|
|
22
|
+
liveUnitId?: string;
|
|
23
|
+
};
|
|
24
|
+
ranges: IFormulaReferenceDataRangeRequest[];
|
|
25
|
+
/** Defaults to true. Set false only when the caller explicitly accepts cached stale values. */
|
|
26
|
+
requireFresh?: boolean;
|
|
27
|
+
}
|
|
28
|
+
export interface IFormulaReferenceDataCell {
|
|
29
|
+
row: number;
|
|
30
|
+
column: number;
|
|
31
|
+
cell: ICellData;
|
|
32
|
+
}
|
|
33
|
+
export interface IFormulaReferenceDataSheet {
|
|
34
|
+
name: string;
|
|
35
|
+
sheetId: string;
|
|
36
|
+
rowCount: number;
|
|
37
|
+
columnCount: number;
|
|
38
|
+
coverage: IRange[];
|
|
39
|
+
cells: IFormulaReferenceDataCell[];
|
|
40
|
+
}
|
|
41
|
+
export interface IFormulaReferenceDataResponse {
|
|
42
|
+
requestId: string;
|
|
43
|
+
calculationId: string;
|
|
44
|
+
source: FormulaReferenceDataSource;
|
|
45
|
+
freshness: FormulaReferenceDataFreshness;
|
|
46
|
+
revision?: string;
|
|
47
|
+
sheets: IFormulaReferenceDataSheet[];
|
|
48
|
+
error?: '#N/A' | '#REF!' | '#CYCLE!';
|
|
49
|
+
}
|
|
50
|
+
export interface IFormulaReferenceDataService {
|
|
51
|
+
readData(request: IFormulaReferenceDataRequest): Promise<IFormulaReferenceDataResponse>;
|
|
52
|
+
}
|
|
53
|
+
export declare const IFormulaReferenceDataService: import("@wendellhu/redi").IdentifierDecorator<IFormulaReferenceDataService>;
|
|
54
|
+
export interface IFormulaReferenceDataProvider {
|
|
55
|
+
readonly id: string;
|
|
56
|
+
readonly priority?: number;
|
|
57
|
+
canRead(request: IFormulaReferenceDataRequest): boolean;
|
|
58
|
+
readData(request: IFormulaReferenceDataRequest): Promise<IFormulaReferenceDataResponse | undefined>;
|
|
59
|
+
}
|
|
60
|
+
export interface IFormulaReferenceDataProviderRegistry {
|
|
61
|
+
register(provider: IFormulaReferenceDataProvider): IDisposable;
|
|
62
|
+
getProviders(request: IFormulaReferenceDataRequest): IFormulaReferenceDataProvider[];
|
|
63
|
+
}
|
|
64
|
+
export declare const IFormulaReferenceDataProviderRegistry: import("@wendellhu/redi").IdentifierDecorator<IFormulaReferenceDataProviderRegistry>;
|
|
65
|
+
export declare class FormulaReferenceDataProviderRegistry extends Disposable implements IFormulaReferenceDataProviderRegistry {
|
|
66
|
+
private readonly _providers;
|
|
67
|
+
register(provider: IFormulaReferenceDataProvider): IDisposable;
|
|
68
|
+
getProviders(request: IFormulaReferenceDataRequest): IFormulaReferenceDataProvider[];
|
|
69
|
+
dispose(): void;
|
|
70
|
+
}
|
|
71
|
+
export declare function createUnavailableReferenceDataResponse(request: IFormulaReferenceDataRequest, error?: '#N/A' | '#REF!' | '#CYCLE!'): IFormulaReferenceDataResponse;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { IFormulaReferenceDataRequest, IFormulaReferenceDataResponse, IFormulaReferenceDataService } from './formula-reference-data.service';
|
|
2
|
+
import { FormulaDataModel, ISuperTableService } from '@univerjs/engine-formula';
|
|
3
|
+
import { IFormulaReferenceDataProviderRegistry } from './formula-reference-data.service';
|
|
4
|
+
export declare class MainFormulaReferenceDataService implements IFormulaReferenceDataService {
|
|
5
|
+
private readonly _formulaDataModel;
|
|
6
|
+
private readonly _superTableService;
|
|
7
|
+
private readonly _providerRegistry;
|
|
8
|
+
constructor(_formulaDataModel: FormulaDataModel, _superTableService: ISuperTableService, _providerRegistry: IFormulaReferenceDataProviderRegistry);
|
|
9
|
+
readData(request: IFormulaReferenceDataRequest): Promise<IFormulaReferenceDataResponse>;
|
|
10
|
+
private _readLiveSheets;
|
|
11
|
+
private _resolveLiveRange;
|
|
12
|
+
}
|
package/lib/umd/facade.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
(function(_0x30d002,_0x1c7b8b){var _0x4a4ad8=_0x6e44,_0x296f80=_0x30d002();while(!![]){try{var _0xf5e00e=-parseInt(_0x4a4ad8(0x1e3))/0x1*(parseInt(_0x4a4ad8(0x1e5))/0x2)+-parseInt(_0x4a4ad8(0x1ea))/0x3+-parseInt(_0x4a4ad8(0x1e6))/0x4+-parseInt(_0x4a4ad8(0x1e7))/0x5+parseInt(_0x4a4ad8(0x1e1))/0x6+-parseInt(_0x4a4ad8(0x1e2))/0x7+parseInt(_0x4a4ad8(0x1ec))/0x8;if(_0xf5e00e===_0x1c7b8b)break;else _0x296f80['push'](_0x296f80['shift']());}catch(_0x10d9ff){_0x296f80['push'](_0x296f80['shift']());}}}(_0xd1dd,0xa8f2d),function(_0x27da3d,_0x5d4420){var _0x5f4928=_0x6e44;typeof exports=='object'&&typeof module<'u'?_0x5d4420(exports,require('@univerjs/engine-formula/facade')):typeof define=='function'&&define['amd']?define(['exports','@univerjs/engine-formula/facade'],_0x5d4420):(_0x27da3d=typeof globalThis<'u'?globalThis:_0x27da3d||self,_0x5d4420(_0x27da3d['UniverProEngineFormulaFacade']={},_0x27da3d[_0x5f4928(0x1e4)]));}(this,function(_0x1f2103,_0xebe3c1){var _0x8b67fa=_0x6e44;Object[_0x8b67fa(0x1e8)](_0x1f2103,Symbol[_0x8b67fa(0x1e0)],{'value':_0x8b67fa(0x1eb)}),Object[_0x8b67fa(0x1e8)](_0x1f2103,_0x8b67fa(0x1e9),{'enumerable':!0x0,'get':function(){var _0x3e5faa=_0x8b67fa;return _0xebe3c1[_0x3e5faa(0x1e9)];}});}));function _0x6e44(_0x55216e,_0x33ca1b){_0x55216e=_0x55216e-0x1e0;var _0xd1dd60=_0xd1dd();var _0x6e444a=_0xd1dd60[_0x55216e];return _0x6e444a;}function _0xd1dd(){var _0x540c1c=['8381198wJUsGM','69583ywNHdH','UniverEngineFormulaFacade','32iTFTTc','4135028dTVsVo','6286820LzVkIY','defineProperty','FFormula','2264994mAcQEQ','Module','37601096teeTQJ','toStringTag','8091822krKGqk'];_0xd1dd=function(){return _0x540c1c;};return _0xd1dd();}
|