Skip to content

Commit f8e4cc5

Browse files
authored
Merge pull request #9 from handsontable/release/3.2.0
Deploying docs from release/3.2.0
2 parents 96033a7 + 5966ca6 commit f8e4cc5

File tree

572 files changed

+4224
-66103
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

572 files changed

+4224
-66103
lines changed

.eslintignore

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,10 @@ src/interpreter/plugin/3rdparty
1111
*.config.js
1212
karma.*
1313
doc
14-
test/unit/_setupFiles/*.js
14+
test/_setupFiles/*.js
1515

1616
# Auto-generated directories
1717
commonjs
18-
coverage
1918
dist
2019
doc
2120
es

.eslintrc.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ module.exports = {
1515
},
1616
parserOptions: {
1717
tsconfigRootDir: __dirname,
18-
project: './tsconfig.test.json',
18+
project: './tsconfig.json',
1919
createDefaultProgram: true,
2020
},
2121
extends: [

.github/codecov.yml

Lines changed: 0 additions & 14 deletions
This file was deleted.

.github/workflows/performance.yml

Lines changed: 0 additions & 69 deletions
This file was deleted.

.github/workflows/test.yml

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,7 @@ jobs:
3636
3737
- name: Run tests
3838
run: |
39-
npm run test:unit.ci -- --coverage
40-
41-
- name: Upload coverage to Codecov
42-
uses: codecov/codecov-action@6004246f47ab62d32be025ce173b241cd84ac58e # https://github.com/codecov/codecov-action/releases/tag/v1.0.13
43-
env:
44-
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
39+
npm run test:ci
4540
4641
browser-tests:
4742
strategy:

.gitignore

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
.idea/
22
.vscode
33
/commonjs/
4-
/coverage/
54
/dist/
65
/doc/
76
/docs/api/

CHANGELOG.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,20 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
77

88
## [Unreleased]
99

10+
## [3.2.0] - 2026-02-19
11+
12+
### Added
13+
14+
- Added a new function: IRR. [#1591](https://github.com/handsontable/hyperformula/issues/1591)
15+
- Added a new function: N. [#1585](https://github.com/handsontable/hyperformula/issues/1585)
16+
- Added a new function: VALUE. [#1592](https://github.com/handsontable/hyperformula/issues/1592)
17+
18+
### Fixed
19+
20+
- Fixed `Error Map maximum size exceeded` error when loading big spreadsheets. [#1602](https://github.com/handsontable/hyperformula/issues/1602)
21+
22+
## [3.1.1] - 2025-12-18
23+
1024
### Fixed
1125

1226
- Fixed an issue where cells were not recalculated after adding, removing and renaming sheets. [#1116](https://github.com/handsontable/hyperformula/issues/1116)

CLAUDE.md

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
# CLAUDE.md
2+
3+
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
4+
5+
## Project Overview
6+
7+
HyperFormula is a headless spreadsheet engine written in TypeScript. It parses and evaluates Excel-compatible formulas and can run in browser or Node.js environments. The library implements ~400 built-in functions with support for custom functions, undo/redo, CRUD operations, and i18n (17 languages).
8+
9+
## Build & Development Commands
10+
11+
```bash
12+
npm install # Install dependencies
13+
npm run compile # TypeScript compilation to lib/
14+
npm run bundle-all # Full build: compile + bundle all formats
15+
npm run lint # Run ESLint
16+
npm run lint:fix # Auto-fix lint issues
17+
```
18+
19+
## Testing
20+
21+
```bash
22+
npm test # Full suite: lint + unit + browser + compatibility
23+
npm run test:unit # Jest unit tests only
24+
npm run test:watch # Jest watch mode (run tests on file changes)
25+
npm run test:coverage # Unit tests with coverage report
26+
npm run test:browser # Karma browser tests (Chrome/Firefox)
27+
npm run test:performance # Run performance benchmarks
28+
npm run test:compatibility # Excel compatibility tests
29+
```
30+
31+
Test files are located in `test/unit/` and follow the pattern `*.spec.ts`.
32+
33+
## Architecture
34+
35+
### Core Components
36+
37+
- **`src/HyperFormula.ts`** - Main engine class, public API entry point
38+
- **`src/parser/`** - Formula parsing using Chevrotain parser generator
39+
- **`src/interpreter/`** - Formula evaluation engine
40+
- **`src/DependencyGraph/`** - Cell dependency tracking and recalculation order
41+
- **`src/CrudOperations.ts`** - Create/Read/Update/Delete operations on sheets and cells
42+
43+
### Function Plugins (`src/interpreter/plugin/`)
44+
45+
All spreadsheet functions are implemented as plugins extending `FunctionPlugin`. Each plugin:
46+
- Declares `implementedFunctions` static property mapping function names to metadata
47+
- Uses `runFunction()` helper for argument validation, coercion, and array handling
48+
- Registers function translations in `src/i18n/languages/`
49+
50+
To add a new function:
51+
1. Create or modify a plugin in `src/interpreter/plugin/`
52+
2. Add function metadata to `implementedFunctions`
53+
3. Implement the function method
54+
4. Add translations to all language files in `src/i18n/languages/`
55+
5. Add tests in `test/unit/interpreter/`
56+
57+
### i18n (`src/i18n/languages/`)
58+
59+
Function name translations for each supported language. When adding new functions, translations can be found at:
60+
- https://support.microsoft.com/en-us/office/excel-functions-translator-f262d0c0-991c-485b-89b6-32cc8d326889
61+
- http://dolf.trieschnigg.nl/excel/index.php
62+
63+
## Output Formats
64+
65+
The build produces multiple output formats:
66+
- `commonjs/` - CommonJS modules (main entry)
67+
- `es/` - ES modules (.mjs files)
68+
- `dist/` - UMD bundles for browsers
69+
- `typings/` - TypeScript declaration files
70+
71+
## Contributing Guidelines
72+
73+
- Create feature branches, never commit directly to master
74+
- Target the `develop` branch for pull requests
75+
- Add tests for all changes in `test/` folder
76+
- Run linter before submitting (`npm run lint`)
77+
- Maintain compatibility with Excel and Google Sheets behavior
78+
- In documentation, commit messages, pull request descriptions and code comments, do not mention Claude Code nor LLM models used for code generation
79+
80+
## Response Guidelines
81+
82+
- By default speak ultra-concisely, using as few words as you can, unless asked otherwise.
83+
- Focus solely on instructions and provide relevant responses.
84+
- Ask questions to remove ambiguity and make sure you're speaking about the right thing.
85+
- Ask questions if you need more information to provide an accurate answer.
86+
- If you don't know something, simply say, "I don't know," and ask for help.
87+
- Present your answer in a structured way, use bullet lists, numbered lists, tables, etc.
88+
- When asked for specific content, start the response with the requested info immediately.
89+
- When answering based on context, support your claims by quoting exact fragments of available documents.
90+
91+
## Code Style
92+
93+
- When generating code, prefer functional approach whenever possible (in JS/TS use filter, map and reduce functions).
94+
- Make the code self-documenting. Use meaningfull names for classes, functions, valiables etc. Add code comments only when necessary.
95+
- Add jsdocs to all classes and functions.

Makefile

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,7 @@ setup: ## Setup project
77
compile: ## Compile to javascript
88
@npm run compile
99

10-
test: ## Run tests
11-
@npm run test
12-
13-
unit: ## Run unit tests
14-
@npm run test:unit
10+
check: typecheck lint ## Check whether code is working correctly (types + lint)
1511

1612
test-ci: ## Separate test configuration for CI environment
1713
@npm run test
@@ -26,9 +22,6 @@ lint: ## Show linting errors
2622
lint-fix: ## Fix linting errors
2723
@npm run lint:fix
2824

29-
coverage: ## Run tests and show coverage
30-
@npm run test:coverage
31-
3225
doc: ## Generate documentation
3326
@npm run typedoc:build
3427

@@ -65,6 +58,6 @@ verify-production-licenses:
6558
help: ## Show all make commands
6659
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
6760

68-
.PHONY: test coverage benchmark doc servedoc
61+
.PHONY: test doc servedoc
6962

7063
.DEFAULT_GOAL := help

README.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,16 @@
2222

2323
---
2424

25+
> 🚀 **We're hiring!** Join HyperFormula team as a **Senior Software Engineer**. [See the role and apply](https://handsontable.traffit.com/public/an/4b09e1395bf8ea42ef86db4c4657992c2f48673d).
26+
2527
HyperFormula is a headless spreadsheet built in TypeScript, serving as both a parser and evaluator of spreadsheet formulas. It can be integrated into your browser or utilized as a service with Node.js as your back-end technology.
2628

2729
## What HyperFormula can be used for?
30+
2831
HyperFormula doesn't assume any existing user interface, making it a general-purpose library that can be used in various business applications. Here are some examples:
2932

33+
- Deterministic compute layer for AI & LLMs
34+
- Calculated fields in CRM and ERP software
3035
- Custom spreadsheet-like app
3136
- Business logic builder
3237
- Forms and form builder

0 commit comments

Comments
 (0)