Skip to content

Latest commit

 

History

History
600 lines (451 loc) · 32.4 KB

CHANGELOG.md

File metadata and controls

600 lines (451 loc) · 32.4 KB

HyperFormula changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[Unreleased]

[2.7.0] - 2024-04-10

Added

  • Added method getNamedExpressionsFromFormula to extract named expressions from formulas. #1365
  • Added context config option for passing data to custom functions. #1396

[2.6.2] - 2024-02-15

Changed

  • Removed unorm dependency. #1370

[2.6.1] - 2023-12-27

Fixed

  • Fixed an issue where operating on ranges of incompatible sizes resulted in a runtime exception. #1267
  • Fixed an issue where the simpleCellAddressFromString() method was crashing when called with a non-ASCII character in an unquoted sheet name. #1312
  • Fixed an issue where adding a row to a very large spreadsheet resulted in the Maximum call stack size exceeded error. #1332
  • Fixed an issue where using a column-range reference to an empty sheet as a function argument resulted in the Incorrect array size error. #1147
  • Fixed an issue where the SUBSTITUTE function wasn't working correctly with regex special characters. #1289
  • Fixed a typo in the JSDoc comment of the HyperFormula class. #1323

[2.6.0] - 2023-09-19

Added

  • Exported the EmptyValue symbol as a public API. This allows custom functions to handle empty cell values. #1232

Changed

  • Improved the efficiency of the default date/time parsing methods. #876
  • Improved the efficiency of the operations on the dependency graph. #876

Fixed

  • Fixed a bug where neighboring exported changes of an array formula were missing. #1291
  • Fixed a typo in the source code of the MatrixPlugin. #1306

[2.5.0] - 2023-05-29

Added

  • Added a new function: ADDRESS. #1221
  • Added a new function: HYPERLINK. #1215
  • Added a new function: IFS. #1157

Changed

  • Optimized the updateConfig() method to rebuild HyperFormula only when the new configuration is different from the old one. #1251

Fixed

  • Fixed the SEARCH function to be case-insensitive regardless of HyperFormula's configuration. #1225

[2.4.0] - 2023-04-24

Added

  • Exported the CellError class as a public API. #1232
  • Exported the SimpleRangeValue class as a public API. #1178

Fixed

  • Fixed an EmptyCellVertex data integrity issue between the AddressMapping and DependencyGraph objects. #1188
  • Fixed a build issue with M1- and M2-chip MacBooks. #1166
  • Fixed an issue where the order of items returned by removeColumns() depended on the address mapping policy. #1205

[2.3.1] - 2023-03-03

Fixed

  • Fixed an issue where expression names were not allowed to start with a cell reference. #1058
  • Fixed an issue where expression names were allowed to start with R1C1-notation references. For better compatibility with other spreadsheet software, strings such as R4C5, RC1000, R1C or RC can't be used in expression names anymore. #1058
  • Fixed an issue where using reversed ranges with absolute addressing could cause the Incorrect array size error. #1106
  • Fixed an issue where removing a sheet (removeSheet()) without clearing it (clearSheet()) could cause an error. #1121

[2.3.0] - 2022-12-22

Added

  • Exported the ArraySize class as a public API. #843
  • Renamed an internal interface from ArgumentTypes to FunctionArgumentType, and exported it as a public API. #1108
  • Exported ImplementedFunctions and FunctionMetadata as public APIs. #1108

[2.2.0] - 2022-11-17

Added

  • Added an American English (enUS) language pack. It's a convenience alias: it contains the same translations as the existing British English (enGB) language pack. #1025

Fixed

  • Fixed functions VLOOKUP and HLOOKUP to handle duplicates in the way specified by the OpenDocument standard. #1072
  • Fixed the MATCH function to handle descending ranges in the way specified by the OpenDocument standard. #1063

[2.1.0] - 2022-09-08

Added

  • Added two new functions: MAXIFS and MINIFS. #1049

