# API Reference Overview 

## Type aliases

### CellDependency 

Ƭ **CellDependency**: *[SimpleCellAddress](interfaces/simplecelladdress.md) | [AbsoluteCellRange](classes/absolutecellrange.md) | NamedExpressionDependency*

*Defined in [src/CellDependency.ts:10](https://github.com/handsontable/hyperformula/blob/9c22416/src/CellDependency.ts#L10)*

___

### CellValue 

Ƭ **CellValue**: *[NoErrorCellValue](globals.md#noerrorcellvalue) | [DetailedCellError](classes/detailedcellerror.md)*

*Defined in [src/CellValue.ts:9](https://github.com/handsontable/hyperformula/blob/9c22416/src/CellValue.ts#L9)*

___

### CellValueDetailedType 

Ƭ **CellValueDetailedType**: *[CellValueNoNumber](enums/cellvaluenonumber.md) | NumberType*

*Defined in [src/Cell.ts:94](https://github.com/handsontable/hyperformula/blob/9c22416/src/Cell.ts#L94)*

___

### CellValueType 

Ƭ **CellValueType**: *[CellValueNoNumber](enums/cellvaluenonumber.md) | [CellValueJustNumber](enums/cellvaluejustnumber.md)*

*Defined in [src/Cell.ts:91](https://github.com/handsontable/hyperformula/blob/9c22416/src/Cell.ts#L91)*

___

### ChangeList 

Ƭ **ChangeList**: *[CellValueChange](interfaces/cellvaluechange.md)[]*

*Defined in [src/ContentChanges.ts:20](https://github.com/handsontable/hyperformula/blob/9c22416/src/ContentChanges.ts#L20)*

___

### ClipboardCell 

Ƭ **ClipboardCell**: *[ClipboardCellValue](interfaces/clipboardcellvalue.md) | [ClipboardCellFormula](interfaces/clipboardcellformula.md) | [ClipboardCellEmpty](interfaces/clipboardcellempty.md) | [ClipboardCellParsingError](interfaces/clipboardcellparsingerror.md)*

*Defined in [src/ClipboardOperations.ts:16](https://github.com/handsontable/hyperformula/blob/9c22416/src/ClipboardOperations.ts#L16)*

___

### ColumnMap 

Ƭ **ColumnMap**: *Map‹RawInterpreterValue, [ValueIndex](interfaces/valueindex.md)›*

*Defined in [src/Lookup/ColumnIndex.ts:30](https://github.com/handsontable/hyperformula/blob/9c22416/src/Lookup/ColumnIndex.ts#L30)*

___

### ColumnRowIndex 

Ƭ **ColumnRowIndex**: *[number, number]*

*Defined in [src/CrudOperations.ts:65](https://github.com/handsontable/hyperformula/blob/9c22416/src/CrudOperations.ts#L65)*

___

### ConfigParamsList 

Ƭ **ConfigParamsList**: *keyof ConfigParams*

*Defined in [src/ConfigParams.ts:450](https://github.com/handsontable/hyperformula/blob/9c22416/src/ConfigParams.ts#L450)*

___

### ConsoleMessages 

Ƭ **ConsoleMessages**: *object*

*Defined in [src/helpers/licenseKeyValidator.ts:24](https://github.com/handsontable/hyperformula/blob/9c22416/src/helpers/licenseKeyValidator.ts#L24)*

#### Type declaration:

___

### DateTime 

Ƭ **DateTime**: *[SimpleTime](interfaces/simpletime.md) | [SimpleDate](interfaces/simpledate.md) | [SimpleDateTime](globals.md#simpledatetime)*

*Defined in [src/DateTimeHelper.ts:31](https://github.com/handsontable/hyperformula/blob/9c22416/src/DateTimeHelper.ts#L31)*

___

### Dependencies 

Ƭ **Dependencies**: *Map‹Vertex, [CellDependency](globals.md#celldependency)[]›*

*Defined in [src/GraphBuilder.ts:25](https://github.com/handsontable/hyperformula/blob/9c22416/src/GraphBuilder.ts#L25)*

___

### EngineState 

Ƭ **EngineState**: *object*

*Defined in [src/BuildEngineFactory.ts:35](https://github.com/handsontable/hyperformula/blob/9c22416/src/BuildEngineFactory.ts#L35)*

#### Type declaration:

* **cellContentParser**: *[CellContentParser](classes/cellcontentparser.md)*

* **columnSearch**: *[ColumnSearchStrategy](interfaces/columnsearchstrategy.md)*

* **config**: *[Config](classes/config.md)*

* **crudOperations**: *[CrudOperations](classes/crudoperations.md)*

* **dependencyGraph**: *DependencyGraph*

* **evaluator**: *[Evaluator](classes/evaluator.md)*

* **exporter**: *[Exporter](classes/exporter.md)*

* **functionRegistry**: *FunctionRegistry*

* **lazilyTransformingAstService**: *[LazilyTransformingAstService](classes/lazilytransformingastservice.md)*

* **namedExpressions**: *[NamedExpressions](classes/namedexpressions.md)*

* **parser**: *ParserWithCaching*

* **serialization**: *[Serialization](classes/serialization.md)*

* **stats**: *[Statistics](classes/statistics.md)*

* **unparser**: *Unparser*

___

### ExportedChange 

Ƭ **ExportedChange**: *[ExportedCellChange](classes/exportedcellchange.md) | [ExportedNamedExpressionChange](classes/exportednamedexpressionchange.md)*

*Defined in [src/Exporter.ts:18](https://github.com/handsontable/hyperformula/blob/9c22416/src/Exporter.ts#L18)*

___

### LicenseKeyInvalidState 

Ƭ **LicenseKeyInvalidState**: *Exclude‹[LicenseKeyValidityState](enums/licensekeyvaliditystate.md), [VALID](enums/licensekeyvaliditystate.md#valid)›*

*Defined in [src/helpers/licenseKeyValidator.ts:18](https://github.com/handsontable/hyperformula/blob/9c22416/src/helpers/licenseKeyValidator.ts#L18)*

___

### Maybe 

Ƭ **Maybe**: *T | undefined*

*Defined in [src/Maybe.ts:6](https://github.com/handsontable/hyperformula/blob/9c22416/src/Maybe.ts#L6)*

**`license`** 
Copyright (c) 2025 Handsoncode. All rights reserved.

___

### MessageDescriptor 

Ƭ **MessageDescriptor**: *object*

*Defined in [src/helpers/licenseKeyValidator.ts:28](https://github.com/handsontable/hyperformula/blob/9c22416/src/helpers/licenseKeyValidator.ts#L28)*

#### Type declaration:

* **expiryDate**? : *Date*

* **template**: *[LicenseKeyValidityState](enums/licensekeyvaliditystate.md)*

___

### NamedExpressionOptions 

Ƭ **NamedExpressionOptions**: *Record‹string, string | number | boolean›*

*Defined in [src/NamedExpressions.ts:22](https://github.com/handsontable/hyperformula/blob/9c22416/src/NamedExpressions.ts#L22)*

___

### NoErrorCellValue 

Ƭ **NoErrorCellValue**: *number | string | boolean | null*

*Defined in [src/CellValue.ts:8](https://github.com/handsontable/hyperformula/blob/9c22416/src/CellValue.ts#L8)*

___

### RawCellContent 

Ƭ **RawCellContent**: *Date | string | number | boolean | null | undefined*

*Defined in [src/CellContentParser.ts:25](https://github.com/handsontable/hyperformula/blob/9c22416/src/CellContentParser.ts#L25)*

___

### Sheet 

Ƭ **Sheet**: *[RawCellContent](globals.md#rawcellcontent)[][]*

*Defined in [src/Sheet.ts:12](https://github.com/handsontable/hyperformula/blob/9c22416/src/Sheet.ts#L12)*

Two-dimenstional array representation of sheet

___

### SheetDimensions 

Ƭ **SheetDimensions**: *object*

*Defined in [src/Sheet.ts:19](https://github.com/handsontable/hyperformula/blob/9c22416/src/Sheet.ts#L19)*

Represents size of a sheet

#### Type declaration:

* **height**: *number*

* **width**: *number*

___

### SheetIndex 

Ƭ **SheetIndex**: *[ColumnMap](globals.md#columnmap)[]*

*Defined in [src/Lookup/ColumnIndex.ts:37](https://github.com/handsontable/hyperformula/blob/9c22416/src/Lookup/ColumnIndex.ts#L37)*

___

### Sheets 

Ƭ **Sheets**: *Record‹string, [Sheet](globals.md#sheet)›*

*Defined in [src/Sheet.ts:14](https://github.com/handsontable/hyperformula/blob/9c22416/src/Sheet.ts#L14)*

___

### SimpleDateTime 

Ƭ **SimpleDateTime**: *[SimpleDate](interfaces/simpledate.md) & [SimpleTime](interfaces/simpletime.md)*

*Defined in [src/DateTimeHelper.ts:29](https://github.com/handsontable/hyperformula/blob/9c22416/src/DateTimeHelper.ts#L29)*

___

### Span 

Ƭ **Span**: *[RowsSpan](classes/rowsspan.md) | [ColumnsSpan](classes/columnsspan.md)*

*Defined in [src/Span.ts:6](https://github.com/handsontable/hyperformula/blob/9c22416/src/Span.ts#L6)*

**`license`** 
Copyright (c) 2025 Handsoncode. All rights reserved.

___

### TranslatableErrorType 

Ƭ **TranslatableErrorType**: *Exclude‹[ErrorType](classes/hyperformulans.md#static-errortype), [LIC](enums/errortype.md#lic)›*

*Defined in [src/Cell.ts:51](https://github.com/handsontable/hyperformula/blob/9c22416/src/Cell.ts#L51)*

## Variables

### ALL_FEATURE_TOKENS

• **ALL_FEATURE_TOKENS**: *string[]* = [
  CRUD_FEATURE_TOKEN, UNDO_REDO_FEATURE_TOKEN, CLIPBOARD_FEATURE_TOKEN,
  NAMED_EXPRESSIONS_FEATURE_TOKEN, BATCHING_FEATURE_TOKEN,
]

*Defined in [src/license/capabilities.ts:34](https://github.com/handsontable/hyperformula/blob/9c22416/src/license/capabilities.ts#L34)*

Every feature token, in one list, for the shipped-shape adapter: the shipped key vocabulary
predates feature tokens entirely, so a commercial tier is translated into its functions token
PLUS all of these — see `licenseTermsOf` for the reasoning.

___

### BASE64_ALPHABET

• **BASE64_ALPHABET**: *"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"* = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"

*Defined in [src/license/vendor/utils.ts:17](https://github.com/handsontable/hyperformula/blob/9c22416/src/license/vendor/utils.ts#L17)*

The base64 alphabet.

___

### BATCHING_FEATURE_TOKEN

• **BATCHING_FEATURE_TOKEN**: *"feat:batching"* = "feat:batching"

*Defined in [src/license/capabilities.ts:27](https://github.com/handsontable/hyperformula/blob/9c22416/src/license/capabilities.ts#L27)*

Grants [FeatureId.Batching](enums/featureid.md#batching).

___

### CALCULATED_FIELDS_FUNCTIONS

• **CALCULATED_FIELDS_FUNCTIONS**: *string[]* = [
  'AND', 'AVERAGE', 'CONCATENATE', 'COUNT', 'DATE', 'DATEDIF', 'DAY', 'DAYS', 'FALSE', 'FIND', 'HOUR',
  'LEFT', 'LEN', 'LOWER', 'MAX', 'MID', 'MIN', 'MINUTE', 'MONTH', 'NOT', 'NOW', 'OR', 'RIGHT', 'SEARCH',
  'SECOND', 'TEXT', 'TEXTJOIN', 'TODAY', 'TRIM', 'TRUE', 'UPPER', 'VALUE', 'XOR', 'YEAR',
]

*Defined in [src/license/capabilities.ts:102](https://github.com/handsontable/hyperformula/blob/9c22416/src/license/capabilities.ts#L102)*

Added by the calculated-fields package, on top of [MATH_ENGINE_FUNCTIONS](globals.md#const-math_engine_functions).

___

### CAPABILITY_TABLE

• **CAPABILITY_TABLE**: *ReadonlyMap‹string, [CapabilityGrant](interfaces/capabilitygrant.md)›* = new Map([
  [CORE_TOKEN, coreGrant],
  [FUNCTIONS_1_TOKEN, functions1Grant],
  [FUNCTIONS_2_TOKEN, functions2Grant],
  [FUNCTIONS_3_TOKEN, functions3Grant],
  [FUNCTIONS_4_TOKEN, functions4Grant],
  [CRUD_FEATURE_TOKEN, {functions: [], features: [FeatureId.Crud]}],
  [UNDO_REDO_FEATURE_TOKEN, {functions: [], features: [FeatureId.UndoRedo]}],
  [CLIPBOARD_FEATURE_TOKEN, {functions: [], features: [FeatureId.Clipboard]}],
  [NAMED_EXPRESSIONS_FEATURE_TOKEN, {functions: [], features: [FeatureId.NamedExpressions]}],
  [BATCHING_FEATURE_TOKEN, {functions: [], features: [FeatureId.Batching]}],
  [SPREADSHEET_ADDON_TOKEN, {functions: [], features: []}],
  [IMPORT_EXPORT_ADDON_TOKEN, {functions: [], features: []}],
])

*Defined in [src/license/capabilities.ts:200](https://github.com/handsontable/hyperformula/blob/9c22416/src/license/capabilities.ts#L200)*

The production capability table.

The grants are stored FULLY EXPANDED rather than chained through `implies`: the packaging
design states the enforcement layer must not assume a hierarchy between tokens, and that the
commercial nesting is expressed by a bigger licence simply listing more functions. The
cumulative spreads above keep the source DRY without putting that hierarchy into the runtime.

Every grant is STATIC. Nothing here is derived from the function registry at run time, so a
function registered by a user through `HyperFormula.registerFunctionPlugin` can never appear in
a package and can never be gated — see [EXCEL_SIMULATOR_FUNCTIONS](globals.md#const-excel_simulator_functions). The cost is that a
newly implemented built-in is ungated until it is added here, which the completeness invariant
in `unit/license/capability-registry.spec.ts` fails on.

The five `feat:*` tokens carry the gated API areas, one feature each, spelled after the draft
vocabulary in the task. A rev-5 key states them explicitly; the shipped-shape adapter grants
all five alongside the tier (that vocabulary predates feature tokens); legacy keys resolve to
the unrestricted entitlement and never consult this table.

The two add-on tokens are RESERVED: recognized, so an issued key carrying one is not reported
as unrecognized, but granting nothing. `spreadsheet` has no agreed content yet — the packaging
proposal names a *package* "Spreadsheet" and the pricing task names a "Spreadsheet Bundle"
add-on, and it is not settled whether those are the same set; guessing would silently sell an
empty add-on or duplicate a whole tier. `import_export` has nothing to grant until HF-107.

___

### CLIPBOARD_FEATURE_TOKEN

• **CLIPBOARD_FEATURE_TOKEN**: *"feat:clipboard"* = "feat:clipboard"

*Defined in [src/license/capabilities.ts:23](https://github.com/handsontable/hyperformula/blob/9c22416/src/license/capabilities.ts#L23)*

Grants [FeatureId.Clipboard](enums/featureid.md#clipboard).

___

### CORE_TOKEN

• **CORE_TOKEN**: *"core"* = "core"

*Defined in [src/license/capabilities.ts:16](https://github.com/handsontable/hyperformula/blob/9c22416/src/license/capabilities.ts#L16)*

The always-granted token. Every entitlement built from a license key includes it.

It grants the calculation operators — and nothing else. In particular it grants NO features:
per Kuba's decision (task comment, 12.08) feature gating is real, and the gated API areas come
from the `feat:*` tokens below. The always-on functionality the packaging design assigns to
core (reads, serialization, teardown) is not behind `ensureCapability` at all.

___

### CRUD_FEATURE_TOKEN

• **CRUD_FEATURE_TOKEN**: *"feat:crud"* = "feat:crud"

*Defined in [src/license/capabilities.ts:19](https://github.com/handsontable/hyperformula/blob/9c22416/src/license/capabilities.ts#L19)*

Grants [FeatureId.Crud](enums/featureid.md#crud) — the mutating CRUD surface of the public API.

___

### DATE_SEPARATOR_REGEXP

• **DATE_SEPARATOR_REGEXP**: *RegExp‹›* = new RegExp('[ /.-]')

*Defined in [src/DateTimeDefault.ts:13](https://github.com/handsontable/hyperformula/blob/9c22416/src/DateTimeDefault.ts#L13)*

___

### DEFAULT_TYPED_KEY_SCHEMA

• **DEFAULT_TYPED_KEY_SCHEMA**: *[TypedKeySchema](interfaces/typedkeyschema.md)* = deepFreeze<TypedKeySchema>({
  // Every key type defines its tag, its legal wording (the "{PRODUCT}" placeholder is replaced
  // with the licensed product display name), the beginning of the expiration clause, and two
  // flags: "expires" (does the key carry an expiration date) and "hasHardStop" (does it stop
  // working "grace" days after the expiration - such keys require the grace period in the
  // payload).
  keyTypes: {
    trial: {
      tag: '[TRIAL]',
      legalClauses: [
        'is_granted_for_evaluation_only',
        'Use_in_production_is_not_permitted',
        'Please_report_misuse_to_legal@handsontable.com',
        'For_purchasing_contact_sales@handsontable.com',
      ],
      expiryWording: 'This_key_will_deactivate_on',
      expires: true,
      hasHardStop: true,
    },
    freemium: {
      tag: '[FREE]',
      legalClauses: [
        'is_granted_under_the_Free_plan',
        'Use_is_subject_to_the_{PRODUCT}_Free_License_Terms',
        'Features_beyond_the_Free_plan_require_a_commercial_license',
        'To_upgrade_contact_sales@handsontable.com',
      ],
      expiryWording: 'This_key_does_not_expire',
      expires: false,
      hasHardStop: false,
    },
    subscription: {
      tag: '[SUB]',
      legalClauses: [
        'is_granted_under_a_subscription_license',
        'Use_after_expiry_is_not_permitted_per_the_subscription_agreement',
        'To_renew_contact_sales@handsontable.com',
      ],
      expiryWording: 'This_key_will_deactivate_on',
      expires: true,
      hasHardStop: true,
    },
    perpetual: {
      tag: '[PERP]',
      legalClauses: [
        'is_granted_under_a_perpetual_license',
        'Access_to_new_versions_ends_when_maintenance_expires',
        'Versions_released_before_that_date_may_be_used_indefinitely',
        'To_renew_maintenance_contact_sales@handsontable.com',
      ],
      expiryWording: 'Maintenance_ends_on',
      expires: true,
      hasHardStop: false,
    },
  },
  // The products, in priority order: the FIRST product of this list found in the payload is the
  // "licensed product" - it carries the expiration date and the grace period, and its display
  // name is spelled in the key header.
  //
  // Every product defines its scope wordings (tier, or "tier:mode" when the product supports
  // deployment modes) and optionally its add-on wordings.
  products: [
    {
      name: 'handsontable',
      displayName: 'Handsontable',
      modes: ['internal', 'saas'],
      defaultMode: 'internal',
      scopeWordings: {
        freemium: 'Free',
        'enterprise:internal': 'Enterprise',
        'enterprise:saas': 'Enterprise_SaaS',
      },
    },
    {
      name: 'hyperformula',
      displayName: 'HyperFormula',
      scopeWordings: {
        freemium: 'HyperFormula_Free',
        crm: 'HyperFormula_CRM',
        data_grid: 'HyperFormula_Data_Grid',
        excel_simulator: 'HyperFormula_Excel_Simulator',
      },
      addonWordings: {
        spreadsheet: 'Spreadsheet_addon',
        import_export: 'Import_Export_addon',
      },
    },
  ],
})

*Defined in [src/license/vendor/defaultSchema.ts:72](https://github.com/handsontable/hyperformula/blob/9c22416/src/license/vendor/defaultSchema.ts#L72)*

The default typed-key schema: the marketing-owned vocabulary of the license keys. The schema
describes WHAT can be licensed (products, tiers, modes, add-ons) and HOW it is worded in the
human-readable part of the key (legal clauses, scope wordings, expiry wordings).

The engine (generate/validate/extract) only defines the key FORMAT — the type tag, the
prose/payload structure, the checksum, the version stamping, and the strict validation rules.

Compatibility rules that matter to a reader such as HyperFormula:
- key type names and tags are append-only — renaming or removing one makes already-issued keys
  of that type unreadable;
- product names are append-only for the same reason (the expiration time is derived from the
  first schema product found in the payload);
- wordings and legal clauses may change freely — they only affect newly generated keys,
  already-issued keys stay valid (the checksum covers whatever prose they were born with).

It is deeply frozen so it cannot be mutated in place.

___

### EXCEL_SIMULATOR_FUNCTIONS

• **EXCEL_SIMULATOR_FUNCTIONS**: *string[]* = [
  'ACOS', 'ACOSH', 'ACOT', 'ACOTH', 'ARABIC', 'ARRAYFORMULA', 'ARRAY_CONSTRAIN', 'ASIN', 'ASINH', 'ATAN',
  'ATAN2', 'ATANH', 'AVEDEV', 'AVERAGEA', 'BASE', 'BESSELI', 'BESSELJ', 'BESSELK', 'BESSELY', 'BETA.DIST',
  'BETA.INV', 'BIN2DEC', 'BIN2HEX', 'BIN2OCT', 'BINOM.DIST', 'BINOM.INV', 'BITAND', 'BITLSHIFT', 'BITOR',
  'BITRSHIFT', 'BITXOR', 'CEILING.MATH', 'CEILING.PRECISE', 'CHAR', 'CHISQ.DIST', 'CHISQ.DIST.RT',
  'CHISQ.INV', 'CHISQ.INV.RT', 'CHISQ.TEST', 'CLEAN', 'CODE', 'COMBIN', 'COMBINA', 'COMPLEX',
  'CONFIDENCE.NORM', 'CONFIDENCE.T', 'CORREL', 'COS', 'COSH', 'COT', 'COTH', 'COUNTA', 'COUNTBLANK',
  'COUNTUNIQUE', 'COVARIANCE.P', 'COVARIANCE.S', 'CSC', 'CSCH', 'CUMIPMT', 'CUMPRINC', 'DAVERAGE', 'DB',
  'DCOUNT', 'DCOUNTA', 'DDB', 'DEC2BIN', 'DEC2HEX', 'DEC2OCT', 'DECIMAL', 'DEGREES', 'DELTA', 'DEVSQ',
  'DGET', 'DMAX', 'DMIN', 'DOLLARDE', 'DOLLARFR', 'DPRODUCT', 'DSTDEV', 'DSTDEVP', 'DSUM', 'DVAR', 'DVARP',
  'EFFECT', 'ERF', 'ERFC', 'EVEN', 'EXACT', 'EXPON.DIST', 'F.DIST', 'F.DIST.RT', 'F.INV', 'F.INV.RT',
  'F.TEST', 'FACT', 'FACTDOUBLE', 'FISHER', 'FISHERINV', 'FLOOR.MATH', 'FLOOR.PRECISE', 'FVSCHEDULE',
  'GAMMA', 'GAMMA.DIST', 'GAMMA.INV', 'GAMMALN', 'GAUSS', 'GCD', 'GEOMEAN', 'HARMEAN', 'HEX2BIN',
  'HEX2DEC', 'HEX2OCT', 'HSTACK', 'HYPGEOM.DIST', 'IFS', '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', 'INT',
  'ISPMT', 'LARGE', 'LCM', 'LOGNORM.DIST', 'LOGNORM.INV', 'MAXA', 'MAXPOOL', 'MEDIAN', 'MEDIANPOOL',
  'MINA', 'MIRR', 'MMULT', 'MROUND', 'MULTINOMIAL', 'N', 'NEGBINOM.DIST', 'NOMINAL', 'NORM.DIST',
  'NORM.INV', 'NORM.S.DIST', 'NORM.S.INV', 'OCT2BIN', 'OCT2DEC', 'OCT2HEX', 'ODD', 'PDURATION', 'PHI',
  'PI', 'POISSON.DIST', 'PROPER', 'QUARTILE.EXC', 'QUARTILE.INC', 'QUOTIENT', 'RADIANS', 'REPLACE', 'REPT',
  'ROMAN', 'RRI', 'RSQ', 'SEC', 'SECH', 'SEQUENCE', 'SERIESSUM', 'SHEET', 'SHEETS', 'SIGN', 'SIN', 'SINH',
  'SKEW', 'SKEW.P', 'SLN', 'SLOPE', 'SMALL', 'SPLIT', 'SQRTPI', 'STANDARDIZE', 'STEYX', 'SUBSTITUTE',
  'SUBTOTAL', 'SUMPRODUCT', 'SUMSQ', 'SUMX2MY2', 'SUMX2PY2', 'SUMXMY2', 'SWITCH', 'SYD', 'T', 'T.DIST',
  'T.DIST.2T', 'T.DIST.RT', 'T.INV', 'T.INV.2T', 'T.TEST', 'TAN', 'TANH', 'TBILLEQ', 'TBILLPRICE',
  'TBILLYIELD', 'TDIST', 'TRANSPOSE', 'UNICHAR', 'UNICODE', 'VSTACK', 'WEIBULL.DIST', 'XIRR', 'XNPV',
  'Z.TEST',
]

*Defined in [src/license/capabilities.ts:131](https://github.com/handsontable/hyperformula/blob/9c22416/src/license/capabilities.ts#L131)*

Added by the excel-simulator package, on top of [SPREADSHEET_FUNCTIONS](globals.md#const-spreadsheet_functions) — the rest of the
implemented catalog.

Enumerated rather than taken from the function registry at run time, even though "all
functions" would be the shorter way to say it. Reading the registry would sweep in functions
registered through `HyperFormula.registerFunctionPlugin`, putting a user's OWN custom function
into a paid package and returning `#LIC!` for it on a smaller licence — the opposite of HF-307
decision D1, which drops custom-function gating entirely. A function this table does not list
is not gated at all, which is exactly the treatment a custom function should get.

___

### FUNCTIONS_1_TOKEN

• **FUNCTIONS_1_TOKEN**: *"functions_1"* = "functions_1"

*Defined in [src/license/capabilities.ts:40](https://github.com/handsontable/hyperformula/blob/9c22416/src/license/capabilities.ts#L40)*

Math engine package — the free tier's function set.

___

### FUNCTIONS_2_TOKEN

• **FUNCTIONS_2_TOKEN**: *"functions_2"* = "functions_2"

*Defined in [src/license/capabilities.ts:42](https://github.com/handsontable/hyperformula/blob/9c22416/src/license/capabilities.ts#L42)*

Calculated fields package. Cumulative: includes [FUNCTIONS_1_TOKEN](globals.md#const-functions_1_token)'s functions.

___

### FUNCTIONS_3_TOKEN

• **FUNCTIONS_3_TOKEN**: *"functions_3"* = "functions_3"

*Defined in [src/license/capabilities.ts:44](https://github.com/handsontable/hyperformula/blob/9c22416/src/license/capabilities.ts#L44)*

Spreadsheet package. Cumulative: includes [FUNCTIONS_2_TOKEN](globals.md#const-functions_2_token)'s functions.

___

### FUNCTIONS_4_TOKEN

• **FUNCTIONS_4_TOKEN**: *"functions_4"* = "functions_4"

*Defined in [src/license/capabilities.ts:46](https://github.com/handsontable/hyperformula/blob/9c22416/src/license/capabilities.ts#L46)*

Excel simulator package — the entire implemented catalog.

___

### HOURS_PER_DAY

• **HOURS_PER_DAY**: *24* = 24

*Defined in [src/DateTimeHelper.ts:15](https://github.com/handsontable/hyperformula/blob/9c22416/src/DateTimeHelper.ts#L15)*

___

### HYPERFORMULA_PRODUCT_NAME

• **HYPERFORMULA_PRODUCT_NAME**: *"hyperformula"* = "hyperformula"

*Defined in [src/license/vendor/defaultSchema.ts:168](https://github.com/handsontable/hyperformula/blob/9c22416/src/license/vendor/defaultSchema.ts#L168)*

The name of HyperFormula's own product entry in the typed-key payload. Note this is NOT
necessarily the *licensed* product of a key: a key that grants both Handsontable and
HyperFormula carries its expiration date on the Handsontable entry, because that product comes
first in [DEFAULT_TYPED_KEY_SCHEMA](globals.md#const-default_typed_key_schema)'s priority order.

___

### IMPORT_EXPORT_ADDON_TOKEN

• **IMPORT_EXPORT_ADDON_TOKEN**: *"import_export"* = "import_export"

*Defined in [src/license/capabilities.ts:50](https://github.com/handsontable/hyperformula/blob/9c22416/src/license/capabilities.ts#L50)*

Import/export add-on. Reserved until HF-107 ships the feature it would gate.

___

### K

• **K**: *number[]* = [
  0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
  0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
  0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
  0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
  0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
  0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
  0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
  0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
  0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
  0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
  0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
  0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
  0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
  0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
  0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
  0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
  0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
  0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
  0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
  0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
  0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
  0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
  0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
  0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
  0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
  0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
  0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
  0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
  0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
  0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
  0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
  0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
  0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
  0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
  0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
  0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
  0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
  0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
  0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
  0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817,
]

*Defined in [src/license/vendor/sha512.ts:15](https://github.com/handsontable/hyperformula/blob/9c22416/src/license/vendor/sha512.ts#L15)*

The SHA-512 round constants. Each 64-bit constant is stored as a pair of 32-bit integers
(high word first, low word second).

___

### LCID_CURRENCY_TAG

• **LCID_CURRENCY_TAG**: *RegExp‹›* = /\[\$[^\-\]]+-/

*Defined in [src/format/format.ts:26](https://github.com/handsontable/hyperformula/blob/9c22416/src/format/format.ts#L26)*

Detects Excel LCID-tagged currency tags (`[$SYMBOL-LCID]` with a non-empty
SYMBOL portion). Shared by `defaultStringifyDateTime` and
`defaultStringifyDuration` so a format string carrying such a tag short-
circuits both date and duration dispatch and falls through to the
number formatter (or the user-supplied `stringifyCurrency` callback).

The pattern is intentionally unanchored: any occurrence of `[$SYMBOL-`
in the format string triggers the guard. Excel does not mix date/time
tokens with a currency tag in the same format string, so a mid-string
match cannot misclassify a legitimate composite — every observed
format string with a currency tag is currency-only.

___

### MATH_ENGINE_FUNCTIONS

• **MATH_ENGINE_FUNCTIONS**: *string[]* = [
  'ABS', 'CEILING', 'EXP', 'FLOOR', 'IF', 'LN', 'LOG', 'LOG10', 'MOD', 'POWER', 'PRODUCT', 'ROUND',
  'ROUNDDOWN', 'ROUNDUP', 'SQRT', 'SUM',
]

*Defined in [src/license/capabilities.ts:96](https://github.com/handsontable/hyperformula/blob/9c22416/src/license/capabilities.ts#L96)*

Package membership, as the LOWEST package that includes each function.

Transcribed from the packaging design's own per-function evidence file. The lists reproduce
that file's package counts exactly (17 / 51 / 127 / 355 cumulative, plus 15 operators), which
is how the transcript was checked; `capability-table.spec.ts` pins those counts so a later
edit cannot drift from them silently.

Two functions of the evidence file are deliberately absent: `OFFSET` and `VERSION` are
protected built-ins and sit OUTSIDE the token system — the interpreter never gate-checks a
protected function, so listing them would be dead weight that implies a restriction that does
not exist.

**This membership is a DRAFT and is expected to change before release.** The packaging design
it follows is still under review, with the free tier's exact contents and the placement of
several function families among the points not yet settled.

___

### MAX_TIMESTAMP

• **MAX_TIMESTAMP**: *8640000000000000* = 8640000000000000

*Defined in [src/license/licenseResolution.ts:36](https://github.com/handsontable/hyperformula/blob/9c22416/src/license/licenseResolution.ts#L36)*

The largest value `Date` can represent; beyond it `toISOString()` throws.

___

### MILLISECONDS_PER_DAY

• **MILLISECONDS_PER_DAY**: *86400000* = 86400000

*Defined in [src/license/licenseResolution.ts:26](https://github.com/handsontable/hyperformula/blob/9c22416/src/license/licenseResolution.ts#L26)*

Milliseconds in a day, used to turn a grace period in days into a deadline.

___

### MINUTES_PER_HOUR

• **MINUTES_PER_HOUR**: *60* = 60

*Defined in [src/DateTimeHelper.ts:14](https://github.com/handsontable/hyperformula/blob/9c22416/src/DateTimeHelper.ts#L14)*

___

### NAMED_EXPRESSIONS_FEATURE_TOKEN

• **NAMED_EXPRESSIONS_FEATURE_TOKEN**: *"feat:named_expressions"* = "feat:named_expressions"

*Defined in [src/license/capabilities.ts:25](https://github.com/handsontable/hyperformula/blob/9c22416/src/license/capabilities.ts#L25)*

Grants [FeatureId.NamedExpressions](enums/featureid.md#namedexpressions).

___

### NOT_FOUND

• **NOT_FOUND**: *-1* = -1

*Defined in [src/Lookup/AdvancedFind.ts:19](https://github.com/handsontable/hyperformula/blob/9c22416/src/Lookup/AdvancedFind.ts#L19)*

___

### OPERATOR_FUNCTIONS

• **OPERATOR_FUNCTIONS**: *string[]* = [
  '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',
]

*Defined in [src/license/capabilities.ts:68](https://github.com/handsontable/hyperformula/blob/9c22416/src/license/capabilities.ts#L68)*

The calculation operators and their `HF.*` callable forms. Always available in every package —
the packaging design counts them as engine baseline and advertises them separately from the
function totals, so they are granted by [CORE_TOKEN](globals.md#const-core_token) rather than by any package.

___

### QUICK_CHECK_REGEXP

• **QUICK_CHECK_REGEXP**: *RegExp‹›* = new RegExp('^[0-9/.\\-: ]+[ap]?m?$')

*Defined in [src/DateTimeDefault.ts:11](https://github.com/handsontable/hyperformula/blob/9c22416/src/DateTimeDefault.ts#L11)*

___

### SECONDS_MILLISECONDS_THRESHOLD

• **SECONDS_MILLISECONDS_THRESHOLD**: *100000000000* = 100000000000

*Defined in [src/license/licenseResolution.ts:33](https://github.com/handsontable/hyperformula/blob/9c22416/src/license/licenseResolution.ts#L33)*

Below this value a numeric timestamp is read as epoch SECONDS, above it as milliseconds.
`1e11` seconds is year 5138, and `1e11` milliseconds is 1973 — no real license date is near
either, so the split is unambiguous for anything a key can plausibly carry.

___

### SECONDS_PER_MINUTE

• **SECONDS_PER_MINUTE**: *60* = 60

*Defined in [src/DateTimeHelper.ts:13](https://github.com/handsontable/hyperformula/blob/9c22416/src/DateTimeHelper.ts#L13)*

___

### SECONDS_PRECISION

• **SECONDS_PRECISION**: *1000* = 1000

*Defined in [src/DateTimeDefault.ts:15](https://github.com/handsontable/hyperformula/blob/9c22416/src/DateTimeDefault.ts#L15)*

___

### SPREADSHEET_ADDON_TOKEN

• **SPREADSHEET_ADDON_TOKEN**: *"spreadsheet"* = "spreadsheet"

*Defined in [src/license/capabilities.ts:48](https://github.com/handsontable/hyperformula/blob/9c22416/src/license/capabilities.ts#L48)*

Spreadsheet add-on. Reserved: recognized, grants nothing yet — see [CAPABILITY_TABLE](globals.md#const-capability_table).

___

### SPREADSHEET_FUNCTIONS

• **SPREADSHEET_FUNCTIONS**: *string[]* = [
  'ADDRESS', 'AVERAGEIF', 'CHOOSE', 'COLUMN', 'COLUMNS', 'COUNTIF', 'COUNTIFS', 'DATEVALUE', 'DAYS360',
  'EDATE', 'EOMONTH', 'FILTER', 'FORMULATEXT', 'FV', 'HLOOKUP', 'HYPERLINK', 'IFERROR', 'IFNA', 'INDEX',
  'INTERVAL', 'IPMT', 'IRR', 'ISBINARY', 'ISBLANK', 'ISERR', 'ISERROR', 'ISEVEN', 'ISFORMULA', 'ISLOGICAL',
  'ISNA', 'ISNONTEXT', 'ISNUMBER', 'ISODD', 'ISOWEEKNUM', 'ISREF', 'ISTEXT', 'MATCH', 'MAXIFS', 'MINIFS',
  'NA', 'NETWORKDAYS', 'NETWORKDAYS.INTL', 'NPER', 'NPV', 'PERCENTILE.EXC', 'PERCENTILE.INC', 'PMT',
  'PPMT', 'PV', 'RAND', 'RANDBETWEEN', 'RATE', 'ROW', 'ROWS', 'SORT', 'STDEV.P', 'STDEV.S', 'STDEVA',
  'STDEVPA', 'SUMIF', 'SUMIFS', 'TIME', 'TIMEVALUE', 'UNIQUE', 'VAR.P', 'VAR.S', 'VARA', 'VARPA',
  'VLOOKUP', 'WEEKDAY', 'WEEKNUM', 'WORKDAY', 'WORKDAY.INTL', 'XLOOKUP', 'YEARFRAC',
]

*Defined in [src/license/capabilities.ts:109](https://github.com/handsontable/hyperformula/blob/9c22416/src/license/capabilities.ts#L109)*

Added by the spreadsheet package, on top of [CALCULATED_FIELDS_FUNCTIONS](globals.md#const-calculated_fields_functions).

___

### TIME_FORMAT_SECONDS_ITEM_REGEXP

• **TIME_FORMAT_SECONDS_ITEM_REGEXP**: *RegExp‹›* = new RegExp('^ss(\\.(s+|0+))?$')

*Defined in [src/DateTimeDefault.ts:9](https://github.com/handsontable/hyperformula/blob/9c22416/src/DateTimeDefault.ts#L9)*

___

### TIME_SEPARATOR

• **TIME_SEPARATOR**: *":"* = ":"

*Defined in [src/DateTimeDefault.ts:14](https://github.com/handsontable/hyperformula/blob/9c22416/src/DateTimeDefault.ts#L14)*

___

### TYPED_KEY_CHECKSUM_LENGTH

• **TYPED_KEY_CHECKSUM_LENGTH**: *128* = 128

*Defined in [src/license/vendor/constants.ts:23](https://github.com/handsontable/hyperformula/blob/9c22416/src/license/vendor/constants.ts#L23)*

The length of the checksum (SHA-512 as hex) which postfixes every typed license key.

___

### TYPED_KEY_SUPPORTED_VERSIONS

• **TYPED_KEY_SUPPORTED_VERSIONS**: *number[]* = [1]

*Defined in [src/license/vendor/constants.ts:18](https://github.com/handsontable/hyperformula/blob/9c22416/src/license/vendor/constants.ts#L18)*

The typed license key format versions this library can read. The version is stamped into the
key payload (the `v` field) at generation and checked automatically at extraction — the format
version describes HOW the key is parsed (envelope, encoding, checksum), unlike the schema,
which describes WHAT the key grants. When a new format version ships, it is ADDED here (with
per-version handling where needed) so one build keeps reading all the already-issued keys.

___

### UNDO_REDO_FEATURE_TOKEN

• **UNDO_REDO_FEATURE_TOKEN**: *"feat:undo_redo"* = "feat:undo_redo"

*Defined in [src/license/capabilities.ts:21](https://github.com/handsontable/hyperformula/blob/9c22416/src/license/capabilities.ts#L21)*

Grants [FeatureId.UndoRedo](enums/featureid.md#undoredo).

___

### WHITESPACE_REGEXP

• **WHITESPACE_REGEXP**: *RegExp‹›* = new RegExp('\\s+')

*Defined in [src/DateTimeDefault.ts:12](https://github.com/handsontable/hyperformula/blob/9c22416/src/DateTimeDefault.ts#L12)*

___

### WRONG_RANGE_SIZE

• **WRONG_RANGE_SIZE**: *"AbsoluteCellRange: Wrong range size"* = "AbsoluteCellRange: Wrong range size"

*Defined in [src/AbsoluteCellRange.ts:22](https://github.com/handsontable/hyperformula/blob/9c22416/src/AbsoluteCellRange.ts#L22)*

___

### _notified

• **_notified**: *boolean* = false

*Defined in [src/helpers/licenseKeyValidator.ts:43](https://github.com/handsontable/hyperformula/blob/9c22416/src/helpers/licenseKeyValidator.ts#L43)*

___

### _rl

• **_rl**: *"length"* = "length"

*Defined in [src/helpers/licenseKeyHelper.ts:9](https://github.com/handsontable/hyperformula/blob/9c22416/src/helpers/licenseKeyHelper.ts#L9)*

**`license`** 
Copyright (c) 2025 Handsoncode. All rights reserved.

___

### dateFormatRegex

• **dateFormatRegex**: *RegExp‹›* = /(\\.|dd|DD|d|D|mm|MM|m|M|YYYY|YY|yyyy|yy|HH|hh|H|h|ss(\.(0+|s+))?|s|AM\/PM|am\/pm|A\/P|a\/p|\[mm]|\[MM]|\[hh]|\[HH])/g

*Defined in [src/format/parser.ts:8](https://github.com/handsontable/hyperformula/blob/9c22416/src/format/parser.ts#L8)*

___

### defaultLanguage

• **defaultLanguage**: *string* = Config.defaultConfig.language

*Defined in [src/index.ts:108](https://github.com/handsontable/hyperformula/blob/9c22416/src/index.ts#L108)*

___

### memoizedParseDateFormat

• **memoizedParseDateFormat**: *(Anonymous function)* = memoize(parseDateFormat)

*Defined in [src/DateTimeDefault.ts:17](https://github.com/handsontable/hyperformula/blob/9c22416/src/DateTimeDefault.ts#L17)*

___

### memoizedParseTimeFormat

• **memoizedParseTimeFormat**: *(Anonymous function)* = memoize(parseTimeFormat)

*Defined in [src/DateTimeDefault.ts:16](https://github.com/handsontable/hyperformula/blob/9c22416/src/DateTimeDefault.ts#L16)*

___

### numDays

• **numDays**: *number[]* = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]

*Defined in [src/DateTimeHelper.ts:10](https://github.com/handsontable/hyperformula/blob/9c22416/src/DateTimeHelper.ts#L10)*

___

### numberFormatRegex

• **numberFormatRegex**: *RegExp‹›* = /(\\.|[#0]+(\.[#0]*)?)/g

*Defined in [src/format/parser.ts:9](https://github.com/handsontable/hyperformula/blob/9c22416/src/format/parser.ts#L9)*

___

### prefSumDays

• **prefSumDays**: *number[]* = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334]

*Defined in [src/DateTimeHelper.ts:11](https://github.com/handsontable/hyperformula/blob/9c22416/src/DateTimeHelper.ts#L11)*

___

### privatePool

• **privatePool**: *WeakMap‹[Config](classes/config.md), [LicensePrivateState](interfaces/licenseprivatestate.md)›* = new WeakMap()

*Defined in [src/Config.ts:40](https://github.com/handsontable/hyperformula/blob/9c22416/src/Config.ts#L40)*

## Functions

### CellValueTypeOrd

▸ **CellValueTypeOrd**(`arg`: [CellValueType](classes/hyperformulans.md#static-cellvaluetype)): *number*

*Defined in [src/Cell.ts:97](https://github.com/handsontable/hyperformula/blob/9c22416/src/Cell.ts#L97)*

**Parameters:**

Name | Type |
------ | ------ |
`arg` | [CellValueType](classes/hyperformulans.md#static-cellvaluetype) |

**Returns:** *number*

___

### _cp

▸ **_cp**(`v`: any): *number*

*Defined in [src/helpers/licenseKeyHelper.ts:14](https://github.com/handsontable/hyperformula/blob/9c22416/src/helpers/licenseKeyHelper.ts#L14)*

**Parameters:**

Name | Type |
------ | ------ |
`v` | any |

**Returns:** *number*

___

### _hd

▸ **_hd**(`v`: any): *number*

*Defined in [src/helpers/licenseKeyHelper.ts:10](https://github.com/handsontable/hyperformula/blob/9c22416/src/helpers/licenseKeyHelper.ts#L10)*

**Parameters:**

Name | Type |
------ | ------ |
`v` | any |

**Returns:** *number*

___

### _nm

▸ **_nm**(`v`: any): *string*

*Defined in [src/helpers/licenseKeyHelper.ts:12](https://github.com/handsontable/hyperformula/blob/9c22416/src/helpers/licenseKeyHelper.ts#L12)*

**Parameters:**

Name | Type |
------ | ------ |
`v` | any |

**Returns:** *string*

___

### _pi

▸ **_pi**(`v`: any): *number*

*Defined in [src/helpers/licenseKeyHelper.ts:11](https://github.com/handsontable/hyperformula/blob/9c22416/src/helpers/licenseKeyHelper.ts#L11)*

**Parameters:**

Name | Type |
------ | ------ |
`v` | any |

**Returns:** *number*

___

### _ss

▸ **_ss**(`v`: any, `s`: any, `l`: any): *any*

*Defined in [src/helpers/licenseKeyHelper.ts:13](https://github.com/handsontable/hyperformula/blob/9c22416/src/helpers/licenseKeyHelper.ts#L13)*

**Parameters:**

Name | Type |
------ | ------ |
`v` | any |
`s` | any |
`l` | any |

**Returns:** *any*

___

### absoluteSheetReference

▸ **absoluteSheetReference**(`address`: AddressWithSheet, `baseAddress`: [SimpleCellAddress](interfaces/simplecelladdress.md)): *number*

*Defined in [src/Cell.ts:222](https://github.com/handsontable/hyperformula/blob/9c22416/src/Cell.ts#L222)*

**Parameters:**

Name | Type |
------ | ------ |
`address` | AddressWithSheet |
`baseAddress` | [SimpleCellAddress](interfaces/simplecelladdress.md) |

**Returns:** *number*

___

### absolutizeDependencies

▸ **absolutizeDependencies**(`deps`: RelativeDependency[], `baseAddress`: [SimpleCellAddress](interfaces/simplecelladdress.md)): *[CellDependency](globals.md#celldependency)[]*

*Defined in [src/absolutizeDependencies.ts:17](https://github.com/handsontable/hyperformula/blob/9c22416/src/absolutizeDependencies.ts#L17)*

Converts dependencies from maybe relative addressing to absolute addressing.

**Parameters:**

Name | Type | Description |
------ | ------ | ------ |
`deps` | RelativeDependency[] | list of addresses in R0C0 format |
`baseAddress` | [SimpleCellAddress](interfaces/simplecelladdress.md) | base address with regard to which make a convertion  |

**Returns:** *[CellDependency](globals.md#celldependency)[]*

___

### addressKey

▸ **addressKey**(`address`: [SimpleCellAddress](interfaces/simplecelladdress.md)): *string*

*Defined in [src/Cell.ts:209](https://github.com/handsontable/hyperformula/blob/9c22416/src/Cell.ts#L209)*

**Parameters:**

Name | Type |
------ | ------ |
`address` | [SimpleCellAddress](interfaces/simplecelladdress.md) |

**Returns:** *string*

___

### allowsFeature 

▸ **allowsFeature**(`resolved`: [ResolvedCapabilities](interfaces/resolvedcapabilities.md), `feature`: [FeatureId](enums/featureid.md)): *boolean*

*Defined in [src/license/CapabilityRegistry.ts:121](https://github.com/handsontable/hyperformula/blob/9c22416/src/license/CapabilityRegistry.ts#L121)*

Whether a resolved entitlement allows using the given feature area of the public API.

**Parameters:**

Name | Type |
------ | ------ |
`resolved` | [ResolvedCapabilities](interfaces/resolvedcapabilities.md) |
`feature` | [FeatureId](enums/featureid.md) |

**Returns:** *boolean*

___

### allowsFunction 

▸ **allowsFunction**(`resolved`: [ResolvedCapabilities](interfaces/resolvedcapabilities.md), `functionId`: string): *boolean*

*Defined in [src/license/CapabilityRegistry.ts:114](https://github.com/handsontable/hyperformula/blob/9c22416/src/license/CapabilityRegistry.ts#L114)*

Whether a resolved entitlement allows calling the given function.

**Parameters:**

Name | Type |
------ | ------ |
`resolved` | [ResolvedCapabilities](interfaces/resolvedcapabilities.md) |
`functionId` | string |

**Returns:** *boolean*

___

### arraySizeForBinaryOp 

▸ **arraySizeForBinaryOp**(`leftArraySize`: [ArraySize](classes/arraysize.md), `rightArraySize`: [ArraySize](classes/arraysize.md)): *[ArraySize](classes/arraysize.md)*

*Defined in [src/ArraySize.ts:34](https://github.com/handsontable/hyperformula/blob/9c22416/src/ArraySize.ts#L34)*

**Parameters:**

Name | Type |
------ | ------ |
`leftArraySize` | [ArraySize](classes/arraysize.md) |
`rightArraySize` | [ArraySize](classes/arraysize.md) |

**Returns:** *[ArraySize](classes/arraysize.md)*

___

### arraySizeForUnaryOp 

▸ **arraySizeForUnaryOp**(`arraySize`: [ArraySize](classes/arraysize.md)): *[ArraySize](classes/arraysize.md)*

*Defined in [src/ArraySize.ts:38](https://github.com/handsontable/hyperformula/blob/9c22416/src/ArraySize.ts#L38)*

**Parameters:**

Name | Type |
------ | ------ |
`arraySize` | [ArraySize](classes/arraysize.md) |

**Returns:** *[ArraySize](classes/arraysize.md)*

___

### base64ToBytes 

▸ **base64ToBytes**(`base64`: string): *number[] | null*

*Defined in [src/license/vendor/utils.ts:177](https://github.com/handsontable/hyperformula/blob/9c22416/src/license/vendor/utils.ts#L177)*

Decodes a base64 string (standard or URL-safe alphabet, padding optional) back into bytes.
Returns `null` when the string is not valid base64.

**Parameters:**

Name | Type | Description |
------ | ------ | ------ |
`base64` | string | the base64 string to decode  |

**Returns:** *number[] | null*

___

### base64ToString 

▸ **base64ToString**(`base64`: string): *string | null*

*Defined in [src/license/vendor/utils.ts:214](https://github.com/handsontable/hyperformula/blob/9c22416/src/license/vendor/utils.ts#L214)*

Decodes a base64 (standard or URL-safe) string back into a string. Returns `null` when the
input is not valid base64.

**Parameters:**

Name | Type | Description |
------ | ------ | ------ |
`base64` | string | the base64 string to decode  |

**Returns:** *string | null*

___

### buildColumnSearchStrategy 

▸ **buildColumnSearchStrategy**(`dependencyGraph`: DependencyGraph, `config`: [Config](classes/config.md), `statistics`: [Statistics](classes/statistics.md)): *[ColumnSearchStrategy](interfaces/columnsearchstrategy.md)*

*Defined in [src/Lookup/SearchStrategy.ts:63](https://github.com/handsontable/hyperformula/blob/9c22416/src/Lookup/SearchStrategy.ts#L63)*

**Parameters:**

Name | Type |
------ | ------ |
`dependencyGraph` | DependencyGraph |
`config` | [Config](classes/config.md) |
`statistics` | [Statistics](classes/statistics.md) |

**Returns:** *[ColumnSearchStrategy](interfaces/columnsearchstrategy.md)*

___

### checkKeySchema 

▸ **checkKeySchema**(`v`: any): *boolean*

*Defined in [src/helpers/licenseKeyHelper.ts:20](https://github.com/handsontable/hyperformula/blob/9c22416/src/helpers/licenseKeyHelper.ts#L20)*

**Parameters:**

Name | Type |
------ | ------ |
`v` | any |

**Returns:** *boolean*

___

### checkLicenseKeyValidity 

▸ **checkLicenseKeyValidity**(`licenseKey`: string): *[LicenseKeyValidityState](enums/licensekeyvaliditystate.md)*

*Defined in [src/helpers/licenseKeyValidator.ts:74](https://github.com/handsontable/hyperformula/blob/9c22416/src/helpers/licenseKeyValidator.ts#L74)*

Checks if the provided license key is grammatically valid or not expired.

**Parameters:**

Name | Type | Description |
------ | ------ | ------ |
`licenseKey` | string | The license key to check. |

**Returns:** *[LicenseKeyValidityState](enums/licensekeyvaliditystate.md)*

Returns the checking state.

___

### collatorFromConfig 

▸ **collatorFromConfig**(`config`: [Config](classes/config.md)): *Collator*

*Defined in [src/StringHelper.ts:8](https://github.com/handsontable/hyperformula/blob/9c22416/src/StringHelper.ts#L8)*

**Parameters:**

Name | Type |
------ | ------ |
`config` | [Config](classes/config.md) |

**Returns:** *Collator*

___

### configCheckIfParametersNotInConflict 

▸ **configCheckIfParametersNotInConflict**(...`params`: object[]): *void*

*Defined in [src/ArgumentSanitization.ts:57](https://github.com/handsontable/hyperformula/blob/9c22416/src/ArgumentSanitization.ts#L57)*

**Parameters:**

Name | Type |
------ | ------ |
`...params` | object[] |

**Returns:** *void*

___

### configValueFromParam 

▸ **configValueFromParam**(`inputValue`: any, `expectedType`: string | string[], `paramName`: [ConfigParamsList](globals.md#configparamslist)): *any*

*Defined in [src/ArgumentSanitization.ts:16](https://github.com/handsontable/hyperformula/blob/9c22416/src/ArgumentSanitization.ts#L16)*

**Parameters:**

Name | Type |
------ | ------ |
`inputValue` | any |
`expectedType` | string &#124; string[] |
`paramName` | [ConfigParamsList](globals.md#configparamslist) |

**Returns:** *any*

___

### configValueFromParamCheck 

▸ **configValueFromParamCheck**(`inputValue`: any, `typeCheck`: function, `expectedType`: string, `paramName`: [ConfigParamsList](globals.md#configparamslist)): *any*

*Defined in [src/ArgumentSanitization.ts:47](https://github.com/handsontable/hyperformula/blob/9c22416/src/ArgumentSanitization.ts#L47)*

**Parameters:**

▪ **inputValue**: *any*

▪ **typeCheck**: *function*

▸ (`object`: any): *boolean*

**Parameters:**

Name | Type |
------ | ------ |
`object` | any |

▪ **expectedType**: *string*

▪ **paramName**: *[ConfigParamsList](globals.md#configparamslist)*

**Returns:** *any*

___

### countChars 

▸ **countChars**(`text`: string, `char`: string): *number*

*Defined in [src/format/format.ts:74](https://github.com/handsontable/hyperformula/blob/9c22416/src/format/format.ts#L74)*

**Parameters:**

Name | Type |
------ | ------ |
`text` | string |
`char` | string |

**Returns:** *number*

___

### createTokens 

▸ **createTokens**(`regexTokens`: RegExpExecArray[], `str`: string): *[FormatToken](interfaces/formattoken.md)[]*

*Defined in [src/format/parser.ts:66](https://github.com/handsontable/hyperformula/blob/9c22416/src/format/parser.ts#L66)*

**Parameters:**

Name | Type |
------ | ------ |
`regexTokens` | RegExpExecArray[] |
`str` | string |

**Returns:** *[FormatToken](interfaces/formattoken.md)[]*

___

### dayToMonth 

▸ **dayToMonth**(`dayOfYear`: number): *number*

*Defined in [src/DateTimeHelper.ts:270](https://github.com/handsontable/hyperformula/blob/9c22416/src/DateTimeHelper.ts#L270)*

**Parameters:**

Name | Type |
------ | ------ |
`dayOfYear` | number |

**Returns:** *number*

___

### deepFreeze 

▸ **deepFreeze**‹**T**›(`value`: T): *T*

*Defined in [src/license/vendor/utils.ts:25](https://github.com/handsontable/hyperformula/blob/9c22416/src/license/vendor/utils.ts#L25)*

Recursively freezes the value (and every nested object). Used to make a verified schema
immutable so it cannot drift from what was validated.

**Type parameters:**

▪ **T**

**Parameters:**

Name | Type | Description |
------ | ------ | ------ |
`value` | T | the value to freeze  |

**Returns:** *T*

___

### defaultParseToDate 

▸ **defaultParseToDate**(`dateItems`: string[], `dateFormat`: [Maybe](globals.md#maybe)‹string›): *[Maybe](globals.md#maybe)‹[SimpleDate](interfaces/simpledate.md)›*

*Defined in [src/DateTimeDefault.ts:137](https://github.com/handsontable/hyperformula/blob/9c22416/src/DateTimeDefault.ts#L137)*

Parses a date value from a string if the string matches the given date format.

**Parameters:**

Name | Type |
------ | ------ |
`dateItems` | string[] |
`dateFormat` | [Maybe](globals.md#maybe)‹string› |

**Returns:** *[Maybe](globals.md#maybe)‹[SimpleDate](interfaces/simpledate.md)›*

___

### defaultParseToDateTime 

▸ **defaultParseToDateTime**(`text`: string, `dateFormat`: [Maybe](globals.md#maybe)‹string›, `timeFormat`: [Maybe](globals.md#maybe)‹string›): *[Maybe](globals.md#maybe)‹[DateTime](globals.md#datetime)›*

*Defined in [src/DateTimeDefault.ts:30](https://github.com/handsontable/hyperformula/blob/9c22416/src/DateTimeDefault.ts#L30)*

Parses a DateTime value from a string if the string matches the given date format and time format.

Idea for more readable implementation:
  - divide string into parts by a regexp [date_regexp]? [time_regexp]? [ampm_regexp]?
  - start by finding the time part, because it is unambiguous '([0-9]+:[0-9:.]+ ?[ap]?m?)$', before it is the date part
  - OR split by spaces - last segment is ampm token, second to last is time (with or without ampm), rest is date
If applied:
  - date parsing might work differently after these changes but still according to the docs
  - make sure to test edge cases like timeFormats: ['hh', 'ss.ss'] etc, string: '01-01-2019 AM', 'PM'

**Parameters:**

Name | Type |
------ | ------ |
`text` | string |
`dateFormat` | [Maybe](globals.md#maybe)‹string› |
`timeFormat` | [Maybe](globals.md#maybe)‹string› |

**Returns:** *[Maybe](globals.md#maybe)‹[DateTime](globals.md#datetime)›*

___

### defaultParseToTime 

▸ **defaultParseToTime**(`timeItems`: string[], `timeFormat`: [Maybe](globals.md#maybe)‹string›): *[Maybe](globals.md#maybe)‹[SimpleTime](interfaces/simpletime.md)›*

*Defined in [src/DateTimeDefault.ts:82](https://github.com/handsontable/hyperformula/blob/9c22416/src/DateTimeDefault.ts#L82)*

Parses a time value from a string if the string matches the given time format.

**Parameters:**

Name | Type |
------ | ------ |
`timeItems` | string[] |
`timeFormat` | [Maybe](globals.md#maybe)‹string› |

**Returns:** *[Maybe](globals.md#maybe)‹[SimpleTime](interfaces/simpletime.md)›*

___

### defaultStringifyCurrency 

▸ **defaultStringifyCurrency**(`_value`: number, `_formatArg`: string): *[Maybe](globals.md#maybe)‹string›*

*Defined in [src/format/format.ts:328](https://github.com/handsontable/hyperformula/blob/9c22416/src/format/format.ts#L328)*

Default implementation of the `stringifyCurrency` config option.

Returning `undefined` instructs the formatter to fall through to the
built-in number formatter, preserving HyperFormula's zero-dependency
default behavior. Replace this default by setting the
[`stringifyCurrency`](../../api/interfaces/configparams.md#stringifycurrency)
config option.

**Parameters:**

Name | Type | Description |
------ | ------ | ------ |
`_value` | number | the numeric value to format (unused in default). |
`_formatArg` | string | the format string passed to `TEXT` (unused in default). |

**Returns:** *[Maybe](globals.md#maybe)‹string›*

`undefined` — caller should fall through to the built-in formatter.

___

### defaultStringifyDateTime 

▸ **defaultStringifyDateTime**(`dateTime`: [SimpleDateTime](globals.md#simpledatetime), `formatArg`: string): *[Maybe](globals.md#maybe)‹string›*

*Defined in [src/format/format.ts:224](https://github.com/handsontable/hyperformula/blob/9c22416/src/format/format.ts#L224)*

Default `stringifyDateTime` callback — formats a date/time value against an
Excel-style format string (e.g. `YYYY-MM-DD HH:mm:ss`).

Returns `undefined` for format strings that are not date/time formats so the
dispatcher in `format()` can fall through to `parseForNumberFormat` (or to a
user-supplied `stringifyCurrency` callback for currency-tagged formats).

**LCID currency-tag guard** — explicitly returns `undefined` for Excel
currency tags `[$SYMBOL-LCID]` (non-empty SYMBOL portion). Without the
guard, `parseForDateTimeFormat` greedily consumes letters like `D`/`M`/`S`/`Y`/`H`
inside the currency code (e.g. `D` in USD, `H` in CHF, `M`+`D` in AMD),
mangling the output of an `[$USD-409] #,##0.00` format into
`[$US9-409] #,##0.00` because `D` is read as a day token. The pre-HF-24
behaviour was to mis-format; the guarded return is the deliberate
correction, not a regression. Bit-for-bit compatibility is preserved for
every non-currency format (dates, durations, `$#,##0.00`, etc.).

The guard pattern (`/\[\$[^\-\]]+-/`) requires ≥1 character between `[$`
and `-` so it distinguishes currency tags (`[$USD-409]`, `[$€-2]`) from
Excel's locale-only modifier (`[$-409]`, `[$-F800]`), which is valid on
date/time formats and must continue to flow through this function.

**Parameters:**

Name | Type | Description |
------ | ------ | ------ |
`dateTime` | [SimpleDateTime](globals.md#simpledatetime) | parsed date/time value to render |
`formatArg` | string | Excel-style format string |

**Returns:** *[Maybe](globals.md#maybe)‹string›*

formatted string, or `undefined` to defer to the next dispatch step

___

### defaultStringifyDuration 

▸ **defaultStringifyDuration**(`time`: [SimpleTime](interfaces/simpletime.md), `formatArg`: string): *[Maybe](globals.md#maybe)‹string›*

*Defined in [src/format/format.ts:132](https://github.com/handsontable/hyperformula/blob/9c22416/src/format/format.ts#L132)*

Default `stringifyDuration` callback — formats a duration value against an
Excel-style time format string (e.g. `[hh]:mm:ss`).

Returns `undefined` for format strings that are not duration formats so the
dispatcher in `format()` can fall through to other handlers.

**LCID currency-tag guard** — sibling to the same guard in
`defaultStringifyDateTime`; explicitly returns `undefined` for Excel
currency tags `[$SYMBOL-LCID]` because the SYMBOL portion contains
duration-token letters (`H` in CHF/HUF, `m` in AMD/HMD) that
`parseForDateTimeFormat` would otherwise interpret as time tokens and
mangle the output. See `defaultStringifyDateTime` for the full
symbol-vs-locale-modifier rationale and the historical pre-HF-24
behaviour the guard corrects.

**Parameters:**

Name | Type | Description |
------ | ------ | ------ |
`time` | [SimpleTime](interfaces/simpletime.md) | parsed duration value to render |
`formatArg` | string | Excel-style format string |

**Returns:** *[Maybe](globals.md#maybe)‹string›*

formatted string, or `undefined` to defer to the next dispatch step

___

### doesContainRelativeReferences

▸ **doesContainRelativeReferences**(`ast`: Ast): *boolean*

*Defined in [src/NamedExpressions.ts:299](https://github.com/handsontable/hyperformula/blob/9c22416/src/NamedExpressions.ts#L299)*

**Parameters:**

Name | Type |
------ | ------ |
`ast` | Ast |

**Returns:** *boolean*

___

### doesItLookLikeADateTimeQuickCheck 

▸ **doesItLookLikeADateTimeQuickCheck**(`text`: string): *boolean*

*Defined in [src/DateTimeDefault.ts:222](https://github.com/handsontable/hyperformula/blob/9c22416/src/DateTimeDefault.ts#L222)*

If this function returns false, the string is not parsable as a date time. Otherwise, it might be.
This is a quick check that is used to avoid running the more expensive parsing operations.

**Parameters:**

Name | Type |
------ | ------ |
`text` | string |

**Returns:** *boolean*

___

### empty 

▸ **empty**‹**T**›(): *IterableIterator‹T›*

*Defined in [src/generatorUtils.ts:8](https://github.com/handsontable/hyperformula/blob/9c22416/src/generatorUtils.ts#L8)*

**Type parameters:**

▪ **T**

**Returns:** *IterableIterator‹T›*

___

### entitlementOf 

▸ **entitlementOf**(`terms`: [LicenseTerms](interfaces/licenseterms.md)): *[LicenseEntitlement](interfaces/licenseentitlement.md)*

*Defined in [src/license/licenseResolution.ts:326](https://github.com/handsontable/hyperformula/blob/9c22416/src/license/licenseResolution.ts#L326)*

Turns the reconciled terms of an intact, unexpired typed key into the entitlement it grants.

Per HF-307 decision D3 this is fail-closed and silent: a token this version does not recognize
is recorded in `unrecognizedCapabilities` and grants nothing, without a warning, a message, or
anything public to read it back from. "Silent" there means the *grant* is silent — whether the
key's console messages are suppressed is decided solely by its `flags` (`terms.silent`), never
by the presence of an unrecognized token; coupling the two suppressed expiry notices as a side
effect of a vocabulary mismatch, and was confirmed an implementation error (Kuba, 12.08).

**Parameters:**

Name | Type | Description |
------ | ------ | ------ |
`terms` | [LicenseTerms](interfaces/licenseterms.md) | the reconciled terms of the key  |

**Returns:** *[LicenseEntitlement](interfaces/licenseentitlement.md)*

___

### equalSimpleCellAddress

▸ **equalSimpleCellAddress**(`left`: [SimpleCellAddress](interfaces/simplecelladdress.md), `right`: [SimpleCellAddress](interfaces/simplecelladdress.md)): *boolean*

*Defined in [src/Cell.ts:226](https://github.com/handsontable/hyperformula/blob/9c22416/src/Cell.ts#L226)*

**Parameters:**

Name | Type |
------ | ------ |
`left` | [SimpleCellAddress](interfaces/simplecelladdress.md) |
`right` | [SimpleCellAddress](interfaces/simplecelladdress.md) |

**Returns:** *boolean*

___

### extractTime 

▸ **extractTime**(`v`: any): *number*

*Defined in [src/helpers/licenseKeyHelper.ts:16](https://github.com/handsontable/hyperformula/blob/9c22416/src/helpers/licenseKeyHelper.ts#L16)*

**Parameters:**

Name | Type |
------ | ------ |
`v` | any |

**Returns:** *number*

___

### extractTypedKeyData 

▸ **extractTypedKeyData**(`licenseKey`: string): *[TypedKeyData](interfaces/typedkeydata.md) | null*

*Defined in [src/license/vendor/extractKeyData.ts:142](https://github.com/handsontable/hyperformula/blob/9c22416/src/license/vendor/extractKeyData.ts#L142)*

Extracts the machine-readable data from a typed license key (`[TRIAL]`, `[FREE]`, `[SUB]` or
`[PERP]`). The function verifies the checksum first, so the returned data is guaranteed to
belong to an intact key. For a malformed or tampered key `null` is returned.

The expiration time itself is not checked here — it is up to the caller to compare it against
the current time (trial, subscription) or the build release date (perpetual).

**Parameters:**

Name | Type | Description |
------ | ------ | ------ |
`licenseKey` | string | the license key to extract the data from  |

**Returns:** *[TypedKeyData](interfaces/typedkeydata.md) | null*

___

### filterDependenciesOutOfScope

▸ **filterDependenciesOutOfScope**(`deps`: [CellDependency](globals.md#celldependency)[]): *[CellDependency](globals.md#celldependency)[]*

*Defined in [src/absolutizeDependencies.ts:21](https://github.com/handsontable/hyperformula/blob/9c22416/src/absolutizeDependencies.ts#L21)*

**Parameters:**

Name | Type |
------ | ------ |
`deps` | [CellDependency](globals.md#celldependency)[] |

**Returns:** *[CellDependency](globals.md#celldependency)[]*

___

### findBoundaries 

▸ **findBoundaries**(`sheet`: [Sheet](globals.md#sheet)): *[SheetBoundaries](interfaces/sheetboundaries.md)*

*Defined in [src/Sheet.ts:49](https://github.com/handsontable/hyperformula/blob/9c22416/src/Sheet.ts#L49)*

Returns actual width, height and fill ratio of a sheet

**Parameters:**

Name | Type | Description |
------ | ------ | ------ |
`sheet` | [Sheet](globals.md#sheet) | two-dimmensional array sheet representation  |

**Returns:** *[SheetBoundaries](interfaces/sheetboundaries.md)*

___

### findInOrderedArray 

▸ **findInOrderedArray**(`key`: number, `values`: number[], `handlingMisses`: "lowerBound" | "upperBound"): *number*

*Defined in [src/Lookup/ColumnIndex.ts:339](https://github.com/handsontable/hyperformula/blob/9c22416/src/Lookup/ColumnIndex.ts#L339)*

**Parameters:**

Name | Type | Default |
------ | ------ | ------ |
`key` | number | - |
`values` | number[] | - |
`handlingMisses` | "lowerBound" &#124; "upperBound" | "upperBound" |

**Returns:** *number*

___

### first 

▸ **first**‹**T**›(`iterable`: IterableIterator‹T›): *[Maybe](globals.md#maybe)‹T›*

*Defined in [src/generatorUtils.ts:22](https://github.com/handsontable/hyperformula/blob/9c22416/src/generatorUtils.ts#L22)*

**Type parameters:**

▪ **T**

**Parameters:**

Name | Type |
------ | ------ |
`iterable` | IterableIterator‹T› |

**Returns:** *[Maybe](globals.md#maybe)‹T›*

___

### format 

▸ **format**(`value`: number, `formatArg`: string, `config`: [Config](classes/config.md), `dateHelper`: [DateTimeHelper](classes/datetimehelper.md)): *RawScalarValue*

*Defined in [src/format/format.ts:28](https://github.com/handsontable/hyperformula/blob/9c22416/src/format/format.ts#L28)*

**Parameters:**

Name | Type |
------ | ------ |
`value` | number |
`formatArg` | string |
`config` | [Config](classes/config.md) |
`dateHelper` | [DateTimeHelper](classes/datetimehelper.md) |

**Returns:** *RawScalarValue*

___

### formatDate 

▸ **formatDate**(`date`: Date): *string*

*Defined in [src/helpers/licenseKeyValidator.ts:115](https://github.com/handsontable/hyperformula/blob/9c22416/src/helpers/licenseKeyValidator.ts#L115)*

Formats a Date instance to hard-coded format MMMM DD, YYYY.

Read in UTC, not local time. Every date reaching this function is built at UTC midnight — the
legacy path from a whole number of days since the epoch, the typed-key path from a calendar
date in the payload — so local getters shifted the day backwards for anyone west of UTC and
printed an expiry one day earlier than the one the key actually carries.

**Parameters:**

Name | Type | Description |
------ | ------ | ------ |
`date` | Date | The date to format, at UTC midnight. |

**Returns:** *string*

The date as `MMMM DD, YYYY`.

___

### formatToken 

▸ **formatToken**(`type`: [TokenType](enums/tokentype.md), `value`: string): *[FormatToken](interfaces/formattoken.md)*

*Defined in [src/format/parser.ts:21](https://github.com/handsontable/hyperformula/blob/9c22416/src/format/parser.ts#L21)*

**Parameters:**

Name | Type |
------ | ------ |
`type` | [TokenType](enums/tokentype.md) |
`value` | string |

**Returns:** *[FormatToken](interfaces/formattoken.md)*

___

### getCellType

▸ **getCellType**(`vertex`: [Maybe](globals.md#maybe)‹CellVertex›, `address`: [SimpleCellAddress](interfaces/simplecelladdress.md)): *[CellType](classes/hyperformulans.md#static-celltype)*

*Defined in [src/Cell.ts:61](https://github.com/handsontable/hyperformula/blob/9c22416/src/Cell.ts#L61)*

**Parameters:**

Name | Type |
------ | ------ |
`vertex` | [Maybe](globals.md#maybe)‹CellVertex› |
`address` | [SimpleCellAddress](interfaces/simplecelladdress.md) |

**Returns:** *[CellType](classes/hyperformulans.md#static-celltype)*

___

### getCellValueDetailedType

▸ **getCellValueDetailedType**(`cellValue`: InterpreterValue): *[CellValueDetailedType](classes/hyperformulans.md#static-cellvaluedetailedtype)*

*Defined in [src/Cell.ts:133](https://github.com/handsontable/hyperformula/blob/9c22416/src/Cell.ts#L133)*

**Parameters:**

Name | Type |
------ | ------ |
`cellValue` | InterpreterValue |

**Returns:** *[CellValueDetailedType](classes/hyperformulans.md#static-cellvaluedetailedtype)*

___

### getCellValueFormat

▸ **getCellValueFormat**(`cellValue`: InterpreterValue): *string | undefined*

*Defined in [src/Cell.ts:141](https://github.com/handsontable/hyperformula/blob/9c22416/src/Cell.ts#L141)*

**Parameters:**

Name | Type |
------ | ------ |
`cellValue` | InterpreterValue |

**Returns:** *string | undefined*

___

### getCellValueType

▸ **getCellValueType**(`cellValue`: InterpreterValue): *[CellValueType](classes/hyperformulans.md#static-cellvaluetype)*

*Defined in [src/Cell.ts:113](https://github.com/handsontable/hyperformula/blob/9c22416/src/Cell.ts#L113)*

**Parameters:**

Name | Type |
------ | ------ |
`cellValue` | InterpreterValue |

**Returns:** *[CellValueType](classes/hyperformulans.md#static-cellvaluetype)*

___

### getDefaultConfig 

▸ **getDefaultConfig**(): *[ConfigParams](interfaces/configparams.md)*

*Defined in [src/Config.ts:407](https://github.com/handsontable/hyperformula/blob/9c22416/src/Config.ts#L407)*

**Returns:** *[ConfigParams](interfaces/configparams.md)*

___

### getFullConfigFromPartial 

▸ **getFullConfigFromPartial**(`partialConfig`: Partial‹[ConfigParams](interfaces/configparams.md)›): *[ConfigParams](interfaces/configparams.md)*

*Defined in [src/Config.ts:393](https://github.com/handsontable/hyperformula/blob/9c22416/src/Config.ts#L393)*

**Parameters:**

Name | Type |
------ | ------ |
`partialConfig` | Partial‹[ConfigParams](interfaces/configparams.md)› |

**Returns:** *[ConfigParams](interfaces/configparams.md)*

___

### instanceOfSimpleDate 

▸ **instanceOfSimpleDate**(`obj`: any): *obj is SimpleDate*

*Defined in [src/DateTimeHelper.ts:34](https://github.com/handsontable/hyperformula/blob/9c22416/src/DateTimeHelper.ts#L34)*

**Parameters:**

Name | Type |
------ | ------ |
`obj` | any |

**Returns:** *obj is SimpleDate*

___

### instanceOfSimpleTime 

▸ **instanceOfSimpleTime**(`obj`: any): *obj is SimpleTime*

*Defined in [src/DateTimeHelper.ts:43](https://github.com/handsontable/hyperformula/blob/9c22416/src/DateTimeHelper.ts#L43)*

**Parameters:**

Name | Type |
------ | ------ |
`obj` | any |

**Returns:** *obj is SimpleTime*

___

### invalidSimpleColumnAddress

▸ **invalidSimpleColumnAddress**(`address`: [SimpleColumnAddress](interfaces/simplecolumnaddress.md)): *boolean*

*Defined in [src/Cell.ts:190](https://github.com/handsontable/hyperformula/blob/9c22416/src/Cell.ts#L190)*

**Parameters:**

Name | Type |
------ | ------ |
`address` | [SimpleColumnAddress](interfaces/simplecolumnaddress.md) |

**Returns:** *boolean*

___

### invalidSimpleRowAddress

▸ **invalidSimpleRowAddress**(`address`: [SimpleRowAddress](interfaces/simplerowaddress.md)): *boolean*

*Defined in [src/Cell.ts:181](https://github.com/handsontable/hyperformula/blob/9c22416/src/Cell.ts#L181)*

**Parameters:**

Name | Type |
------ | ------ |
`address` | [SimpleRowAddress](interfaces/simplerowaddress.md) |

**Returns:** *boolean*

___

### isBoolean 

▸ **isBoolean**(`text`: string): *boolean*

*Defined in [src/CellContentParser.ts:81](https://github.com/handsontable/hyperformula/blob/9c22416/src/CellContentParser.ts#L81)*

**Parameters:**

Name | Type |
------ | ------ |
`text` | string |

**Returns:** *boolean*

___

### isColOrRowInvalid

▸ **isColOrRowInvalid**(`address`: [SimpleCellAddress](interfaces/simplecelladdress.md)): *boolean*

*Defined in [src/Cell.ts:203](https://github.com/handsontable/hyperformula/blob/9c22416/src/Cell.ts#L203)*

Checks if the column or row id is negative.

**Parameters:**

Name | Type |
------ | ------ |
`address` | [SimpleCellAddress](interfaces/simplecelladdress.md) |

**Returns:** *boolean*

___

### isError 

▸ **isError**(`text`: string, `errorMapping`: Record‹string, [ErrorType](classes/hyperformulans.md#static-errortype)›): *boolean*

*Defined in [src/CellContentParser.ts:86](https://github.com/handsontable/hyperformula/blob/9c22416/src/CellContentParser.ts#L86)*

**Parameters:**

Name | Type |
------ | ------ |
`text` | string |
`errorMapping` | Record‹string, [ErrorType](classes/hyperformulans.md#static-errortype)› |

**Returns:** *boolean*

___

### isEscapeToken 

▸ **isEscapeToken**(`token`: RegExpExecArray): *boolean*

*Defined in [src/format/parser.ts:131](https://github.com/handsontable/hyperformula/blob/9c22416/src/format/parser.ts#L131)*

**Parameters:**

Name | Type |
------ | ------ |
`token` | RegExpExecArray |

**Returns:** *boolean*

___

### isFormula 

▸ **isFormula**(`text`: string): *boolean*

*Defined in [src/CellContentParser.ts:77](https://github.com/handsontable/hyperformula/blob/9c22416/src/CellContentParser.ts#L77)*

Checks whether string looks like formula or not.

**Parameters:**

Name | Type | Description |
------ | ------ | ------ |
`text` | string | formula  |

**Returns:** *boolean*

___

### isNonnegativeInteger 

▸ **isNonnegativeInteger**(`x`: number): *boolean*

*Defined in [src/CrudOperations.ts:657](https://github.com/handsontable/hyperformula/blob/9c22416/src/CrudOperations.ts#L657)*

**Parameters:**

Name | Type |
------ | ------ |
`x` | number |

**Returns:** *boolean*

___

### isPositiveInteger 

▸ **isPositiveInteger**(`x`: number): *boolean*

*Defined in [src/CrudOperations.ts:653](https://github.com/handsontable/hyperformula/blob/9c22416/src/CrudOperations.ts#L653)*

**Parameters:**

Name | Type |
------ | ------ |
`x` | number |

**Returns:** *boolean*

___

### isProductGrant 

▸ **isProductGrant**(`value`: unknown): *value is TypedKeyProductGrant & Rev5ProductGrant*

*Defined in [src/license/licenseResolution.ts:175](https://github.com/handsontable/hyperformula/blob/9c22416/src/license/licenseResolution.ts#L175)*

Whether a payload product entry is a usable object rather than `null`, an array or a scalar.

**Parameters:**

Name | Type |
------ | ------ |
`value` | unknown |

**Returns:** *value is TypedKeyProductGrant & Rev5ProductGrant*

___

### isRowOrColumnRange 

▸ **isRowOrColumnRange**(`leftCorner`: [SimpleCellAddress](interfaces/simplecelladdress.md), `width`: number, `height`: number): *boolean*

*Defined in [src/Operations.ts:1100](https://github.com/handsontable/hyperformula/blob/9c22416/src/Operations.ts#L1100)*

**Parameters:**

Name | Type |
------ | ------ |
`leftCorner` | [SimpleCellAddress](interfaces/simplecelladdress.md) |
`width` | number |
`height` | number |

**Returns:** *boolean*

___

### isSimpleCellAddress 

▸ **isSimpleCellAddress**(`obj`: unknown): *obj is SimpleCellAddress*

*Defined in [src/Cell.ts:214](https://github.com/handsontable/hyperformula/blob/9c22416/src/Cell.ts#L214)*

Checks if the object is a simple cell address.

**Parameters:**

Name | Type |
------ | ------ |
`obj` | unknown |

**Returns:** *obj is SimpleCellAddress*

___

### isSimpleCellRange 

▸ **isSimpleCellRange**(`val`: unknown): *val is SimpleCellRange*

*Defined in [src/AbsoluteCellRange.ts:34](https://github.com/handsontable/hyperformula/blob/9c22416/src/AbsoluteCellRange.ts#L34)*

Type guard that checks if an object is a valid SimpleCellRange.

**Parameters:**

Name | Type | Description |
------ | ------ | ------ |
`val` | unknown | Value to check |

**Returns:** *val is SimpleCellRange*

True if and only if the object is a valid SimpleCellRange

___

### licenseTermsOf 

▸ **licenseTermsOf**(`data`: [TypedKeyData](interfaces/typedkeydata.md)): *[LicenseTerms](interfaces/licenseterms.md) | null*

*Defined in [src/license/licenseResolution.ts:188](https://github.com/handsontable/hyperformula/blob/9c22416/src/license/licenseResolution.ts#L188)*

Reconciles the two payload shapes into one set of terms, or `null` when the payload carries a
term it cannot read — a date that is present but malformed, for instance. Returning `null`
makes the key INVALID, which is what the shipped shape already does for a malformed `exp`;
the alternative, treating an unreadable expiry as "never expires", would turn a minting typo
into a permanent licence.

**Parameters:**

Name | Type | Description |
------ | ------ | ------ |
`data` | [TypedKeyData](interfaces/typedkeydata.md) | the extracted key data  |

**Returns:** *[LicenseTerms](interfaces/licenseterms.md) | null*

___

### matchDateFormat 

▸ **matchDateFormat**(`str`: string): *RegExpExecArray[]*

*Defined in [src/format/parser.ts:39](https://github.com/handsontable/hyperformula/blob/9c22416/src/format/parser.ts#L39)*

**Parameters:**

Name | Type |
------ | ------ |
`str` | string |

**Returns:** *RegExpExecArray[]*

___

### matchNumberFormat 

▸ **matchNumberFormat**(`str`: string): *RegExpExecArray[]*

*Defined in [src/format/parser.ts:55](https://github.com/handsontable/hyperformula/blob/9c22416/src/format/parser.ts#L55)*

**Parameters:**

Name | Type |
------ | ------ |
`str` | string |

**Returns:** *RegExpExecArray[]*

___

### memoize 

▸ **memoize**‹**T**›(`fn`: function): *(Anonymous function)*

*Defined in [src/DateTimeDefault.ts:229](https://github.com/handsontable/hyperformula/blob/9c22416/src/DateTimeDefault.ts#L229)*

Function memoization for improved performance.

**Type parameters:**

▪ **T**

**Parameters:**

▪ **fn**: *function*

▸ (`arg`: string): *T*

**Parameters:**

Name | Type |
------ | ------ |
`arg` | string |

**Returns:** *(Anonymous function)*

___

### movedSimpleCellAddress

▸ **movedSimpleCellAddress**(`address`: [SimpleCellAddress](interfaces/simplecelladdress.md), `toSheet`: number, `toRight`: number, `toBottom`: number): *[SimpleCellAddress](interfaces/simplecelladdress.md)*

*Defined in [src/Cell.ts:205](https://github.com/handsontable/hyperformula/blob/9c22416/src/Cell.ts#L205)*

**Parameters:**

Name | Type |
------ | ------ |
`address` | [SimpleCellAddress](interfaces/simplecelladdress.md) |
`toSheet` | number |
`toRight` | number |
`toBottom` | number |

**Returns:** *[SimpleCellAddress](interfaces/simplecelladdress.md)*

___

### normalizeAddedIndexes 

▸ **normalizeAddedIndexes**(`indexes`: [ColumnRowIndex](globals.md#columnrowindex)[]): *[ColumnRowIndex](globals.md#columnrowindex)[]*

*Defined in [src/Operations.ts:1068](https://github.com/handsontable/hyperformula/blob/9c22416/src/Operations.ts#L1068)*

**Parameters:**

Name | Type |
------ | ------ |
`indexes` | [ColumnRowIndex](globals.md#columnrowindex)[] |

**Returns:** *[ColumnRowIndex](globals.md#columnrowindex)[]*

___

### normalizeRemovedIndexes 

▸ **normalizeRemovedIndexes**(`indexes`: [ColumnRowIndex](globals.md#columnrowindex)[]): *[ColumnRowIndex](globals.md#columnrowindex)[]*

*Defined in [src/Operations.ts:1037](https://github.com/handsontable/hyperformula/blob/9c22416/src/Operations.ts#L1037)*

**Parameters:**

Name | Type |
------ | ------ |
`indexes` | [ColumnRowIndex](globals.md#columnrowindex)[] |

**Returns:** *[ColumnRowIndex](globals.md#columnrowindex)[]*

___

### notifyLicenseKeyState 

▸ **notifyLicenseKeyState**(`state`: [LicenseKeyValidityState](enums/licensekeyvaliditystate.md), `keyValidityDate?`: Date): *void*

*Defined in [src/helpers/licenseKeyValidator.ts:57](https://github.com/handsontable/hyperformula/blob/9c22416/src/helpers/licenseKeyValidator.ts#L57)*

Prints the console message for a non-valid license key state, at most once per page load.

Extracted so the typed-key path in `src/license/licenseResolution.ts` reports the same states
with the same wording and the same once-only behaviour, without duplicating the message table
or getting a second `_notified` flag of its own — two flags would let a page print two
warnings for one key.

**Parameters:**

Name | Type | Description |
------ | ------ | ------ |
`state` | [LicenseKeyValidityState](enums/licensekeyvaliditystate.md) | the state to report; `VALID` prints nothing |
`keyValidityDate?` | Date | - |

**Returns:** *void*

___

### numberFormat 

▸ **numberFormat**(`tokens`: [FormatToken](interfaces/formattoken.md)[], `value`: number): *RawScalarValue*

*Defined in [src/format/format.ts:78](https://github.com/handsontable/hyperformula/blob/9c22416/src/format/format.ts#L78)*

**Parameters:**

Name | Type |
------ | ------ |
`tokens` | [FormatToken](interfaces/formattoken.md)[] |
`value` | number |

**Returns:** *RawScalarValue*

___

### numberToSimpleTime 

▸ **numberToSimpleTime**(`arg`: number): *[SimpleTime](interfaces/simpletime.md)*

*Defined in [src/DateTimeHelper.ts:304](https://github.com/handsontable/hyperformula/blob/9c22416/src/DateTimeHelper.ts#L304)*

**Parameters:**

Name | Type |
------ | ------ |
`arg` | number |

**Returns:** *[SimpleTime](interfaces/simpletime.md)*

___

### objectDestroy 

▸ **objectDestroy**(`object`: any): *void*

*Defined in [src/Destroy.ts:6](https://github.com/handsontable/hyperformula/blob/9c22416/src/Destroy.ts#L6)*

**`license`** 
Copyright (c) 2025 Handsoncode. All rights reserved.

**Parameters:**

Name | Type |
------ | ------ |
`object` | any |

**Returns:** *void*

___

### offsetMonth 

▸ **offsetMonth**(`date`: [SimpleDate](interfaces/simpledate.md), `offset`: number): *[SimpleDate](interfaces/simpledate.md)*

*Defined in [src/DateTimeHelper.ts:286](https://github.com/handsontable/hyperformula/blob/9c22416/src/DateTimeHelper.ts#L286)*

**Parameters:**

Name | Type |
------ | ------ |
`date` | [SimpleDate](interfaces/simpledate.md) |
`offset` | number |

**Returns:** *[SimpleDate](interfaces/simpledate.md)*

___

### padLeft 

▸ **padLeft**(`number`: number | string, `size`: number): *string*

*Defined in [src/format/format.ts:58](https://github.com/handsontable/hyperformula/blob/9c22416/src/format/format.ts#L58)*

**Parameters:**

Name | Type |
------ | ------ |
`number` | number &#124; string |
`size` | number |

**Returns:** *string*

___

### padRight 

▸ **padRight**(`number`: number | string, `size`: number): *string*

*Defined in [src/format/format.ts:66](https://github.com/handsontable/hyperformula/blob/9c22416/src/format/format.ts#L66)*

**Parameters:**

Name | Type |
------ | ------ |
`number` | number &#124; string |
`size` | number |

**Returns:** *string*

___

### parse 

▸ **parse**(`str`: string): *[FormatExpression](interfaces/formatexpression.md)*

*Defined in [src/format/parser.ts:121](https://github.com/handsontable/hyperformula/blob/9c22416/src/format/parser.ts#L121)*

**Parameters:**

Name | Type |
------ | ------ |
`str` | string |

**Returns:** *[FormatExpression](interfaces/formatexpression.md)*

___

### parseDateFormat 

▸ **parseDateFormat**(`dateFormat`: string): *object*

*Defined in [src/DateTimeDefault.ts:206](https://github.com/handsontable/hyperformula/blob/9c22416/src/DateTimeDefault.ts#L206)*

Parses a date format string into a format object.

**Parameters:**

Name | Type |
------ | ------ |
`dateFormat` | string |

**Returns:** *object*

* **dayItem**: *number*

* **itemsCount**: *number*

* **longYearItem**: *number*

* **monthItem**: *number*

* **shortYearItem**: *number*

___

### parseForDateTimeFormat 

▸ **parseForDateTimeFormat**(`str`: string): *[Maybe](globals.md#maybe)‹[FormatExpression](interfaces/formatexpression.md)›*

*Defined in [src/format/parser.ts:96](https://github.com/handsontable/hyperformula/blob/9c22416/src/format/parser.ts#L96)*

**Parameters:**

Name | Type |
------ | ------ |
`str` | string |

**Returns:** *[Maybe](globals.md#maybe)‹[FormatExpression](interfaces/formatexpression.md)›*

___

### parseForNumberFormat 

▸ **parseForNumberFormat**(`str`: string): *[Maybe](globals.md#maybe)‹[FormatExpression](interfaces/formatexpression.md)›*

*Defined in [src/format/parser.ts:109](https://github.com/handsontable/hyperformula/blob/9c22416/src/format/parser.ts#L109)*

**Parameters:**

Name | Type |
------ | ------ |
`str` | string |

**Returns:** *[Maybe](globals.md#maybe)‹[FormatExpression](interfaces/formatexpression.md)›*

___

### parseIsoDate 

▸ **parseIsoDate**(`isoDate`: string, `dateLabel`: string): *[ParsedIsoDate](interfaces/parsedisodate.md)*

*Defined in [src/license/vendor/utils.ts:54](https://github.com/handsontable/hyperformula/blob/9c22416/src/license/vendor/utils.ts#L54)*

Parses the date in the `YYYY-MM-DD` format into its numeric parts and the epoch milliseconds
of its UTC midnight. Throws when the date is malformed or does not exist in the calendar.

**Parameters:**

Name | Type | Description |
------ | ------ | ------ |
`isoDate` | string | the date to parse |
`dateLabel` | string | the date name used in the error message  |

**Returns:** *[ParsedIsoDate](interfaces/parsedisodate.md)*

___

### parseTimeFormat 

▸ **parseTimeFormat**(`timeFormat`: string): *object*

*Defined in [src/DateTimeDefault.ts:186](https://github.com/handsontable/hyperformula/blob/9c22416/src/DateTimeDefault.ts#L186)*

Parses a time format string into a format object.

**Parameters:**

Name | Type |
------ | ------ |
`timeFormat` | string |

**Returns:** *object*

* **hourItem**: *number*

* **itemsCount**: *number*

* **minuteItem**: *number*

* **secondItem**: *number*

___

### postMortem 

▸ **postMortem**(`method`: any): *(Anonymous function)*

*Defined in [src/Destroy.ts:16](https://github.com/handsontable/hyperformula/blob/9c22416/src/Destroy.ts#L16)*

**Parameters:**

Name | Type |
------ | ------ |
`method` | any |

**Returns:** *(Anonymous function)*

___

### readDate 

▸ **readDate**(`value`: unknown): *number | null*

*Defined in [src/license/licenseResolution.ts:130](https://github.com/handsontable/hyperformula/blob/9c22416/src/license/licenseResolution.ts#L130)*

Reads a date that may arrive either as a `YYYY-MM-DD` string or as a numeric timestamp, and
returns it as epoch milliseconds at UTC midnight. Returns `null` when the value is present but
cannot be read — the caller rejects the whole key in that case rather than treating it as
"no expiry", which would silently turn a subscription into a perpetual licence.

Both forms are accepted because key spec rev 5 contradicts itself about them: §1.2 mandates
"bare `YYYY-MM-DD` everywhere, no time component", while §2.1 types the same fields as
`timestamp` and its example payload carries integers.

The string form goes through the vendored [parseIsoDate](globals.md#parseisodate), so it gets the same calendar
round-trip check the shipped shape's `exp` gets: `2027-02-30` is rejected rather than rolling
over into March and quietly granting two extra days.

**Parameters:**

Name | Type | Description |
------ | ------ | ------ |
`value` | unknown | the raw payload value, known not to be `undefined`  |

**Returns:** *number | null*

___

### readDays 

▸ **readDays**(`value`: unknown): *number*

*Defined in [src/license/licenseResolution.ts:157](https://github.com/handsontable/hyperformula/blob/9c22416/src/license/licenseResolution.ts#L157)*

A non-negative integer count of days from a payload field, or `0` when it is absent or not one.

**Parameters:**

Name | Type | Description |
------ | ------ | ------ |
`value` | unknown | the raw payload value  |

**Returns:** *number*

___

### readStrings 

▸ **readStrings**(`value`: unknown): *string[]*

*Defined in [src/license/licenseResolution.ts:166](https://github.com/handsontable/hyperformula/blob/9c22416/src/license/licenseResolution.ts#L166)*

The strings of a payload array field, ignoring anything that is not a non-empty string.

**Parameters:**

Name | Type | Description |
------ | ------ | ------ |
`value` | unknown | the raw payload value  |

**Returns:** *string[]*

___

### releaseDateTimestamp 

▸ **releaseDateTimestamp**(): *number | null*

*Defined in [src/license/licenseResolution.ts:107](https://github.com/handsontable/hyperformula/blob/9c22416/src/license/licenseResolution.ts#L107)*

The build's release date as epoch milliseconds (UTC midnight), or `null` when it is unknown or
malformed.

Read from the same `HT_RELEASE_DATE` (`DD/MM/YYYY`) the legacy validator uses, so a perpetual
typed key and a legacy key agree on what "this build" means.

**Returns:** *number | null*

___

### replacer 

▸ **replacer**(`key`: string, `val`: any): *any*

*Defined in [src/errors.ts:135](https://github.com/handsontable/hyperformula/blob/9c22416/src/errors.ts#L135)*

**Parameters:**

Name | Type |
------ | ------ |
`key` | string |
`val` | any |

**Returns:** *any*

___

### resolveLicense 

▸ **resolveLicense**(`licenseKey`: string): *[ResolvedLicense](interfaces/resolvedlicense.md)*

*Defined in [src/license/licenseResolution.ts:362](https://github.com/handsontable/hyperformula/blob/9c22416/src/license/licenseResolution.ts#L362)*

Resolves a license key into both gates' inputs.

A typed key is recognized first; anything else — `gpl-v3`, a legacy key, an empty string, or
a malformed typed key — falls through to [checkLicenseKeyValidity](globals.md#checklicensekeyvalidity) completely unchanged,
which is what keeps this from touching existing behaviour.

**The invariant this function exists to protect.** Only a VALID typed key resolves to a
restricted entitlement. Every other outcome — missing, invalid, or expired, for a typed key as
much as for a legacy one — resolves to [unrestrictedEntitlement](globals.md#unrestrictedentitlement). That asymmetry is
deliberate and load-bearing: gate A already stops formula evaluation on its own (a bad key
yields `#LIC!` in cells), while gate B additionally makes PR 2's `ensureCapability` throw from
the CRUD API. Letting a bad key restrict the entitlement would turn today's "formulas fail,
the API still works" into "the API throws", which is a silent breaking change for every
existing user whose key lapsed. D3's fail-closed rule governs unrecognized tokens INSIDE an
otherwise valid key; it is not a rule about invalid keys, and conflating the two is exactly
the mistake this comment is here to prevent.

A checksum-valid key whose terms cannot be read is INVALID, not a crash and not a free pass:
every payload field is untrusted, so nothing here may assume a shape.

**Parameters:**

Name | Type | Description |
------ | ------ | ------ |
`licenseKey` | string | the raw `licenseKey` config value  |

**Returns:** *[ResolvedLicense](interfaces/resolvedlicense.md)*

___

### resolveLicensedProduct 

▸ **resolveLicensedProduct**(`payload`: [TypedKeyPayload](interfaces/typedkeypayload.md)): *[LicensedProduct](interfaces/licensedproduct.md) | null*

*Defined in [src/license/vendor/extractKeyData.ts:92](https://github.com/handsontable/hyperformula/blob/9c22416/src/license/vendor/extractKeyData.ts#L92)*

Resolves the licensed product of the payload and derives its expiration time. The expiration
date (`exp`, in the `YYYY-MM-DD` format) is converted to epoch milliseconds (UTC midnight). A
payload without the expiration date (a freemium key) maps to `null`, which means the key never
expires. Returns `null` when the payload does not have the expected shape.

Upstream returns only the timestamp, using `undefined` as its "malformed" sentinel because
`null` already means "never expires"; folding the product name in lets this return one
unambiguous `null` instead.

**Parameters:**

Name | Type | Description |
------ | ------ | ------ |
`payload` | [TypedKeyPayload](interfaces/typedkeypayload.md) | the key payload  |

**Returns:** *[LicensedProduct](interfaces/licensedproduct.md) | null*

___

### roundToEpsilon 

▸ **roundToEpsilon**(`arg`: number, `epsilon`: number): *number*

*Defined in [src/DateTimeHelper.ts:299](https://github.com/handsontable/hyperformula/blob/9c22416/src/DateTimeHelper.ts#L299)*

**Parameters:**

Name | Type | Default |
------ | ------ | ------ |
`arg` | number | - |
`epsilon` | number | 1 |

**Returns:** *number*

___

### roundToNearestSecond 

▸ **roundToNearestSecond**(`arg`: number): *number*

*Defined in [src/DateTimeHelper.ts:295](https://github.com/handsontable/hyperformula/blob/9c22416/src/DateTimeHelper.ts#L295)*

**Parameters:**

Name | Type |
------ | ------ |
`arg` | number |

**Returns:** *number*

___

### sha512 

▸ **sha512**(`bytes`: number[] | Uint8Array): *string*

*Defined in [src/license/vendor/sha512.ts:78](https://github.com/handsontable/hyperformula/blob/9c22416/src/license/vendor/sha512.ts#L78)*

Calculates the SHA-512 checksum of the passed bytes. The implementation is a plain (pure JS)
one on purpose. It does not depend on the Web Crypto API (`crypto.subtle`), which browsers
expose only on secure origins (https). Thanks to that, the checksum can be verified on plain
http:// pages, for example, intranets of big companies.

A second reason applies on HyperFormula's side: `crypto.subtle.digest` is asynchronous, and
the license key is read from `Config`'s constructor, which is not.

**Parameters:**

Name | Type | Description |
------ | ------ | ------ |
`bytes` | number[] &#124; Uint8Array | the bytes to calculate the checksum from  |

**Returns:** *string*

___

### simpleCellAddress

▸ **simpleCellAddress**(`sheet`: number, `col`: number, `row`: number): *[SimpleCellAddress](interfaces/simplecelladdress.md)*

*Defined in [src/Cell.ts:198](https://github.com/handsontable/hyperformula/blob/9c22416/src/Cell.ts#L198)*

**Parameters:**

Name | Type |
------ | ------ |
`sheet` | number |
`col` | number |
`row` | number |

**Returns:** *[SimpleCellAddress](interfaces/simplecelladdress.md)*

___

### simpleCellRange

▸ **simpleCellRange**(`start`: [SimpleCellAddress](interfaces/simplecelladdress.md), `end`: [SimpleCellAddress](interfaces/simplecelladdress.md)): *object*

*Defined in [src/AbsoluteCellRange.ts:43](https://github.com/handsontable/hyperformula/blob/9c22416/src/AbsoluteCellRange.ts#L43)*

**Parameters:**

Name | Type |
------ | ------ |
`start` | [SimpleCellAddress](interfaces/simplecelladdress.md) |
`end` | [SimpleCellAddress](interfaces/simplecelladdress.md) |

**Returns:** *object*

* **end**: *[SimpleCellAddress](interfaces/simplecelladdress.md)*

* **start**: *[SimpleCellAddress](interfaces/simplecelladdress.md)*

___

### simpleColumnAddress

▸ **simpleColumnAddress**(`sheet`: number, `col`: number): *[SimpleColumnAddress](interfaces/simplecolumnaddress.md)*

*Defined in [src/Cell.ts:188](https://github.com/handsontable/hyperformula/blob/9c22416/src/Cell.ts#L188)*

**Parameters:**

Name | Type |
------ | ------ |
`sheet` | number |
`col` | number |

**Returns:** *[SimpleColumnAddress](interfaces/simplecolumnaddress.md)*

___

### simpleRowAddress

▸ **simpleRowAddress**(`sheet`: number, `row`: number): *[SimpleRowAddress](interfaces/simplerowaddress.md)*

*Defined in [src/Cell.ts:179](https://github.com/handsontable/hyperformula/blob/9c22416/src/Cell.ts#L179)*

**Parameters:**

Name | Type |
------ | ------ |
`sheet` | number |
`row` | number |

**Returns:** *[SimpleRowAddress](interfaces/simplerowaddress.md)*

___

### split 

▸ **split**‹**T**›(`iterable`: IterableIterator‹T›): *object*

*Defined in [src/generatorUtils.ts:11](https://github.com/handsontable/hyperformula/blob/9c22416/src/generatorUtils.ts#L11)*

**Type parameters:**

▪ **T**

**Parameters:**

Name | Type |
------ | ------ |
`iterable` | IterableIterator‹T› |

**Returns:** *object*

* **rest**: *IterableIterator‹T›*

* **value**? : *T*

___

### stringToUtf8Bytes 

▸ **stringToUtf8Bytes**(`text`: string): *number[]*

*Defined in [src/license/vendor/utils.ts:92](https://github.com/handsontable/hyperformula/blob/9c22416/src/license/vendor/utils.ts#L92)*

Encodes the string as UTF-8 bytes. The plain implementation is used on purpose. It does not
depend on `TextEncoder` or `Buffer`, so the same code works in Node.js and in every browser,
including plain http:// pages.

**Parameters:**

Name | Type | Description |
------ | ------ | ------ |
`text` | string | the string to encode  |

**Returns:** *number[]*

___

### timeToNumber 

▸ **timeToNumber**(`time`: [SimpleTime](interfaces/simpletime.md)): *number*

*Defined in [src/DateTimeHelper.ts:315](https://github.com/handsontable/hyperformula/blob/9c22416/src/DateTimeHelper.ts#L315)*

**Parameters:**

Name | Type |
------ | ------ |
`time` | [SimpleTime](interfaces/simpletime.md) |

**Returns:** *number*

___

### toBasisEU 

▸ **toBasisEU**(`date`: [SimpleDate](interfaces/simpledate.md)): *[SimpleDate](interfaces/simpledate.md)*

*Defined in [src/DateTimeHelper.ts:319](https://github.com/handsontable/hyperformula/blob/9c22416/src/DateTimeHelper.ts#L319)*

**Parameters:**

Name | Type |
------ | ------ |
`date` | [SimpleDate](interfaces/simpledate.md) |

**Returns:** *[SimpleDate](interfaces/simpledate.md)*

___

### toHex32 

▸ **toHex32**(`value`: number): *string*

*Defined in [src/license/vendor/sha512.ts:63](https://github.com/handsontable/hyperformula/blob/9c22416/src/license/vendor/sha512.ts#L63)*

Converts a 32-bit integer to a zero-padded 8-character hex string.

**Parameters:**

Name | Type | Description |
------ | ------ | ------ |
`value` | number | the 32-bit integer value  |

**Returns:** *string*

___

### truncateDayInMonth 

▸ **truncateDayInMonth**(`date`: [SimpleDate](interfaces/simpledate.md)): *[SimpleDate](interfaces/simpledate.md)*

*Defined in [src/DateTimeHelper.ts:291](https://github.com/handsontable/hyperformula/blob/9c22416/src/DateTimeHelper.ts#L291)*

**Parameters:**

Name | Type |
------ | ------ |
`date` | [SimpleDate](interfaces/simpledate.md) |

**Returns:** *[SimpleDate](interfaces/simpledate.md)*

___

### unrestrictedEntitlement 

▸ **unrestrictedEntitlement**(): *[LicenseEntitlement](interfaces/licenseentitlement.md)*

*Defined in [src/license/LicenseEntitlement.ts:85](https://github.com/handsontable/hyperformula/blob/9c22416/src/license/LicenseEntitlement.ts#L85)*

The unrestricted entitlement: legacy keys and `gpl-v3` resolve to this today.

HF-307 decision D3 (fail-closed, silent) means a typed key whose tokens this library version
does not recognize at all no longer maps here — it resolves to an entitlement with an empty,
silent capability set instead of falling back to unrestricted access. Do not reuse this
function for that case.

**Returns:** *[LicenseEntitlement](interfaces/licenseentitlement.md)*

___

### utf8BytesToString 

▸ **utf8BytesToString**(`bytes`: number[]): *string*

*Defined in [src/license/vendor/utils.ts:136](https://github.com/handsontable/hyperformula/blob/9c22416/src/license/vendor/utils.ts#L136)*

Decodes UTF-8 bytes back into a string.

**Parameters:**

Name | Type | Description |
------ | ------ | ------ |
`bytes` | number[] | the bytes to decode  |

**Returns:** *string*

___

### validateArgToType 

▸ **validateArgToType**(`inputValue`: any, `expectedType`: string, `paramName`: string): *void*

*Defined in [src/ArgumentSanitization.ts:81](https://github.com/handsontable/hyperformula/blob/9c22416/src/ArgumentSanitization.ts#L81)*

**Parameters:**

Name | Type |
------ | ------ |
`inputValue` | any |
`expectedType` | string |
`paramName` | string |

**Returns:** *void*

___

### validateAsSheet 

▸ **validateAsSheet**(`sheet`: [Sheet](globals.md#sheet)): *void*

*Defined in [src/Sheet.ts:33](https://github.com/handsontable/hyperformula/blob/9c22416/src/Sheet.ts#L33)*

**Parameters:**

Name | Type |
------ | ------ |
`sheet` | [Sheet](globals.md#sheet) |

**Returns:** *void*

___

### validateNumberToBeAtLeast 

▸ **validateNumberToBeAtLeast**(`value`: number, `paramName`: string, `minimum`: number): *void*

*Defined in [src/ArgumentSanitization.ts:34](https://github.com/handsontable/hyperformula/blob/9c22416/src/ArgumentSanitization.ts#L34)*

**Parameters:**

Name | Type |
------ | ------ |
`value` | number |
`paramName` | string |
`minimum` | number |

**Returns:** *void*

___

### validateNumberToBeAtMost 

▸ **validateNumberToBeAtMost**(`value`: number, `paramName`: string, `maximum`: number): *void*

*Defined in [src/ArgumentSanitization.ts:40](https://github.com/handsontable/hyperformula/blob/9c22416/src/ArgumentSanitization.ts#L40)*

**Parameters:**

Name | Type |
------ | ------ |
`value` | number |
`paramName` | string |
`maximum` | number |

**Returns:** *void*

___

### validityOf 

▸ **validityOf**(`terms`: [LicenseTerms](interfaces/licenseterms.md)): *object*

*Defined in [src/license/licenseResolution.ts:294](https://github.com/handsontable/hyperformula/blob/9c22416/src/license/licenseResolution.ts#L294)*

Whether an intact typed key is still valid, and if not, the day it stopped being valid.

A key with no expiry never expires. Otherwise the expiration date is INCLUSIVE of its last
valid day, and a grace period extends it further. A date compared against the build's release
date involves no clock at all, which is what keeps an air-gapped install with a wrong system
clock working.

An unknown release date resolves to "not expired", matching what the legacy validator already
does when `HT_RELEASE_DATE` is missing: a build that cannot tell its own age must not start
rejecting keys that customers paid for.

**Parameters:**

Name | Type | Description |
------ | ------ | ------ |
`terms` | [LicenseTerms](interfaces/licenseterms.md) | the reconciled terms of the key  |

**Returns:** *object*

* **expiredOn**? : *Date*

* **state**: *[LicenseKeyValidityState](enums/licensekeyvaliditystate.md)*

## Object literals

### CellValueDetailedType

### ▪ **CellValueDetailedType**: *object*

*Defined in [src/Cell.ts:95](https://github.com/handsontable/hyperformula/blob/9c22416/src/Cell.ts#L95)*

___

### CellValueType

### ▪ **CellValueType**: *object*

*Defined in [src/Cell.ts:92](https://github.com/handsontable/hyperformula/blob/9c22416/src/Cell.ts#L92)*

___

### TIER_TO_CAPABILITY_TOKEN

### ▪ **TIER_TO_CAPABILITY_TOKEN**: *object*

*Defined in [src/license/licenseResolution.ts:43](https://github.com/handsontable/hyperformula/blob/9c22416/src/license/licenseResolution.ts#L43)*

Commercial tier names (the shipped key format) mapped to the capability tokens the library
actually resolves. A tier this map does not know is passed through unchanged, so it surfaces
as an unrecognized capability rather than being silently swallowed.

### crm 

• **crm**: *string* = FUNCTIONS_2_TOKEN

*Defined in [src/license/licenseResolution.ts:45](https://github.com/handsontable/hyperformula/blob/9c22416/src/license/licenseResolution.ts#L45)*

### data_grid 

• **data_grid**: *string* = FUNCTIONS_3_TOKEN

*Defined in [src/license/licenseResolution.ts:46](https://github.com/handsontable/hyperformula/blob/9c22416/src/license/licenseResolution.ts#L46)*

### excel_simulator 

• **excel_simulator**: *string* = FUNCTIONS_4_TOKEN

*Defined in [src/license/licenseResolution.ts:47](https://github.com/handsontable/hyperformula/blob/9c22416/src/license/licenseResolution.ts#L47)*

### freemium 

• **freemium**: *string* = FUNCTIONS_1_TOKEN

*Defined in [src/license/licenseResolution.ts:44](https://github.com/handsontable/hyperformula/blob/9c22416/src/license/licenseResolution.ts#L44)*

___

### consoleMessages

### ▪ **consoleMessages**: *object*

*Defined in [src/helpers/licenseKeyValidator.ts:36](https://github.com/handsontable/hyperformula/blob/9c22416/src/helpers/licenseKeyValidator.ts#L36)*

List of all not valid messages which may occur.

### expired 

▸ **expired**(`__namedParameters`: object): *string*

*Defined in [src/helpers/licenseKeyValidator.ts:38](https://github.com/handsontable/hyperformula/blob/9c22416/src/helpers/licenseKeyValidator.ts#L38)*

**Parameters:**

▪ **__namedParameters**: *object*

Name | Type |
------ | ------ |
`keyValidityDate` | string |

**Returns:** *string*

### invalid 

▸ **invalid**(): *string*

*Defined in [src/helpers/licenseKeyValidator.ts:37](https://github.com/handsontable/hyperformula/blob/9c22416/src/helpers/licenseKeyValidator.ts#L37)*

**Returns:** *string*

### missing 

▸ **missing**(): *string*

*Defined in [src/helpers/licenseKeyValidator.ts:40](https://github.com/handsontable/hyperformula/blob/9c22416/src/helpers/licenseKeyValidator.ts#L40)*

**Returns:** *string*

___

### coreGrant

### ▪ **coreGrant**: *object*

*Defined in [src/license/capabilities.ts:159](https://github.com/handsontable/hyperformula/blob/9c22416/src/license/capabilities.ts#L159)*

### features 

• **features**: *never[]* = []

*Defined in [src/license/capabilities.ts:159](https://github.com/handsontable/hyperformula/blob/9c22416/src/license/capabilities.ts#L159)*

### functions 

• **functions**: *string[]* = [...OPERATOR_FUNCTIONS]

*Defined in [src/license/capabilities.ts:159](https://github.com/handsontable/hyperformula/blob/9c22416/src/license/capabilities.ts#L159)*

___

### functions1Grant

### ▪ **functions1Grant**: *object*

*Defined in [src/license/capabilities.ts:160](https://github.com/handsontable/hyperformula/blob/9c22416/src/license/capabilities.ts#L160)*

### features 

• **features**: *never[]* = []

*Defined in [src/license/capabilities.ts:160](https://github.com/handsontable/hyperformula/blob/9c22416/src/license/capabilities.ts#L160)*

### functions 

• **functions**: *string[]* = [...MATH_ENGINE_FUNCTIONS]

*Defined in [src/license/capabilities.ts:160](https://github.com/handsontable/hyperformula/blob/9c22416/src/license/capabilities.ts#L160)*

___

### functions2Grant

### ▪ **functions2Grant**: *object*

*Defined in [src/license/capabilities.ts:161](https://github.com/handsontable/hyperformula/blob/9c22416/src/license/capabilities.ts#L161)*

### features 

• **features**: *never[]* = []

*Defined in [src/license/capabilities.ts:162](https://github.com/handsontable/hyperformula/blob/9c22416/src/license/capabilities.ts#L162)*

### functions 

• **functions**: *string[]* = [...MATH_ENGINE_FUNCTIONS, ...CALCULATED_FIELDS_FUNCTIONS]

*Defined in [src/license/capabilities.ts:162](https://github.com/handsontable/hyperformula/blob/9c22416/src/license/capabilities.ts#L162)*

___

### functions3Grant

### ▪ **functions3Grant**: *object*

*Defined in [src/license/capabilities.ts:164](https://github.com/handsontable/hyperformula/blob/9c22416/src/license/capabilities.ts#L164)*

### features 

• **features**: *never[]* = []

*Defined in [src/license/capabilities.ts:165](https://github.com/handsontable/hyperformula/blob/9c22416/src/license/capabilities.ts#L165)*

### functions 

• **functions**: *string[]* = [...MATH_ENGINE_FUNCTIONS, ...CALCULATED_FIELDS_FUNCTIONS, ...SPREADSHEET_FUNCTIONS]

*Defined in [src/license/capabilities.ts:165](https://github.com/handsontable/hyperformula/blob/9c22416/src/license/capabilities.ts#L165)*

___

### functions4Grant

### ▪ **functions4Grant**: *object*

*Defined in [src/license/capabilities.ts:167](https://github.com/handsontable/hyperformula/blob/9c22416/src/license/capabilities.ts#L167)*

### features 

• **features**: *never[]* = []

*Defined in [src/license/capabilities.ts:172](https://github.com/handsontable/hyperformula/blob/9c22416/src/license/capabilities.ts#L172)*

### functions 

• **functions**: *string[]* = [
    ...MATH_ENGINE_FUNCTIONS, ...CALCULATED_FIELDS_FUNCTIONS, ...SPREADSHEET_FUNCTIONS,
    ...EXCEL_SIMULATOR_FUNCTIONS,
  ]

*Defined in [src/license/capabilities.ts:168](https://github.com/handsontable/hyperformula/blob/9c22416/src/license/capabilities.ts#L168)*

___

### maxDate

### ▪ **maxDate**: *object*

*Defined in [src/DateTimeHelper.ts:51](https://github.com/handsontable/hyperformula/blob/9c22416/src/DateTimeHelper.ts#L51)*

### day 

• **day**: *number* = 31

*Defined in [src/DateTimeHelper.ts:51](https://github.com/handsontable/hyperformula/blob/9c22416/src/DateTimeHelper.ts#L51)*

### month 

• **month**: *number* = 12

*Defined in [src/DateTimeHelper.ts:51](https://github.com/handsontable/hyperformula/blob/9c22416/src/DateTimeHelper.ts#L51)*

### year 

• **year**: *number* = 9999

*Defined in [src/DateTimeHelper.ts:51](https://github.com/handsontable/hyperformula/blob/9c22416/src/DateTimeHelper.ts#L51)*