hyperformula
Version:
HyperFormula is a JavaScript engine for efficient processing of spreadsheet-like data and formulas
392 lines (391 loc) • 14.8 kB
TypeScript
/**
* @license
* Copyright (c) 2025 Handsoncode. All rights reserved.
*/
import { ChooseAddressMapping } from './DependencyGraph/AddressMapping/ChooseAddressMappingPolicy';
import { DateTime, SimpleDate, SimpleDateTime, SimpleTime } from './DateTimeHelper';
import { Maybe } from './Maybe';
export interface ConfigParams {
/**
* When set to `true`, makes string comparison accent-sensitive.
*
* Applies only to comparison operators.
* @default false
* @category String
*/
accentSensitive: boolean;
/**
* When set to `true`, makes string comparison case-sensitive.
*
* Applies to comparison operators only.
* @default false
* @category String
*/
caseSensitive: boolean;
/**
* When set to `upper`, upper case sorts first.
*
* When set to `lower`, lower case sorts first.
*
* When set to `false`, uses the locale's default.
* @default 'lower'
* @category String
*/
caseFirst: 'upper' | 'lower' | 'false';
/**
* Sets the address mapping policy to be used.
*
* Built-in implementations:
* - `DenseSparseChooseBasedOnThreshold`: sets the address mapping policy separately for each sheet, based on fill ratio.
* - `AlwaysDense`: uses `DenseStrategy` for all sheets.
* - `AlwaysSparse`: uses `SparseStrategy` for all sheets.
* @default AlwaysDense
* @category Engine
*/
chooseAddressMappingPolicy: ChooseAddressMapping;
/**
* A generic parameter that can be used to pass data to custom functions.
* @default undefined
* @category Engine
*/
context: unknown;
/**
* Sets symbols that denote currency numbers.
*
* For more information, see the [Internationalization features guide](/guide/i18n-features.md).
* @default ['$']
* @category Number
*/
currencySymbol: string[];
/**
* Sets the date formats accepted by the date-parsing function.
*
* A format must be specified as a string consisting of tokens and separators.
*
* Supported tokens:
* - `DD` (day of month)
* - `MM` (month as a number)
* - `YYYY` (year as a 4-digit number)
* - `YY` (year as a 2-digit number)
*
* Supported separators:
* - `/` (slash)
* - `-` (dash)
* - `.` (dot)
* - ` ` (empty space)
*
* Regardless of the separator specified in the format string, all of the above are accepted by the date-parsing function.
*
* For more information, see the [Date and time handling guide](/guide/date-and-time-handling.md).
* @default ['DD/MM/YYYY', 'DD/MM/YY']
* @category Date and Time
*/
dateFormats: string[];
/**
* Sets a separator character that separates procedure arguments in formulas.
*
* Must be different from [decimalSeparator](/api/interfaces/configparams.md#decimalseparator) and [thousandSeparator](/api/interfaces/configparams.md#thousandseparator).
*
* For more information, see the [Internationalization features guide](/guide/i18n-features.md).
* @default ','
* @category Formula Syntax
*/
functionArgSeparator: string;
/**
* Sets a decimal separator used for parsing numerical literals.
*
* Can be one of the following:
* - `.` (period)
* - `,` (comma)
*
* Must be different from [thousandSeparator](/api/interfaces/configparams.md#thousandseparator) and [functionArgSeparator](/api/interfaces/configparams.md#functionargseparator).
*
* For more information, see the [Internationalization features guide](/guide/i18n-features.md).
* @default '.'
* @category Number
*/
decimalSeparator: '.' | ',';
/**
* When set to `true`, formulas evaluating to `null` evaluate to `0` instead.
* @default false
* @category Engine
*/
evaluateNullToZero: boolean;
/**
* Lists additional function plugins to be used by the formula interpreter.
* @default []
* @category Formula Syntax
*/
functionPlugins: any[];
/**
* When set to `true`, string comparison ignores punctuation.
* @default false
* @category String
*/
ignorePunctuation: boolean;
/**
* Sets a translation package for function and error names.
*
* For more information, see the [Localizing functions guide](/guide/localizing-functions.md).
* @default 'enGB'
* @category Formula Syntax
*/
language: string;
/**
* Controls the set of whitespace characters that are allowed inside a formula.
*
* When set to `'standard'`, allows only SPACE (U+0020), CHARACTER TABULATION (U+0009), LINE FEED (U+000A), and CARRIAGE RETURN (U+000D) (compliant with OpenFormula Standard 1.3)
*
* When set to `'any'`, allows all whitespace characters that would be captured by the `\s` character class of the JavaScript regular expressions.
* @default 'standard'
* @category Formula Syntax
*/
ignoreWhiteSpace: 'standard' | 'any';
/**
* Sets year 1900 as a leap year.
*
* For compatibility with Lotus 1-2-3 and Microsoft Excel, set this option to `true`.
*
* For more information, see [nullDate](/api/interfaces/configparams.md#nulldate).
* @default false
* @category Date and Time
*/
leapYear1900: boolean;
/**
* Sets your HyperFormula license key.
*
* To use HyperFormula on the GPLv3 license terms, set this option to `gpl-v3`.
*
* To use HyperFormula with your proprietary license, set this option to your valid license key string.
*
* For more information, go [here](/guide/license-key.md).
* @default undefined
* @category License
*/
licenseKey: string;
/**
* Sets the locale for language-sensitive string comparison.
*
* Accepts **IETF BCP 47** language tags.
*
* For more information, see the [Internationalization features guide](/guide/i18n-features.md).
* @default 'en'
* @category String
*/
localeLang: string;
/**
* When set to `true`, function criteria require whole cells to match the pattern.
*
* When set to `false`, function criteria require just a sub-word to match the pattern.
* @default true
* @category String
*/
matchWholeCell: boolean;
/**
* Sets a column separator symbol for array notation.
* @default ','
* @category Formula Syntax
*/
arrayColumnSeparator: ',' | ';';
/**
* Sets a row separator symbol for array notation.
* @default ';'
* @category Formula Syntax
*/
arrayRowSeparator: ';' | '|';
/**
* Sets the maximum number of rows.
* @default 40.000
* @category Engine
*/
maxRows: number;
/**
* Sets the maximum number of columns.
* @default 18.278 (Columns A, B, ..., ZZZ)
* @category Engine
*/
maxColumns: number;
/**
* Internally, each date is represented as a number of days that passed since `nullDate`.
*
* This option sets a specific date from which that number of days is counted.
*
* For more information, see the [Date and time handling guide](/guide/date-and-time-handling.md).
* @default {year: 1899, month: 12, day: 30}
* @category Date and Time
*/
nullDate: SimpleDate;
/**
* Sets the interpretation of two-digit year values.
*
* Two-digit year values (`xx`) can either become `19xx` or `20xx`.
*
* If `xx` is less or equal to `nullYear`, two-digit year values become `20xx`.
*
* If `xx` is more than `nullYear`, two-digit year values become `19xx`.
* @default 30
* @category Date and Time
*/
nullYear: number;
/**
* Sets a function that parses strings representing date-time into actual date-time values.
*
* The function should return a [DateTime](../globals.md#datetime) object or undefined.
*
* For more information, see the [Date and time handling guide](/guide/date-and-time-handling.md).
* @default defaultParseToDateTime
* @category Date and Time
*/
parseDateTime: (dateTimeString: string, dateFormat?: string, timeFormat?: string) => Maybe<DateTime>;
/**
* Sets how far two numerical values need to be from each other to be treated as non-equal.
*
* `a` and `b` are equal if all three of the following conditions are met:
* - Both `a` and `b` are of the same sign
* - `abs(a)` <= `(1+precisionEpsilon) * abs(b)`
* - `abs(b)` <= `(1+precisionEpsilon) * abs(a)`
*
* Additionally, this option controls the snap-to-zero behavior for additions and subtractions:
* - For `c=a+b`, if `abs(c)` <= `precisionEpsilon * abs(a)`, then `c` is set to `0`
* - For `c=a-b`, if `abs(c)` <= `precisionEpsilon * abs(a)`, then `c` is set to `0`
* @default 1e-13
* @category Number
*/
precisionEpsilon: number;
/**
* Sets the precision level of calculations' output.
*
* Internally, all arithmetic operations are performed using JavaScript's built-in numbers.
* But when HyperFormula exports a cell's value, it rounds the output
* to the `precisionRounding` number of significant digits.
*
* Setting `precisionRounding` too low can cause large numbers' imprecision
* (for example, with `precisionRounding` set to `4`, 100005 becomes 100010).
*
* Setting precisionRounding too high will expose the floating-point calculation errors. For example, with `precisionRounding` set to `15`, `0.1 + 0.2` results in `0.3000000000000001`.
* @default 10
* @category Number
*/
precisionRounding: number;
/**
* Sets a function that converts date-time values into strings.
*
* The function should return a string or undefined.
*
* For more information, see the [Date and time handling guide](/guide/date-and-time-handling.md).
* @default defaultStringifyDateTime
* @category Date and Time
*/
stringifyDateTime: (dateTime: SimpleDateTime, dateTimeFormat: string) => Maybe<string>;
/**
* Sets a function that converts time duration values into strings.
*
* The function should return a string or undefined.
*
* For more information, see the [Date and time handling guide](/guide/date-and-time-handling.md).
* @default defaultStringifyDuration
* @category Date and Time
*/
stringifyDuration: (time: SimpleTime, timeFormat: string) => Maybe<string>;
/**
* When set to `false`, no rounding happens, and numbers are equal if and only if they are of truly identical value.
*
* For more information, see [precisionEpsilon](/api/interfaces/configparams.md#precisionepsilon).
* @default true
* @category Number
*/
smartRounding: boolean;
/**
* Sets the thousands' separator symbol for parsing numerical literals.
*
* Can be one of the following:
* - empty
* - `,` (comma)
* - ` ` (empty space)
*
* Must be different from [decimalSeparator](/api/interfaces/configparams.md#decimalseparator) and [functionArgSeparator](/api/interfaces/configparams.md#functionargseparator).
*
* For more information, see the [Internationalization features guide](/guide/i18n-features.md).
* @default ''
* @category Number
*/
thousandSeparator: '' | ',' | ' ' | '.';
/**
* Sets the time formats accepted by the time-parsing function.
*
* A format must be specified as a string consisting of at least two tokens separated by `:` (a colon).
*
* Supported tokens:
* - `hh` (hours)
* - `mm` (minutes)
* - `ss`, `ss.s`, `ss.ss`, `ss.sss`, `ss.ssss`, etc. (seconds)
*
* The number of decimal places in the seconds token does not matter. All versions of the seconds token are equivalent in the context of parsing time values.
* Regardless of the time format specified, the hours-minutes-seconds value may be followed by the AM/PM designator.
*
* For more information, see the [Date and time handling guide](/guide/date-and-time-handling.md).
* @example
* E.g., for `timeFormats = ['hh:mm:ss.sss']`, valid time strings include:
* - `1:33:33`
* - `1:33:33.3`
* - `1:33:33.33`
* - `1:33:33.333`
* - `01:33:33`
* - `1:33:33 AM`
* - `1:33:33 PM`
* - `1:33:33 am`
* - `1:33:33 pm`
* - `1:33:33AM`
* - `1:33:33PM`
* @default ['hh:mm', 'hh:mm:ss.sss']
* @category Date and Time
*/
timeFormats: string[];
/**
* When set to `true`, array arithmetic is enabled globally.
*
* When set to `false`, array arithmetic is enabled only inside array functions (`ARRAYFORMULA`, `FILTER`, and `ARRAY_CONSTRAIN`).
*
* For more information, see the [Arrays guide](/guide/arrays.md).
* @default false
* @category Engine
*/
useArrayArithmetic: boolean;
/**
* When set to `true`, switches column search strategy from binary search to column index.
*
* Using column index improves efficiency of the `VLOOKUP` and `MATCH` functions, but increases memory usage.
*
* When searching with wildcards or regular expressions, column search strategy falls back to binary search (even with `useColumnIndex` set to `true`).
* @default false
* @category Engine
*/
useColumnIndex: boolean;
/**
* When set to `true`, enables gathering engine statistics and timings.
*
* Useful for testing and benchmarking.
* @default false
* @category Engine
*/
useStats: boolean;
/**
* Sets the number of elements kept in the undo history.
* @default 20
* @category Undo and Redo
*/
undoLimit: number;
/**
* When set to `true`, criteria in functions (SUMIF, COUNTIF, ...) are allowed to use regular expressions.
* @default false
* @category String
*/
useRegularExpressions: boolean;
/**
* When set to `true`, criteria in functions (SUMIF, COUNTIF, ...) can use the `*` and `?` wildcards.
* @default true
* @category String
*/
useWildcards: boolean;
}
export declare type ConfigParamsList = keyof ConfigParams;