UNPKG

hyperformula-dc

Version:

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

1,095 lines (881 loc) 34.2 kB
"use strict"; require("core-js/modules/es.array.slice.js"); require("core-js/modules/es.function.name.js"); require("core-js/modules/es.array.from.js"); require("core-js/modules/es.string.iterator.js"); require("core-js/modules/es.symbol.js"); require("core-js/modules/es.symbol.description.js"); require("core-js/modules/es.symbol.iterator.js"); require("core-js/modules/es.array.iterator.js"); require("core-js/modules/web.dom-collections.iterator.js"); exports.__esModule = true; exports.coerceComplexToString = coerceComplexToString; exports.coerceToRange = coerceToRange; exports.coerceToRangeNumbersOrError = coerceToRangeNumbersOrError; exports.coerceBooleanToNumber = coerceBooleanToNumber; exports.coerceEmptyToValue = coerceEmptyToValue; exports.coerceScalarToBoolean = coerceScalarToBoolean; exports.coerceScalarToString = coerceScalarToString; exports.zeroIfEmpty = zeroIfEmpty; exports.numberCmp = numberCmp; exports.isNumberOverflow = isNumberOverflow; exports.fixNegativeZero = fixNegativeZero; exports.forceNormalizeString = forceNormalizeString; exports.coerceRangeToScalar = coerceRangeToScalar; exports.normalizeString = _normalizeString; exports.ArithmeticHelper = void 0; require("core-js/modules/es.array.concat.js"); require("core-js/modules/es.regexp.exec.js"); require("core-js/modules/es.regexp.constructor.js"); require("core-js/modules/es.regexp.to-string.js"); require("core-js/modules/es.string.replace.js"); require("core-js/modules/es.string.trim.js"); require("core-js/modules/es.number.constructor.js"); require("core-js/modules/es.object.to-string.js"); require("core-js/modules/es.array.includes.js"); var _unorm = _interopRequireDefault(require("unorm")); var _Cell = require("../Cell"); var _errorMessage = require("../error-message"); var _StringHelper = require("../StringHelper"); var _InterpreterValue = require("./InterpreterValue"); var _SimpleRangeValue = require("./SimpleRangeValue"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); } function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } 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; } var COMPLEX_NUMBER_SYMBOL = 'i'; var complexParsingRegexp = /^\s*([+-]?)\s*(([\d\.,]+(e[+-]?\d+)?)\s*([ij]?)|([ij]))\s*(([+-])\s*([+-]?)\s*(([\d\.,]+(e[+-]?\d+)?)\s*([ij]?)|([ij])))?$/; var ArithmeticHelper = /*#__PURE__*/function () { function ArithmeticHelper(config, dateTimeHelper, numberLiteralsHelper) { var _this = this; _classCallCheck(this, ArithmeticHelper); this.config = config; this.dateTimeHelper = dateTimeHelper; this.numberLiteralsHelper = numberLiteralsHelper; this.lt = function (left, right) { return _this.compare(left, right) < 0; }; this.leq = function (left, right) { return _this.compare(left, right) <= 0; }; this.gt = function (left, right) { return _this.compare(left, right) > 0; }; this.geq = function (left, right) { return _this.compare(left, right) >= 0; }; this.eq = function (left, right) { return _this.compare(left, right) === 0; }; this.neq = function (left, right) { return _this.compare(left, right) !== 0; }; this.pow = function (left, right) { return Math.pow((0, _InterpreterValue.getRawValue)(left), (0, _InterpreterValue.getRawValue)(right)); }; this.addWithEpsilonRaw = function (left, right) { var ret = left + right; if (Math.abs(ret) < _this.actualEps * Math.abs(left)) { return 0; } else { return ret; } }; this.addWithEpsilon = function (left, right) { var typeOfResult = inferExtendedNumberTypeAdditive(left, right); return _this.ExtendedNumberFactory(_this.addWithEpsilonRaw((0, _InterpreterValue.getRawValue)(left), (0, _InterpreterValue.getRawValue)(right)), typeOfResult); }; this.unaryMinus = function (arg) { return (0, _InterpreterValue.cloneNumber)(arg, -(0, _InterpreterValue.getRawValue)(arg)); }; this.unaryPlus = function (arg) { return arg; }; this.unaryPercent = function (arg) { return new _InterpreterValue.PercentNumber((0, _InterpreterValue.getRawValue)(arg) / 100); }; this.concat = function (left, right) { return left.concat(right); }; this.nonstrictadd = function (left, right) { if (left instanceof _Cell.CellError) { return left; } else if (right instanceof _Cell.CellError) { return right; } else if (typeof left === 'number') { if (typeof right === 'number') { return _this.addWithEpsilonRaw(left, right); } else { return left; } } else if (typeof right === 'number') { return right; } else { return 0; } }; /** * Subtracts two numbers * * Implementation of subtracting which is used in interpreter. * * @param left - left operand of subtraction * @param right - right operand of subtraction * @param eps - precision of comparison */ this.subtract = function (leftArg, rightArg) { var typeOfResult = inferExtendedNumberTypeAdditive(leftArg, rightArg); var left = (0, _InterpreterValue.getRawValue)(leftArg); var right = (0, _InterpreterValue.getRawValue)(rightArg); var ret = left - right; if (Math.abs(ret) < _this.actualEps * Math.abs(left)) { ret = 0; } return _this.ExtendedNumberFactory(ret, typeOfResult); }; this.divide = function (leftArg, rightArg) { var left = (0, _InterpreterValue.getRawValue)(leftArg); var right = (0, _InterpreterValue.getRawValue)(rightArg); if (right === 0) { return new _Cell.CellError(_Cell.ErrorType.DIV_BY_ZERO); } else { var typeOfResult = inferExtendedNumberTypeMultiplicative(leftArg, rightArg); return _this.ExtendedNumberFactory(left / right, typeOfResult); } }; this.multiply = function (left, right) { var typeOfResult = inferExtendedNumberTypeMultiplicative(left, right); return _this.ExtendedNumberFactory((0, _InterpreterValue.getRawValue)(left) * (0, _InterpreterValue.getRawValue)(right), typeOfResult); }; this.manyToExactComplex = function (args) { var ret = []; var _iterator = _createForOfIteratorHelper(args), _step; try { for (_iterator.s(); !(_step = _iterator.n()).done;) { var arg = _step.value; if (arg instanceof _Cell.CellError) { return arg; } else if ((0, _InterpreterValue.isExtendedNumber)(arg) || typeof arg === 'string') { var coerced = _this.coerceScalarToComplex(arg); if (!(coerced instanceof _Cell.CellError)) { ret.push(coerced); } } } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } return ret; }; this.coerceNumbersExactRanges = function (args) { return _this.manyToNumbers(args, _this.manyToExactNumbers); }; this.coerceNumbersCoerceRangesDropNulls = function (args) { return _this.manyToNumbers(args, _this.manyToCoercedNumbersDropNulls); }; this.manyToExactNumbers = function (args) { var ret = []; var _iterator2 = _createForOfIteratorHelper(args), _step2; try { for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { var arg = _step2.value; if (arg instanceof _Cell.CellError) { return arg; } else if ((0, _InterpreterValue.isExtendedNumber)(arg)) { ret.push((0, _InterpreterValue.getRawValue)(arg)); } } } catch (err) { _iterator2.e(err); } finally { _iterator2.f(); } return ret; }; this.manyToOnlyNumbersDropNulls = function (args) { var ret = []; var _iterator3 = _createForOfIteratorHelper(args), _step3; try { for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) { var arg = _step3.value; if (arg instanceof _Cell.CellError) { return arg; } else if (arg === _InterpreterValue.EmptyValue) { continue; } else if ((0, _InterpreterValue.isExtendedNumber)(arg)) { ret.push((0, _InterpreterValue.getRawValue)(arg)); } else { return new _Cell.CellError(_Cell.ErrorType.VALUE, _errorMessage.ErrorMessage.NumberExpected); } } } catch (err) { _iterator3.e(err); } finally { _iterator3.f(); } return ret; }; this.manyToCoercedNumbersDropNulls = function (args) { var ret = []; var _iterator4 = _createForOfIteratorHelper(args), _step4; try { for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) { var arg = _step4.value; if (arg instanceof _Cell.CellError) { return arg; } if (arg === _InterpreterValue.EmptyValue) { continue; } var coerced = _this.coerceScalarToNumberOrError(arg); if ((0, _InterpreterValue.isExtendedNumber)(coerced)) { ret.push((0, _InterpreterValue.getRawValue)(coerced)); } } } catch (err) { _iterator4.e(err); } finally { _iterator4.f(); } return ret; }; this.collator = (0, _StringHelper.collatorFromConfig)(config); this.actualEps = config.smartRounding ? config.precisionEpsilon : 0; } _createClass(ArithmeticHelper, [{ key: "eqMatcherFunction", value: function eqMatcherFunction(pattern) { var _this2 = this; var regexp = this.buildRegex(pattern); return function (cellValue) { return typeof cellValue === 'string' && regexp.test(_this2.normalizeString(cellValue)); }; } }, { key: "neqMatcherFunction", value: function neqMatcherFunction(pattern) { var _this3 = this; var regexp = this.buildRegex(pattern); return function (cellValue) { return !(typeof cellValue === 'string') || !regexp.test(_this3.normalizeString(cellValue)); }; } }, { key: "searchString", value: function searchString(pattern, text) { var _a; var regexp = this.buildRegex(pattern, false); var result = regexp.exec(text); return (_a = result === null || result === void 0 ? void 0 : result.index) !== null && _a !== void 0 ? _a : -1; } }, { key: "requiresRegex", value: function requiresRegex(pattern) { if (!this.config.useRegularExpressions && !this.config.useWildcards) { return !this.config.matchWholeCell; } for (var i = 0; i < pattern.length; i++) { var c = pattern.charAt(i); if (isWildcard(c) || this.config.useRegularExpressions && needsEscape(c)) { return true; } } return false; } }, { key: "buildRegex", value: function buildRegex(pattern) { var matchWholeCell = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; pattern = this.normalizeString(pattern); var regexpStr; var useWildcards = this.config.useWildcards; var useRegularExpressions = this.config.useRegularExpressions; if (useRegularExpressions) { try { RegExp(pattern); } catch (e) { useRegularExpressions = false; useWildcards = false; } } if (useRegularExpressions) { regexpStr = escapeNoCharacters(pattern, this.config.caseSensitive); } else if (useWildcards) { regexpStr = escapeNonWildcards(pattern, this.config.caseSensitive); } else { regexpStr = escapeAllCharacters(pattern, this.config.caseSensitive); } if (this.config.matchWholeCell && matchWholeCell) { return RegExp('^(' + regexpStr + ')$'); } else { return RegExp(regexpStr); } } }, { key: "normalizeString", value: function normalizeString(str) { if (!this.config.caseSensitive) { str = str.toLowerCase(); } if (!this.config.accentSensitive) { str = _normalizeString(str, 'nfd').replace(/[\u0300-\u036f]/g, ''); } return str; } }, { key: "compare", value: function compare(left, right) { if (typeof left === 'string' || typeof right === 'string') { var leftTmp = typeof left === 'string' ? this.dateTimeHelper.dateStringToDateNumber(left) : left; var rightTmp = typeof right === 'string' ? this.dateTimeHelper.dateStringToDateNumber(right) : right; if ((0, _InterpreterValue.isExtendedNumber)(leftTmp) && (0, _InterpreterValue.isExtendedNumber)(rightTmp)) { return this.floatCmp(leftTmp, rightTmp); } } if (left === _InterpreterValue.EmptyValue) { left = coerceEmptyToValue(right); } else if (right === _InterpreterValue.EmptyValue) { right = coerceEmptyToValue(left); } if (typeof left === 'string' && typeof right === 'string') { return this.stringCmp(left, right); } else if (typeof left === 'boolean' && typeof right === 'boolean') { return numberCmp(coerceBooleanToNumber(left), coerceBooleanToNumber(right)); } else if ((0, _InterpreterValue.isExtendedNumber)(left) && (0, _InterpreterValue.isExtendedNumber)(right)) { return this.floatCmp(left, right); } else if (left === _InterpreterValue.EmptyValue && right === _InterpreterValue.EmptyValue) { return 0; } else { return numberCmp((0, _Cell.CellValueTypeOrd)((0, _Cell.getCellValueType)(left)), (0, _Cell.CellValueTypeOrd)((0, _Cell.getCellValueType)(right))); } } }, { key: "floatCmp", value: function floatCmp(leftArg, rightArg) { var left = (0, _InterpreterValue.getRawValue)(leftArg); var right = (0, _InterpreterValue.getRawValue)(rightArg); var mod = 1 + this.actualEps; if (right >= 0 && left * mod >= right && left <= right * mod) { return 0; } else if (right <= 0 && left * mod <= right && left >= right * mod) { return 0; } else if (left > right) { return 1; } else { return -1; } } }, { key: "stringCmp", value: function stringCmp(left, right) { return this.collator.compare(left, right); } }, { key: "coerceScalarToNumberOrError", value: function coerceScalarToNumberOrError(arg) { var _a; if (arg instanceof _Cell.CellError) { return arg; } return (_a = this.coerceToMaybeNumber(arg)) !== null && _a !== void 0 ? _a : new _Cell.CellError(_Cell.ErrorType.VALUE, _errorMessage.ErrorMessage.NumberCoercion); } }, { key: "coerceToMaybeNumber", value: function coerceToMaybeNumber(arg) { var _a; return (_a = this.coerceNonDateScalarToMaybeNumber(arg)) !== null && _a !== void 0 ? _a : typeof arg === 'string' ? this.dateTimeHelper.dateStringToDateNumber(arg) : undefined; } }, { key: "coerceNonDateScalarToMaybeNumber", value: function coerceNonDateScalarToMaybeNumber(arg) { if (arg === _InterpreterValue.EmptyValue) { return 0; } else if (typeof arg === 'string') { if (arg === '') { return 0; } return this.numberLiteralsHelper.numericStringToMaybeNumber(arg.trim()); } else if ((0, _InterpreterValue.isExtendedNumber)(arg)) { return arg; } else if (typeof arg === 'boolean') { return Number(arg); } else { return undefined; } } }, { key: "coerceComplexExactRanges", value: function coerceComplexExactRanges(args) { var vals = []; var _iterator5 = _createForOfIteratorHelper(args), _step5; try { for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) { var arg = _step5.value; if (arg instanceof _SimpleRangeValue.SimpleRangeValue) { vals.push(arg); } else if (arg !== _InterpreterValue.EmptyValue) { var coerced = this.coerceScalarToComplex(arg); if (coerced instanceof _Cell.CellError) { return coerced; } else { vals.push(coerced); } } } } catch (err) { _iterator5.e(err); } finally { _iterator5.f(); } var expandedVals = []; for (var _i = 0, _vals = vals; _i < _vals.length; _i++) { var val = _vals[_i]; if (val instanceof _SimpleRangeValue.SimpleRangeValue) { var arr = this.manyToExactComplex(val.valuesFromTopLeftCorner()); if (arr instanceof _Cell.CellError) { return arr; } else { expandedVals.push.apply(expandedVals, _toConsumableArray(arr)); } } else { expandedVals.push(val); } } return expandedVals; } }, { key: "manyToNumbers", value: function manyToNumbers(args, rangeFn) { var vals = []; var _iterator6 = _createForOfIteratorHelper(args), _step6; try { for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) { var arg = _step6.value; if (arg instanceof _SimpleRangeValue.SimpleRangeValue) { vals.push(arg); } else { var coerced = (0, _InterpreterValue.getRawValue)(this.coerceScalarToNumberOrError(arg)); if (coerced instanceof _Cell.CellError) { return coerced; } else { vals.push(coerced); } } } } catch (err) { _iterator6.e(err); } finally { _iterator6.f(); } var expandedVals = []; for (var _i2 = 0, _vals2 = vals; _i2 < _vals2.length; _i2++) { var val = _vals2[_i2]; if (val instanceof _SimpleRangeValue.SimpleRangeValue) { var arr = rangeFn(val.valuesFromTopLeftCorner()); if (arr instanceof _Cell.CellError) { return arr; } else { expandedVals.push.apply(expandedVals, _toConsumableArray(arr)); } } else { expandedVals.push(val); } } return expandedVals; } }, { key: "coerceScalarToComplex", value: function coerceScalarToComplex(arg) { if (arg instanceof _Cell.CellError) { return arg; } else if (arg === _InterpreterValue.EmptyValue) { return [0, 0]; } else if ((0, _InterpreterValue.isExtendedNumber)(arg)) { return [(0, _InterpreterValue.getRawValue)(arg), 0]; } else if (typeof arg === 'string') { return this.coerceStringToComplex(arg); } else { return new _Cell.CellError(_Cell.ErrorType.NUM, _errorMessage.ErrorMessage.ComplexNumberExpected); } } }, { key: "coerceStringToComplex", value: function coerceStringToComplex(arg) { var match = complexParsingRegexp.exec(arg); if (match === null) { return new _Cell.CellError(_Cell.ErrorType.NUM, _errorMessage.ErrorMessage.ComplexNumberExpected); } var val1; if (match[6] !== undefined) { val1 = match[1] === '-' ? [0, -1] : [0, 1]; } else { val1 = this.parseComplexToken(match[1] + match[3], match[5]); } if (val1 instanceof _Cell.CellError) { return val1; } if (match[8] === undefined) { return val1; } var val2; if (match[14] !== undefined) { val2 = match[9] === '-' ? [0, -1] : [0, 1]; } else { val2 = this.parseComplexToken(match[9] + match[11], match[13]); } if (val2 instanceof _Cell.CellError) { return val2; } if (match[5] !== '' || match[13] === '') { return new _Cell.CellError(_Cell.ErrorType.NUM, _errorMessage.ErrorMessage.ComplexNumberExpected); } if (match[8] === '+') { return [val1[0] + val2[0], val1[1] + val2[1]]; } else { return [val1[0] - val2[0], val1[1] - val2[1]]; } } }, { key: "parseComplexToken", value: function parseComplexToken(arg, mod) { var val = (0, _InterpreterValue.getRawValue)(this.coerceNonDateScalarToMaybeNumber(arg)); if (val === undefined) { return new _Cell.CellError(_Cell.ErrorType.NUM, _errorMessage.ErrorMessage.ComplexNumberExpected); } if (mod === '') { return [val, 0]; } else { return [0, val]; } } }, { key: "ExtendedNumberFactory", value: function ExtendedNumberFactory(value, typeFormat) { var type = typeFormat.type, format = typeFormat.format; switch (type) { case _InterpreterValue.NumberType.NUMBER_RAW: return value; case _InterpreterValue.NumberType.NUMBER_CURRENCY: { return new _InterpreterValue.CurrencyNumber(value, format !== null && format !== void 0 ? format : this.config.currencySymbol[0]); } case _InterpreterValue.NumberType.NUMBER_DATE: return new _InterpreterValue.DateNumber(value, format); case _InterpreterValue.NumberType.NUMBER_DATETIME: return new _InterpreterValue.DateTimeNumber(value, format); case _InterpreterValue.NumberType.NUMBER_TIME: return new _InterpreterValue.TimeNumber(value, format); case _InterpreterValue.NumberType.NUMBER_PERCENT: return new _InterpreterValue.PercentNumber(value, format); } } }]); return ArithmeticHelper; }(); exports.ArithmeticHelper = ArithmeticHelper; function coerceComplexToString(_ref, symb) { var _ref2 = _slicedToArray(_ref, 2), re = _ref2[0], im = _ref2[1]; if (!isFinite(re) || !isFinite(im)) { return new _Cell.CellError(_Cell.ErrorType.NUM, _errorMessage.ErrorMessage.NaN); } symb = symb !== null && symb !== void 0 ? symb : COMPLEX_NUMBER_SYMBOL; if (im === 0) { return "".concat(re); } var imStr = "".concat(im === -1 || im === 1 ? '' : Math.abs(im)).concat(symb); if (re === 0) { return "".concat(im < 0 ? '-' : '').concat(imStr); } return "".concat(re).concat(im < 0 ? '-' : '+').concat(imStr); } function coerceToRange(arg) { if (arg instanceof _SimpleRangeValue.SimpleRangeValue) { return arg; } else { return _SimpleRangeValue.SimpleRangeValue.fromScalar(arg); } } function coerceToRangeNumbersOrError(arg) { if (arg instanceof _SimpleRangeValue.SimpleRangeValue && arg.hasOnlyNumbers() || arg instanceof _Cell.CellError) { return arg; } else if ((0, _InterpreterValue.isExtendedNumber)(arg)) { return _SimpleRangeValue.SimpleRangeValue.fromScalar(arg); } else { return null; } } function coerceBooleanToNumber(arg) { return Number(arg); } function coerceEmptyToValue(arg) { if (typeof arg === 'string') { return ''; } else if ((0, _InterpreterValue.isExtendedNumber)(arg)) { return 0; } else if (typeof arg === 'boolean') { return false; } else { return _InterpreterValue.EmptyValue; } } /** * Coerce scalar value to boolean if possible, or error if value is an error * * @param arg */ function coerceScalarToBoolean(arg) { if (arg instanceof _Cell.CellError || typeof arg === 'boolean') { return arg; } else if (arg === _InterpreterValue.EmptyValue) { return false; } else if ((0, _InterpreterValue.isExtendedNumber)(arg)) { return (0, _InterpreterValue.getRawValue)(arg) !== 0; } else { var argUppered = arg.toUpperCase(); if (argUppered === 'TRUE') { return true; } else if (argUppered === 'FALSE') { return false; } else if (argUppered === '') { return false; } else { return undefined; } } } function coerceScalarToString(arg) { if (arg instanceof _Cell.CellError || typeof arg === 'string') { return arg; } else if (arg === _InterpreterValue.EmptyValue) { return ''; } else if ((0, _InterpreterValue.isExtendedNumber)(arg)) { return (0, _InterpreterValue.getRawValue)(arg).toString(); } else { return arg ? 'TRUE' : 'FALSE'; } } function zeroIfEmpty(arg) { return arg === _InterpreterValue.EmptyValue ? 0 : arg; } function numberCmp(leftArg, rightArg) { var left = (0, _InterpreterValue.getRawValue)(leftArg); var right = (0, _InterpreterValue.getRawValue)(rightArg); if (left > right) { return 1; } else if (left < right) { return -1; } else { return 0; } } function isNumberOverflow(arg) { return isNaN(arg) || arg === Infinity || arg === -Infinity; } function fixNegativeZero(arg) { if (arg === 0) { return 0; } else { return arg; } } function isWildcard(c) { return ['*', '?'].includes(c); } var escapedCharacters = ['{', '}', '[', ']', '(', ')', '<', '>', '=', '.', '+', '-', ',', '\\', '$', '^', '!']; function needsEscape(c) { return escapedCharacters.includes(c); } function escapeNonWildcards(pattern, caseSensitive) { var str = ''; for (var i = 0; i < pattern.length; i++) { var c = pattern.charAt(i); if (c === '~') { if (i == pattern.length - 1) { str += '~'; continue; } var d = pattern.charAt(i + 1); if (isWildcard(d) || needsEscape(d)) { str += '\\' + d; i++; } else { str += d; i++; } } else if (isWildcard(c)) { str += '.' + c; } else if (needsEscape(c)) { str += '\\' + c; } else if (caseSensitive) { str += c; } else { str += c.toLowerCase(); } } return str; } function escapeAllCharacters(pattern, caseSensitive) { var str = ''; for (var i = 0; i < pattern.length; i++) { var c = pattern.charAt(i); if (isWildcard(c) || needsEscape(c)) { str += '\\' + c; } else if (caseSensitive) { str += c; } else { str += c.toLowerCase(); } } return str; } function escapeNoCharacters(pattern, caseSensitive) { var str = ''; for (var i = 0; i < pattern.length; i++) { var c = pattern.charAt(i); if (isWildcard(c) || needsEscape(c)) { str += c; } else if (caseSensitive) { str += c; } else { str += c.toLowerCase(); } } return str; } function inferExtendedNumberTypeAdditive(leftArg, rightArg) { var _getTypeFormatOfExten = (0, _InterpreterValue.getTypeFormatOfExtendedNumber)(leftArg), leftType = _getTypeFormatOfExten.type, leftFormat = _getTypeFormatOfExten.format; var _getTypeFormatOfExten2 = (0, _InterpreterValue.getTypeFormatOfExtendedNumber)(rightArg), rightType = _getTypeFormatOfExten2.type, rightFormat = _getTypeFormatOfExten2.format; if (leftType === _InterpreterValue.NumberType.NUMBER_RAW) { return { type: rightType, format: rightFormat }; } if (rightType === _InterpreterValue.NumberType.NUMBER_RAW) { return { type: leftType, format: leftFormat }; } if ((leftType === _InterpreterValue.NumberType.NUMBER_DATETIME || leftType === _InterpreterValue.NumberType.NUMBER_DATE) && (rightType === _InterpreterValue.NumberType.NUMBER_DATETIME || rightType === _InterpreterValue.NumberType.NUMBER_DATE)) { return { type: _InterpreterValue.NumberType.NUMBER_RAW }; } if (leftType === _InterpreterValue.NumberType.NUMBER_TIME) { if (rightType === _InterpreterValue.NumberType.NUMBER_DATE) { return { type: _InterpreterValue.NumberType.NUMBER_DATETIME, format: rightFormat + ' ' + leftFormat }; } if (rightType === _InterpreterValue.NumberType.NUMBER_DATETIME) { return { type: _InterpreterValue.NumberType.NUMBER_DATETIME, format: rightFormat }; } } if (rightType === _InterpreterValue.NumberType.NUMBER_TIME) { if (leftType === _InterpreterValue.NumberType.NUMBER_DATE) { return { type: _InterpreterValue.NumberType.NUMBER_DATETIME, format: leftFormat + ' ' + rightFormat }; } if (leftType === _InterpreterValue.NumberType.NUMBER_DATETIME) { return { type: _InterpreterValue.NumberType.NUMBER_DATETIME, format: leftFormat }; } } return { type: leftType, format: leftFormat }; } function inferExtendedNumberTypeMultiplicative(leftArg, rightArg) { var _getTypeFormatOfExten3 = (0, _InterpreterValue.getTypeFormatOfExtendedNumber)(leftArg), leftType = _getTypeFormatOfExten3.type, leftFormat = _getTypeFormatOfExten3.format; var _getTypeFormatOfExten4 = (0, _InterpreterValue.getTypeFormatOfExtendedNumber)(rightArg), rightType = _getTypeFormatOfExten4.type, rightFormat = _getTypeFormatOfExten4.format; if (leftType === _InterpreterValue.NumberType.NUMBER_PERCENT) { leftType = _InterpreterValue.NumberType.NUMBER_RAW; leftFormat = undefined; } if (rightType === _InterpreterValue.NumberType.NUMBER_PERCENT) { rightType = _InterpreterValue.NumberType.NUMBER_RAW; rightFormat = undefined; } if (leftType === _InterpreterValue.NumberType.NUMBER_RAW) { return { type: rightType, format: rightFormat }; } if (rightType === _InterpreterValue.NumberType.NUMBER_RAW) { return { type: leftType, format: leftFormat }; } return { type: _InterpreterValue.NumberType.NUMBER_RAW }; } function forceNormalizeString(str) { return _normalizeString(str.toLowerCase(), 'nfd').replace(/[\u0300-\u036f]/g, ''); } function coerceRangeToScalar(arg, state) { var _a; if (arg.isAdHoc()) { return (_a = arg.data[0]) === null || _a === void 0 ? void 0 : _a[0]; } var range = arg.range; if (state.formulaAddress.sheet === range.sheet) { if (range.width() === 1) { var offset = state.formulaAddress.row - range.start.row; if (offset >= 0 && offset < range.height()) { return arg.data[offset][0]; } } else if (range.height() === 1) { var _offset = state.formulaAddress.col - range.start.col; if (_offset >= 0 && _offset < range.width()) { return arg.data[0][_offset]; } } } return undefined; } function _normalizeString(str, form) { return typeof str.normalize === 'function' ? str.normalize(form.toUpperCase()) : _unorm.default[form](str); }