UNPKG

hyperformula-dc

Version:

HyperFormula is a JavaScript engine for efficient processing of spreadsheet-like data and formulas

131 lines (130 loc) 7.51 kB
/** * @license * Copyright (c) 2021 Handsoncode. All rights reserved. */ import { AbsoluteCellRange, SimpleCellRange } from '../AbsoluteCellRange'; import { ArraySize } from '../ArraySize'; import { SimpleCellAddress } from '../Cell'; import { RawCellContent } from '../CellContentParser'; import { CellDependency } from '../CellDependency'; import { Config } from '../Config'; import { ContentChanges } from '../ContentChanges'; import { FunctionRegistry } from '../interpreter/FunctionRegistry'; import { InternalScalarValue, InterpreterValue, RawScalarValue } from '../interpreter/InterpreterValue'; import { LazilyTransformingAstService } from '../LazilyTransformingAstService'; import { Maybe } from '../Maybe'; import { NamedExpressions } from '../NamedExpressions'; import { Ast } from '../parser'; import { ColumnsSpan, RowsSpan } from '../Span'; import { Statistics } from '../statistics'; import { ArrayVertex, CellVertex, ParsingErrorVertex, RangeVertex, Vertex } from './'; import { AddressMapping } from './AddressMapping/AddressMapping'; import { ArrayMapping } from './ArrayMapping'; import { Graph, TopSortResult } from './Graph'; import { RangeMapping } from './RangeMapping'; import { SheetMapping } from './SheetMapping'; import { RawAndParsedValue } from './ValueCellVertex'; export declare class DependencyGraph { readonly addressMapping: AddressMapping; readonly rangeMapping: RangeMapping; readonly sheetMapping: SheetMapping; readonly arrayMapping: ArrayMapping; readonly stats: Statistics; readonly lazilyTransformingAstService: LazilyTransformingAstService; readonly functionRegistry: FunctionRegistry; readonly namedExpressions: NamedExpressions; /** * Invariants: * - empty cell has associated EmptyCellVertex if and only if it is a dependency (possibly indirect, through range) to some formula */ static buildEmpty(lazilyTransformingAstService: LazilyTransformingAstService, config: Config, functionRegistry: FunctionRegistry, namedExpressions: NamedExpressions, stats: Statistics): DependencyGraph; private changes; readonly graph: Graph<Vertex>; constructor(addressMapping: AddressMapping, rangeMapping: RangeMapping, sheetMapping: SheetMapping, arrayMapping: ArrayMapping, stats: Statistics, lazilyTransformingAstService: LazilyTransformingAstService, functionRegistry: FunctionRegistry, namedExpressions: NamedExpressions); setFormulaToCell(address: SimpleCellAddress, ast: Ast, dependencies: CellDependency[], size: ArraySize, hasVolatileFunction: boolean, hasStructuralChangeFunction: boolean): ContentChanges; setParsingErrorToCell(address: SimpleCellAddress, errorVertex: ParsingErrorVertex): ContentChanges; setValueToCell(address: SimpleCellAddress, value: RawAndParsedValue): ContentChanges; setCellEmpty(address: SimpleCellAddress): ContentChanges; ensureThatVertexIsNonArrayCellVertex(vertex: Maybe<CellVertex>): void; clearRecentlyChangedVertices(): void; verticesToRecompute(): Set<Vertex>; processCellDependencies(cellDependencies: CellDependency[], endVertex: Vertex): void; fetchNamedExpressionVertex(expressionName: string, sheetId: number): CellVertex; exchangeNode(addressFrom: SimpleCellAddress, addressTo: SimpleCellAddress): void; correctInfiniteRangesDependency(address: SimpleCellAddress): void; fetchCellOrCreateEmpty(address: SimpleCellAddress): CellVertex; removeRows(removedRows: RowsSpan): EagerChangesGraphChangeResult; removeSheet(removedSheetId: number): void; clearSheet(sheetId: number): void; removeColumns(removedColumns: ColumnsSpan): EagerChangesGraphChangeResult; addRows(addedRows: RowsSpan): ArrayAffectingGraphChangeResult; addColumns(addedColumns: ColumnsSpan): EagerChangesGraphChangeResult; ensureNoArrayInRange(range: AbsoluteCellRange): void; isThereSpaceForArray(arrayVertex: ArrayVertex): boolean; moveCells(sourceRange: AbsoluteCellRange, toRight: number, toBottom: number, toSheet: number): void; setArrayEmpty(arrayVertex: ArrayVertex): void; addVertex(address: SimpleCellAddress, vertex: CellVertex): void; addArrayVertex(address: SimpleCellAddress, vertex: ArrayVertex): void; arrayFormulaNodes(): IterableIterator<ArrayVertex>; entriesFromRowsSpan(rowsSpan: RowsSpan): IterableIterator<[SimpleCellAddress, CellVertex]>; entriesFromColumnsSpan(columnsSpan: ColumnsSpan): IterableIterator<[SimpleCellAddress, CellVertex]>; existsVertex(address: SimpleCellAddress): boolean; fetchCell(address: SimpleCellAddress): CellVertex; getCell(address: SimpleCellAddress): Maybe<CellVertex>; getCellValue(address: SimpleCellAddress): InterpreterValue; getRawValue(address: SimpleCellAddress): RawCellContent; getScalarValue(address: SimpleCellAddress): InternalScalarValue; existsEdge(fromNode: Vertex, toNode: Vertex): boolean; getSheetId(sheetName: string): number; getSheetHeight(sheet: number): number; getSheetWidth(sheet: number): number; getArray(range: AbsoluteCellRange): Maybe<ArrayVertex>; setArray(range: AbsoluteCellRange, vertex: ArrayVertex): void; getRange(start: SimpleCellAddress, end: SimpleCellAddress): Maybe<RangeVertex>; topSortWithScc(): TopSortResult<Vertex>; markAsVolatile(vertex: Vertex): void; markAsDependentOnStructureChange(vertex: Vertex): void; forceApplyPostponedTransformations(): void; volatileVertices(): Set<Vertex>; getArrayVerticesRelatedToRanges(ranges: RangeVertex[]): Set<ArrayVertex>; rawValuesFromRange(range: AbsoluteCellRange): IterableIterator<[RawScalarValue, SimpleCellAddress]>; entriesFromRange(range: AbsoluteCellRange): IterableIterator<[SimpleCellAddress, Maybe<CellVertex>]>; exchangeGraphNode(oldNode: Vertex, newNode: Vertex): void; exchangeOrAddGraphNode(oldNode: Maybe<Vertex>, newNode: Vertex): void; dependencyQueryAddresses: (vertex: Vertex) => (SimpleCellAddress | SimpleCellRange)[]; dependencyQueryVertices: (vertex: Vertex) => Vertex[]; computeListOfValuesInRange(range: AbsoluteCellRange): InternalScalarValue[]; shrinkArrayToCorner(array: ArrayVertex): void; isArrayInternalCell(address: SimpleCellAddress): boolean; getAndClearContentChanges(): ContentChanges; getAdjacentNodesAddresses(inputVertex: Vertex): (SimpleCellRange | SimpleCellAddress)[]; private correctInfiniteRangesDependenciesByRangeVertex; private cleanAddressMappingUnderArray; private formulaDirectDependenciesToArray; private rangeDirectDependenciesToArray; private adjacentArrayVertices; private rangeDependencyQuery; private formulaDependencyQuery; private addStructuralNodesToChangeSet; private fixRangesWhenAddingRows; private addAllFromRange; private fixRangesWhenAddingColumns; private exchangeOrAddFormulaVertex; private setAddressMappingForArrayVertex; private truncateRanges; private fixArraysAfterAddingRow; private fixArraysAfterRemovingRows; private fixArraysAfterAddingColumn; private fixArraysAfterRemovingColumns; private shrinkPossibleArrayAndGetCell; private setNoSpaceIfArray; private removeVertex; private mergeRangeVertices; private removeVertexAndCleanupDependencies; } export interface ArrayAffectingGraphChangeResult { affectedArrays: Set<ArrayVertex>; } export interface EagerChangesGraphChangeResult extends ArrayAffectingGraphChangeResult { contentChanges: ContentChanges; }