Changed

  • Changed the rounding strategy of the default time-parsing function to be independent of the timeFormats configuration option. Now, time values are always rounded to the nearest millisecond (0.001 s). #953

Fixed

  • Fixed a rounding issue that caused the TEXT function to incorrectly convert dates and times to strings. #1043
  • Fixed an issue where functions SUMIF, SUMIFS, COUNTIF, COUNTIFS, and AVERAGEIF incorrectly handled complex numeric values. #951

Removed

  • Removed all polyfills from the CommonJS build and the ES modules build. In the UMD build, kept only the polyfills required by the supported browsers. #1011

[2.0.1] - 2022-06-14

Changed

  • Changed the following npm scripts (used internally): docs, docs:api, docs:dev, docs:build, coverage, typings:check. #977

Fixed

  • Fixed an issue where it was impossible to add a custom function with no parameters. #968

[2.0.0] - 2022-04-14

For more information on this release, see:

Added

  • Added support for reversed ranges. #834
  • Added a new configuration option, ignoreWhiteSpace, which allows for parsing formulas that contain whitespace characters of any kind. #898

Changed

  • Breaking change: Removed the gpu.js dependency and its use, to speed up the installation time. #812
  • Breaking change: Removed the deprecated gpujs and gpuMode configuration options. #812

Fixed

  • Fixed an issue where the RATE function didn't converge for some inputs. #905

[1.3.1] - 2022-01-11

Fixed

  • Fixed an issue where warnings about deprecated configuration options were getting duplicated. #882

[1.3.0] - 2021-10-20

Added

  • Added a new static property: defaultConfig. #822
  • The getFillRangeData() method can now use one sheet for its source and another sheet for its target. #836

Fixed

  • Fixed the handling of Unicode characters and non-letter characters in the PROPER function. #811
  • Fixed unnecessary warnings caused by deprecated configuration options. #830
  • Fixed the SUMPRODUCT function. #810

[1.2.0] - 2021-09-23

Changed

  • Removed gpu.js from optional dependencies and marked config options gpujs and gpuMode as deprecated.

[1.1.0] - 2021-08-12

Added

  • Added support for the array arithmetic mode in the calculateFormula() method. #782
  • Added a new CellType returned by getCellType: CellType.ARRAYFORMULA. It's assigned to the top-left corner of an array, and is recognized by the isCellPartOfArray() and doesCellHaveFormula() methods. #781

Changed

  • Deprecated the binarySearchThreshold configuration option, as every search of sorted data always uses binary search. #791

Fixed

  • Fixed an issue with searching sorted data. #787
  • Fixed the destroy method to properly destroy HyperFormula instances. #788

[1.0.0] - 2021-07-15

Added

  • Added support for array arithmetic. #628
  • Added performance improvements for array handling. #629
  • Added ARRAYFORMULA function. #630
  • Added FILTER function. #668
  • Added ARRAY_CONSTRAIN function. #661
  • Added casting to scalars from non-range arrays. #663
  • Added support for range interpolation. #665
  • Added parsing of arrays in formulas (together with respective config options for separators). #671
  • Added support for vectorization of scalar functions. #673
  • Added support for time in JS Date() objects on the input. #648
  • Added validation of API argument types for simple types. #654
  • Added named expression handling to engine factories. #680
  • Added getAllNamedExpressionsSerialized method. #680
  • Added parsing of arrays in formulas (together with respective config options for separators). #671
  • Added utility function for filling ranges with source from other range. #678
  • Added pretty print for detailedCellError. #712
  • Added simpleCellRangeFromString and simpleCellRangeToString helpers. #720
  • Added CellError to exports. #736
  • Added mapping policies to the exports: AlwaysDense, AlwaysSparse, DenseSparseChooseBasedOnThreshold. #747
  • Added #SPILL! error type. #708
  • Added large tests for CRUD interactions. #755
  • Added support for array arithmetic in plugins. #766
  • Added a flag to getFillRangeData to support different types of offsetting. #767

