96 Commits

Author SHA1 Message Date
Jos de Jong
b15904ff0b
fix: #3579 conditional parsed as optional chaining (#3584) 2025-11-05 12:21:55 +01:00
anslem chibuike
89ed9add18
fix: issues with the optional chaining operator: disallow double dot ?.., allow optional function calls, throw errors on invalid uses of ?. (#3585) 2025-11-05 09:39:46 +01:00
NilsDietrich
48ba6adbca
feat: support for optional chaining object?.key (#3547) 2025-10-29 11:07:52 +01:00
Richard Taylor
92152117f5
Fix: don't throw exception when filter/map/forEach an empty array (#3567)
Removes out-of-bounds access to first element in optimizeCallback when
  the provided array/matrix is empty. Also adds numerous unit tests for such
  edge cases, and fixes a previously unreported internal bug in SparseMatrix,
  violating its own invariants on empty matrices.

  Resolves #3564.
---------

Co-authored-by: Glen Whitney <glen@studioinfinity.org>
2025-10-27 00:39:35 -07:00
Jos de Jong
302ed812e1
fix: #3529 change function size to always return an Array (#3535) 2025-10-09 10:33:15 +02:00
Jos de Jong
1e3c2a99aa Merge branch 'develop' into v15
# Conflicts:
#	HISTORY.md
2025-09-24 11:25:19 +02:00
Ikem
0b84ce264d
feat: add nullish coalescing operator support (#3497)
Resolves #3353.

* test: enhance nullish coalescing tests for arrays, matrices, and conditional expressions

* docs: add nullish coalescing operator precedence details and update syntax documentation
---------

Co-authored-by: Jos de Jong <wjosdejong@gmail.com>
Co-authored-by: Glen Whitney <glen@studioinfinity.org>
2025-09-17 19:49:15 -04:00
David Contreras
10602fdbfd
feat: matrix subset according to type of input (#3485) 2025-07-16 10:40:13 +02:00
Jos de Jong
6b3b722140 chore: update unit test 2025-07-11 12:09:49 +02:00
Jos de Jong
311485f478 Merge remote-tracking branch 'origin/v15' into v15
# Conflicts:
#	AUTHORS
#	HISTORY.md
#	src/expression/parse.js
#	test/unit-tests/expression/parse.test.js
2025-07-11 11:54:30 +02:00
Jos de Jong
ba88f47be9
fix: #3421 require a space or delimiter after hex, bin, and oct values (#3463) 2025-07-11 11:47:13 +02:00
Glen Whitney
b44172bae9
fix: #3501 parse % as unary only when not followed by a term (#3505) 2025-07-04 16:26:25 +02:00
Kip Robinson
9aad1a043e feat: give unary % operator (percentage) higher precedence than binary % operator (modulus) (#3432) 2025-07-03 13:32:32 -07:00
Jos de Jong
8e76654c7f Merge branch 'develop' into v15
# Conflicts:
#	AUTHORS
#	HISTORY.md
2025-06-04 10:45:11 +02:00
Don McCurdy
f3587d8634
fix #2199: parse non breaking white space &nbsp; as white space (#3487) 2025-06-04 09:42:37 +02:00
Jos de Jong
943141893a fix: add embedded docs for the deprecated physical constant coulomb, see #3472 2025-05-29 10:13:43 +02:00
Jos de Jong
123d4aac9d fix: #3472 rename physical constant coulomb to coulombConstant 2025-05-28 16:45:24 +02:00
Carl Osterwisch
bec75ed18a
fix: correctly parse (lbf in) (#3476) 2025-05-21 15:12:52 +02:00
David Contreras
f9cb08d77e
feat: define embedded docs for compile, evaluate, parse, and parser, and add test for the examples in embedded docs (#3413) 2025-04-25 17:12:25 +02:00
Kip Robinson
5a27c11445
feat: give unary % operator (percentage) higher precedence than binary % operator (modulus) (#3432) 2025-04-16 16:26:48 +02:00
aitee
b5773df3c0
fix: nthRoots latexFunctions template string (#3427) 2025-03-26 19:00:52 +01:00
Jos de Jong
e5bb6465a9
fix: #3422 parse dot operators after an implicit multiplication with symbol E (#3425) 2025-03-19 09:23:09 -07:00
Glen Whitney
127ea626fc
feat: #3041, #3340 rename apply to mapSlices (#3357)
* chore: Rename `apply` to `mapSlices`

  This renaming conforms with the Julia name for the function formerly
  called `apply`, and allows it to be called from the expression parser.
  The previous name `apply` is kept as an alias for `mapSlices`, for
  backward compatibility. This commit implements an `alias` metadata
  property for function factories to facilitate the `apply` alias for
  `mapSlices`.

  As a separate bonus, this PR corrects several typos in function docs
  and removes now-passing doc tests from the list of "known failing" doc
  tests to get down to 45 known failures and 136 total issues in doc tests.
  (Most of the excess of 136 as compared to 45 are just due to roundoff
  error/slight inaccuracy of what the documentation claims the result will
  be and the actual result returned by mathjs. When the 45 are eliminated,
  a reasonable numeric tolerance can be decided on for doc testing and
  then the doc tests can be made binding rather than advisory.

* refactor: changes per PR review

---------

Co-authored-by: Jos de Jong <wjosdejong@gmail.com>
2025-01-30 13:19:23 +01:00
Glen Whitney
1a85b8796a
fix: #3360 add bigint support to matrix indices and ranges (#3361)
* fix: Accept bigints as matrix indices and range params, demoting to number

* feat: bigint support in range(), clarify demotion in Range()

* feat: range() support Fraction, better errors for single non-string argument

---------

Co-authored-by: Jos de Jong <wjosdejong@gmail.com>
2025-01-30 13:07:24 +01:00
Jos de Jong
b5d635e5b8
fix: #3342 hexadecimal input not turned into a bigint (#3348) 2025-01-24 10:40:01 +01:00
Jos de Jong
1354f5d601 chore: cleanup temporary test again 2024-12-13 14:44:43 +01:00
Jos de Jong
ad27e77fd0 chore: test CI outputs when a test is failing 2024-12-13 14:41:12 +01:00
Jos de Jong
6cf8a2744c Merge branch 'develop' into v14 2024-11-13 10:16:33 +01:00
Neeraj Kumawat
f6a065718b
fix: #1455 implicit multiplication of a fraction with unit 'in' is incorrect (#3315) 2024-11-13 08:47:19 +01:00
Neeraj Kumawat
d0f8b2b800
fix: #3301 precedence of % (mod) is higher than * and / (#3311) 2024-11-07 12:08:35 +01:00
Neeraj Kumawat
eb5e4932c1
fix #3290: should validate variables names in the method Parser.set (#3308)
Co-authored-by: Jos de Jong <wjosdejong@gmail.com>
2024-11-06 17:41:50 +01:00
Jos de Jong
aa6f41be99 fix: Index.dimension(dim) accepting non-numeric input 2024-11-04 10:54:58 +01:00
Jos de Jong
fb76ac419d fix: #3267 implicit multiplication with a negative number and unit in 2024-09-18 11:08:29 +02:00
Jos de Jong
ed2cce4d17
fix: various security vulnerabilities (#3255)
* fix: disable parser functions in the CLI (security issue)

* fix: ensure `ObjectWrappingMap` doesn't allow deleting unsafe properties (security issue)

* fix: enable using methods and (safe) properties on plain arrays

* docs: update the "Less vulnerable expression parser" section in the docs

* chore: fix typos and linting issues

* chore: keep functions like `simplify` enabled in the CLI

* docs: update the security page

* fix: ensure `ObjectWrappingMap.keys` cannot list unsafe properties

* fix: when overwriting a rawArgs function with a non-rawArgs function it was still called with raw arguments

* docs: fix a typo
2024-08-27 16:42:46 +02:00
Jos de Jong
a1eec936fc
feat: export util functions for maps and improve documentation of scope (#3243)
* feat: export util functions `isMap`, `isPartitionedMap`, and `isObjectWrappingMap` and improve the documentation of `scope` (see #3150)

* chore: fix broken unit tests

* docs: refine the explanation about scopes
2024-08-01 10:57:23 +02:00
David Contreras
cf24943d4c
feat: add matrix datatypes in more cases (#3235) 2024-07-30 19:48:19 +02:00
Jos de Jong
ab3461d484
feat: implement support for bigint (#3207, #2737) 2024-05-31 12:43:09 +02:00
Jos de Jong
1f05a35d68
chore: convert CJS files to ESM (#3204) 2024-05-22 08:46:14 +02:00
Jos de Jong
50b15a751d fix #3163: toTex wrongly returning Infinity for large BigNumbers 2024-02-23 11:20:17 +01:00
David Contreras
065b3ae4e8
feat: trailing commas in matrices (#3154) 2024-02-15 13:35:19 +01:00
Jos de Jong
5a4f60fdf6
Fix not being able to use and and or inside a function definition (#3150)
* chore: write unit tests using `and` and `or` inside a function definition (WIP)

* fix: #3143 fix scope issues in rawArgs functions by implementing a `PartitionedMap`

* fix: add more unit tests for `ObjectWrappingMap`

* fix: don't let `ObjectWrappingMap` and `PartitionedMap` extend `Map` (risk of having non-overwritten methods)

* docs: update docs about `rawArgs` functions
2024-02-08 09:53:21 +01:00
Jos de Jong
a9dd8e7d5c fix: #3141 help(config) altering the actual config when evaluating the examples 2024-02-01 11:09:02 +01:00
Jos de Jong
a6cc8e7128 fix: #3109 method Node.toHTML not accepting a custom handler 2023-12-20 12:37:34 +01:00
Jos de Jong
7e9ff612a0
feat: lazy evaluation of and, or, &, | (#3101, #3090)
* If fn has rawArgs set, pass unevaluated args

* Add shared helper function for evaluating truthiness

* Add and & or transform functions for lazy evaluation

* Add lazy evaluation of bitwise & and | operators

* Add unit tests for lazy evaluation

* Add lazy evaluation note to docs

* Move documentation to Syntax page

* Replace `testCondition()` with test evaluation
of logical function itself

* Use `isCollection()` to simplify bitwise transform functions

* fix: do not copy scope in raw OperatorNode, test lazy operators scope

* fix: linting issues

---------

Co-authored-by: Brooks Smith <brooks.smith@clearcalcs.com>
2023-12-08 16:17:44 +01:00
Jos de Jong
3d84b5b594 fix #3092: a typo in an error message when converting a string into a number 2023-11-09 09:25:43 +01:00
Jos de Jong
3030c6b23f Merge branch 'develop' into v12
# Conflicts:
#	HISTORY.md
2023-10-26 10:50:07 +02:00
Jos de Jong
d1c4a56a8e
Fix: #3073 escaping in strings (#3082)
* chore: refactor parsing strings to not rely on `JSON.parse`

* fix: #3073 function `format` not escaping control characters and double quotes in strings

* chore: add more unit tests
2023-10-25 13:37:53 +02:00
Jos de Jong
c19c15f0c1 fix: change toTex variable and function assignment from := to = (see #2980, #3032) 2023-10-11 16:15:55 +02:00
Jos de Jong
8ecf3265fc fix: #2027 cannot use named operators like to or mod as property name 2023-10-11 14:42:03 +02:00
Jos de Jong
ac9052d3e8 fix: #3073 parsing quotes inside a string 2023-10-11 12:31:39 +02:00