UNPKG

hyperformula-dc

Version:

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

152 lines (141 loc) 8.57 kB
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; }();