Changed

  • Breaking change: Changed API of many sheet-related methods to take sheetId instead of sheetName as an argument. #645
  • Breaking change: Removed support for matrix formulas ({=FORMULA}) notation. Engine now supports formulas returning array of values (instead of only scalars). #652
  • Breaking change: Removed numeric matrix detection along with matrixDetection and matrixDetectionThreshold config options. #669
  • Breaking change: Changed API of the following methods to take SimpleCellRange type argument: copy, cut, getCellDependents, getCellPrecedents, getFillRangeData, getRangeFormulas, getRangeSerialized, getRangeValues, isItPossibleToMoveCells, isItPossibleToSetCellContents, moveCells. #687
  • Breaking change: Changed the AGPLv3 license to GPLv3.
  • Breaking change: Removed the free non-commercial license.
  • Breaking change: Changed behaviour of setCellContents so that it is possible to override space occupied by spilled array. #708
  • Breaking change: Changed behaviour of addRows/removeRows so that it is possible to add/remove rows across spilled array without changing array size. #708
  • Breaking change: Changed behaviour of addColumns/removeColumns so that it is possible to add/remove columns across spilled array without changing array size. #732
  • Breaking change: Changed config options #747:
before after
matrixColumnSeparator arrayColumnSeparator
matrixRowSeparator arrayRowSeparator
  • Breaking change: Changed CellType.MATRIX to CellType.ARRAY #747
  • Breaking change: Changed API methods #747:
before after
matrixMapping arrrayMapping
isCellPartOfMatrix isCellPartOfArray
  • Breaking change: Changed Exceptions #747:
before after
SourceLocationHasMatrixError SourceLocationHasArrayError
TargetLocationHasMatrixError TargetLocationHasArrayError
  • Changed SWITCH function, so it takes array as its first argument.
  • Changed TRANSPOSE function, so it works with data of any type. #708
  • Changed the way how we include gpu.js making it even more optional #753

Fixed

  • Fixed an issue with arrays and cruds. #651
  • Fixed handling of arrays for ROWS/COLUMNS functions. #677
  • Fixed an issue with nested named expressions. #679
  • Fixed an issue with matrixDetection + number parsing. #686
  • Fixed an issue with NOW and TODAY functions. #709
  • Fixed an issue with MIN/MAX function caches. #711
  • Fixed an issue with caching and order of evaluation. #735

[0.6.2] - 2021-05-26

Changed

  • Modified a private field in one of the classes to ensure broader compatibility with older TypeScript versions. #681

[0.6.1] - 2021-05-24

Changed

  • Remove redundant 'assert' dependency from the code. #672

Fixed

  • Fixed library support for IE11. The unorm package is added to the dependencies. #675

[0.6.0] - 2021-04-27

Added

  • Added two new fired events, for suspending and resuming execution. #637
  • Added listing in scopes to listNamedExpressions method. #638

Changed

  • Breaking change: Moved GPU.js from dependencies to devDependencies and optionalDependencies. #642

Fixed

  • Fixed issues with scoped named expression. #646 #641
  • Fixed an issue with losing formating info about DateTime numbers. #626

[0.5.0] - 2021-04-15

Added

  • Added support for row and column reordering. #343
  • Added type inferrence for subtypes for number. #313
  • Added parsing of number literals containing '%' or currency symbol (default '$'). #590
  • Added ability to fallback to plain CPU implementation for functions that uses GPU.js #355

Changed

  • Breaking change: A change to the type of value returned via serialization methods. #617
  • An input value should be preserved through serialization more precisely. #617
  • GPU.js constructor needs to be provided directly to engine configuration. #355
  • A deprecated config option vlookupThreshold has been removed. #620

