hyperformula-dc
Version:
HyperFormula is a JavaScript engine for efficient processing of spreadsheet-like data and formulas
152 lines (141 loc) • 8.57 kB
JavaScript
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
import "core-js/modules/web.dom-collections.for-each.js";
import "core-js/modules/es.function.name.js";
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
/**
* @license
* Copyright (c) 2021 Handsoncode. All rights reserved.
*/
import { ArraySizePredictor } from './ArraySize';
import { CellContentParser } from './CellContentParser';
import { ClipboardOperations } from './ClipboardOperations';
import { Config } from './Config';
import { CrudOperations } from './CrudOperations';
import { DateTimeHelper } from './DateTimeHelper';
import { DependencyGraph } from './DependencyGraph';
import { SheetSizeLimitExceededError } from './errors';
import { Evaluator } from './Evaluator';
import { Exporter } from './Exporter';
import { GraphBuilder } from './GraphBuilder';
import { UIElement } from './i18n';
import { ArithmeticHelper } from './interpreter/ArithmeticHelper';
import { FunctionRegistry } from './interpreter/FunctionRegistry';
import { Interpreter } from './interpreter/Interpreter';
import { LazilyTransformingAstService } from './LazilyTransformingAstService';
import { buildColumnSearchStrategy } from './Lookup/SearchStrategy';
import { NamedExpressions } from './NamedExpressions';
import { NumberLiteralHelper } from './NumberLiteralHelper';
import { Operations } from './Operations';
import { buildLexerConfig, ParserWithCaching, Unparser } from './parser';
import { Serialization } from './Serialization';
import { findBoundaries, validateAsSheet } from './Sheet';
import { EmptyStatistics, Statistics, StatType } from './statistics';
import { UndoRedo } from './UndoRedo';
export var BuildEngineFactory = /*#__PURE__*/function () {
function BuildEngineFactory() {
_classCallCheck(this, BuildEngineFactory);
}
_createClass(BuildEngineFactory, null, [{
key: "buildEngine",
value: function buildEngine(config) {
var sheets = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var inputNamedExpressions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
var stats = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : config.useStats ? new Statistics() : new EmptyStatistics();
stats.start(StatType.BUILD_ENGINE_TOTAL);
var namedExpressions = new NamedExpressions();
var functionRegistry = new FunctionRegistry(config);
var lazilyTransformingAstService = new LazilyTransformingAstService(stats);
var dependencyGraph = DependencyGraph.buildEmpty(lazilyTransformingAstService, config, functionRegistry, namedExpressions, stats);
var columnSearch = buildColumnSearchStrategy(dependencyGraph, config, stats);
var sheetMapping = dependencyGraph.sheetMapping;
var addressMapping = dependencyGraph.addressMapping;
for (var sheetName in sheets) {
if (Object.prototype.hasOwnProperty.call(sheets, sheetName)) {
var sheet = sheets[sheetName];
validateAsSheet(sheet);
var boundaries = findBoundaries(sheet);
if (boundaries.height > config.maxRows || boundaries.width > config.maxColumns) {
throw new SheetSizeLimitExceededError();
}
var sheetId = sheetMapping.addSheet(sheetName);
addressMapping.autoAddSheet(sheetId, sheet, boundaries);
}
}
var parser = new ParserWithCaching(config, functionRegistry, sheetMapping.get);
lazilyTransformingAstService.parser = parser;
var unparser = new Unparser(config, buildLexerConfig(config), sheetMapping.fetchDisplayName, namedExpressions);
var dateTimeHelper = new DateTimeHelper(config);
var numberLiteralHelper = new NumberLiteralHelper(config);
var arithmeticHelper = new ArithmeticHelper(config, dateTimeHelper, numberLiteralHelper);
var cellContentParser = new CellContentParser(config, dateTimeHelper, numberLiteralHelper);
var arraySizePredictor = new ArraySizePredictor(config, functionRegistry);
var operations = new Operations(config, dependencyGraph, columnSearch, cellContentParser, parser, stats, lazilyTransformingAstService, namedExpressions, arraySizePredictor);
var undoRedo = new UndoRedo(config, operations);
lazilyTransformingAstService.undoRedo = undoRedo;
var clipboardOperations = new ClipboardOperations(config, dependencyGraph, operations);
var crudOperations = new CrudOperations(config, operations, undoRedo, clipboardOperations, dependencyGraph, columnSearch, parser, cellContentParser, lazilyTransformingAstService, namedExpressions);
inputNamedExpressions.forEach(function (entry) {
crudOperations.ensureItIsPossibleToAddNamedExpression(entry.name, entry.expression, entry.scope);
crudOperations.operations.addNamedExpression(entry.name, entry.expression, entry.scope, entry.options);
});
var exporter = new Exporter(config, namedExpressions, sheetMapping.fetchDisplayName, lazilyTransformingAstService);
var serialization = new Serialization(dependencyGraph, unparser, exporter);
var interpreter = new Interpreter(config, dependencyGraph, columnSearch, stats, arithmeticHelper, functionRegistry, namedExpressions, serialization, arraySizePredictor, dateTimeHelper);
stats.measure(StatType.GRAPH_BUILD, function () {
var graphBuilder = new GraphBuilder(dependencyGraph, columnSearch, parser, cellContentParser, stats, arraySizePredictor);
graphBuilder.buildGraph(sheets, stats);
});
var evaluator = new Evaluator(config, stats, interpreter, lazilyTransformingAstService, dependencyGraph, columnSearch);
evaluator.run();
stats.end(StatType.BUILD_ENGINE_TOTAL);
return {
config: config,
stats: stats,
dependencyGraph: dependencyGraph,
columnSearch: columnSearch,
parser: parser,
unparser: unparser,
cellContentParser: cellContentParser,
evaluator: evaluator,
lazilyTransformingAstService: lazilyTransformingAstService,
crudOperations: crudOperations,
exporter: exporter,
namedExpressions: namedExpressions,
serialization: serialization,
functionRegistry: functionRegistry
};
}
}, {
key: "buildFromSheets",
value: function buildFromSheets(sheets) {
var configInput = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var namedExpressions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
var config = new Config(configInput);
return this.buildEngine(config, sheets, namedExpressions);
}
}, {
key: "buildFromSheet",
value: function buildFromSheet(sheet) {
var configInput = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var namedExpressions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
var config = new Config(configInput);
var newsheetprefix = config.translationPackage.getUITranslation(UIElement.NEW_SHEET_PREFIX) + '1';
return this.buildEngine(config, _defineProperty({}, newsheetprefix, sheet), namedExpressions);
}
}, {
key: "buildEmpty",
value: function buildEmpty() {
var configInput = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var namedExpressions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
return this.buildEngine(new Config(configInput), {}, namedExpressions);
}
}, {
key: "rebuildWithConfig",
value: function rebuildWithConfig(config, sheets, namedExpressions, stats) {
return this.buildEngine(config, sheets, namedExpressions, stats);
}
}]);
return BuildEngineFactory;
}();