Fixed

  • Fixed minor issue. #631
  • Fixed a bug with serialization of some addresses after CRUDs. #587
  • Fixed a bug with MEDIAN function implementation. #601
  • Fixed a bug with copy-paste operation that could cause out of scope references #591
  • Fixed a bug with date parsing. #614
  • Fixed a bug where accent/case sensitivity was ignored for LOOKUPs. #621
  • Fixed a bug with handling of no time format/no date format scenarios. #616

[0.4.0] - 2020-12-17

Added

  • Added 50 mathematical functions: ROMAN, ARABIC, FACT, FACTDOUBLE, COMBIN, COMBINA, GCD, LCM, MROUND, MULTINOMIAL, QUOTIENT, RANDBETWEEN, SERIESSUM, SIGN, SQRTPI, SUMX2MY2, SUMX2PY2, SUMXMY2, CEILING.MATH, FLOOR.MATH, FLOOR, CEILING.PRECISE, FLOOR.PRECISE, ISO.CEILING, COMPLEX, IMABS, IMAGINARY, IMARGUMENT, IMCONJUGATE, IMCOS, IMCOSH, IMCOT, IMCSC, IMCSCH, IMDIV, IMEXP, IMLN, IMLOG10, IMLOG2, IMPOWER, IMPRODUCT, IMREAL, IMSEC, IMSECH, IMSIN, IMSINH, IMSQRT, IMSUB, IMSUM, IMTAN. #537 #582 #281 #581
  • Added 106 statistical functions: EXPON.DIST, EXPONDIST, FISHER, FISHERINV, GAMMA, GAMMA.DIST, GAMMADIST, GAMMALN, GAMMALN.PRECISE, GAMMA.INV, GAMMAINV, GAUSS, BETA.DIST, BETADIST, BETA.INV, BETAINV, BINOM.DIST, BINOMDIST, BINOM.INV, BESSELI, BESSELJ, BESSELK, BESSELY, CHISQ.DIST, CHISQ.DIST.RT, CHISQ.INV, CHISQ.INV.RT, CHIDIST, CHIINV, F.DIST, F.DIST.RT, F.INV, F.INV.RT, FDIST, FINV, WEIBULL, WEIBULL.DIST, HYPGEOMDIST, HYPGEOM.DIST, T.DIST, T.DIST.2T, T.DIST.RT, T.INV, T.INV.2T, TDIST, TINV, LOGNORM.DIST, LOGNORMDIST, LOGNORM.INV, LOGINV, NORM.DIST, NORMDIST, NORM.S.DIST, NORMSDIST, NORM.INV, NORMINV, NORM.S.INV, NORMSINV, PHI, NEGBINOM.DIST, NEGBINOMDIST, POISSON, POISSON.DIST, LARGE, SMALL, AVEDEV, CONFIDENCE, CONFIDENCE.NORM, CONFIDENCE.T, DEVSQ, GEOMEAN, HARMEAN, CRITBINOM, COVAR, COVARIANCE.P, COVARIANCE.S, PEARSON, RSQ, STANDARDIZE, Z.TEST, ZTEST, F.TEST, FTEST, STEYX, SLOPE, CHITEST, CHISQ.TEST, T.TEST, TTEST, SKEW.P, SKEW, WEIBULLDIST, VARS, TINV2T, TDISTRT, TDIST2T, STDEVS, FINVRT, FDISTRT, CHIDISTRT, CHIINVRT, COVARIANCEP, COVARIANCES, LOGNORMINV, POISSONDIST, SKEWP. #152 #154 #160
  • Added function aliases mechanism. #569
  • Added support for scientific notation. #579
  • Added support for complex numbers. #281

Changed

  • A breaking change: CEILING function implementation to be consistent with existing implementations. #582

Fixed

  • Fixed a problem with dependencies not collected for specific functions. #550 #549
  • Fixed a minor problem with dependencies under nested parenthesis. #549 #558
  • Fixed a problem with HLOOKUP/VLOOKUP getting stuck in binary search. #559 #562
  • Fixed a problem with the logic of dependency resolving. #561 #563
  • Fixed a minor bug with ATAN2 function. #581

[0.3.0] - 2020-10-22

Added

  • Added 9 text functions EXACT, LOWER, UPPER, MID, T, SUBSTITUTE, REPLACE, UNICODE, UNICHAR. #159
  • Added 5 datetime functions: INTERVAL, NETWORKDAYS, NETWORKDAYS.INTL, WORKDAY, WORKDAY.INTL. #153
  • Added 3 information functions HLOOKUP, ROW, COLUMN. #520
  • Added 5 financial functions FVSCHEDULE, NPV, MIRR, PDURATION, XNPV. #542
  • Added 12 statistical functions VAR.P, VAR.S, VARA, VARPA, STDEV.P, STDEV.S, STDEVA, STDEVPA, VARP, VAR, STDEVP, STDEV. #536
  • Added 2 mathematical functions SUBTOTAL, PRODUCT. #536
  • Added 15 operator functions HF.ADD, HF.CONCAT, HF.DIVIDE, HF.EQ, HF.GT, HF.GTE, HF.LT, HF.LTE, HF.MINUS, HF.MULTIPLY, HF.NE, HF.POW, HF.UMINUS, HF.UNARY_PERCENT, HF.UPLUS. #543

Fixed

  • Fixed multiple issues with VLOOKUP function. #526 #528
  • Fixed MATCH and INDEX functions compatiblity. #520
  • Fixed issue with config update that does not preserve named expressions. #527
  • Fixed minor issue with arithmetic operations error messages. #532

[0.2.0] - 2020-09-22

Added

  • Added 9 text functions LEN, TRIM, PROPER, CLEAN, REPT, RIGHT, LEFT, SEARCH, FIND. #221
  • Added helper methods for keeping track of cell/range dependencies: getCellPrecedents and getCellDependents. #441
  • Added 22 financial functions FV, PMT, PPMT, IPMT, CUMIPMT, CUMPRINC, DB, DDB, DOLLARDE, DOLLARFR, EFFECT, ISPMT, NOMINAL, NPER, RATE, PV, RRI, SLN, SYD, TBILLEQ, TBILLPRICE, TBILLYIELD. #494
  • Added FORMULATEXT function. #422
  • Added 8 information functions ISERR, ISNA, ISREF, NA, SHEET, SHEETS, ISBINARY, ISFORMULA. #481
  • Added 15 date functions: WEEKDAY, DATEVALUE, HOUR, MINUTE, SECOND, TIME, TIMEVALUE, NOW, TODAY, EDATE, WEEKNUM, ISOWEEKNUM, DATEDIF, DAYS360, YEARFRAC. #483
  • Added 13 trigonometry functions: SEC, CSC, SINH, COSH, TANH, COTH, SECH, CSCH, ACOT, ASINH, ACOSH, ATANH, ACOTH. #485
  • Added 6 engineering functions: OCT2BIN, OCT2DEC, OCT2HEX, HEX2BIN, HEX2OCT, HEX2DEC. #497
  • Added a configuration option to evaluate reference to an empty cells as a zero. #476
  • Added new error type: missing licence. #306
  • Added detailed error messages for error values. #506
  • Added ability to handle more characters in quoted sheet names. #509
  • Added support for escaping apostrophe character in quoted sheet names. #64

Changed

  • Operation moveCells creating cyclic dependencies does not cause losing original formula. #479
  • Simplified adding new function modules, reworked (simplified) implementations of existing modules. #480

Fixed

  • Fixed hardcoding of languages in i18n tests. #471
  • Fixed many compilation warnings based on LGTM analysis. #473
  • Fixed moveCells behaviour when moving part of a range. #479
  • Fixed moveColumns/moveRows inconsistent behaviour. #479
  • Fixed undo of moveColumns/moveRows operations. #479
  • Fixed name-collision issue in translations. #486
  • Fixed bug in concatenation + nullValue. #495
  • Fixed bug when undoing irreversible operation. #502
  • Fixed minor issue with CHAR function logic. #510
  • Fixed simpleCellAddressToString behaviour when converting quoted sheet names. #514
  • Fixed issues with numeric aggregation functions. #515

[0.1.3] - 2020-07-21

Fixed

  • Fixed a bug in coercion of empty string to boolean value. #453

[0.1.2] - 2020-07-13

Fixed

  • Fixed a bug in topological ordering module. #442

[0.1.1] - 2020-07-01

Fixed

  • Fixed a typo in a config option from useRegularExpresssions to useRegularExpressions. #437

[0.1.0] - 2020-06-25

Added

  • Core functionality of the engine;
  • Support for data types: String, Error, Number, Date, Time, DateTime, Duration, Distinct Logical;
  • Support for logical operators: =, <>, >, <, >=, <=;
  • Support for arithmetic operators: +, -, *, /, %;
  • Support for text operator: &;
  • CRUD operations:
    • modifying the value of a single cell,
    • adding/deleting row/column,
    • reading the value or formula from the selected cell,
    • moving a cell or a block of cells,
    • deleting a subset of rows or columns,
    • recalculating and refreshing of a worksheet,
    • batching CRUD operations,
    • support for wildcards and regex inside criterion functions like SUMIF, COUNTIF,
    • named expressions support,
    • support for cut, copy, paste,
    • undo/redo support;
  • Following functions: ABS(), ACOS(), AND(), ASIN(), ATAN(), ATAN2(), AVERAGE(), AVERAGEA(), AVERAGEIF(), BASE(), BIN2DEC(), BIN2HEX()BIN2OCT(), BITAND(), BITLSHIFT(), BITOR(), BITRSHIFT(), BITXOR(), CEILING(), CHAR(), CHOOSE(), CODE(), COLUMNS(), CONCATENATE(), CORREL(), COS(), COT(), COUNT(), COUNTA(), COUNTBLANK(), COUNTIF(), COUNTIFS(), COUNTUNIQUE(), DATE(), DAY(), DAYS(), DEC2BIN(), DEC2HEX(), DEC2OCT(), DECIMAL(), DEGREES(), DELTA(), E(), EOMONTH(), ERF(), ERFC(), EVEN(), EXP(), FALSE(), IF(), IFERROR(), IFNA(), INDEX(), INT(), ISBLANK(), ISERROR(), ISEVEN(), ISLOGICAL(), ISNONTEXT(), ISNUMBER(), ISODD(), ISTEXT(), LN(), LOG(), LOG10(), MATCH(), MAX(), MAXA(), MAXPOOL(), MEDIAN(), MEDIANPOOL(), MIN(), MINA(), MMULT(), MOD(), MONTH(), NOT(), ODD(), OFFSET(), OR(), PI(), POWER(), RADIANS() , RAND(), ROUND(), ROUNDDOWN(), ROUNDUP(), ROWS(), SIN(), SPLIT(), SQRT(), SUM(), SUMIF(), SUMIFS(), SUMPRODUCT(), SUMSQ(), SWITCH(), TAN(), TEXT(), TRANSPOSE(), TRUE(), TRUNC(), VLOOKUP(), XOR(), YEAR();
  • Support for volatile functions;
  • Cultures supports - can be configured according to the application need;
  • Custom functions support;
  • Set http://docs.oasis-open.org/office/v1.2/OpenDocument-v1.2-part2.html as a standard to follow;
  • Error handling:
    • Division by zero: #DIV/0!,
    • Unknown function name: #NAME?,
    • Wrong type of argument in a function or wrong type of operator: #VALUE!,
    • Invalid numeric values: #NUM!,
    • No value available: #N/A,
    • Cyclic dependency: #CYCLE!,
    • Wrong address reference: #REF;
  • Built-in function translation support for 16 languages: English, Czech, Danish, Dutch, Finnish, French, German, Hungarian, Italian, Norwegian, Polish, Portuguese, Russian, Spanish, Swedish, Turkish.