Skip to content

Release v2.2.14

Latest

Choose a tag to compare

@github-actions github-actions released this 04 Nov 21:09
· 1 commit to main since this release

Release v2.2.14

Changed

  • Compiled regexes are reused. The same regex literal evaluated again, such as once per element
    under $map, no longer compiles again; each thread keeps up to 256.
  • Updated Rust dependencies: simd-json 0.18.1 → 0.19.0, used by the default simd feature. (#274)
  • The mcp extra now needs Python 3.11 or later. On Python 3.10, pip install 'jsonatapy[mcp]' installs no fastmcp, and jsonatapy mcp says the extra needs 3.11. Its
    dnspython dependency (through email-validator) has no release for 3.10 with the fix for
    GHSA-45c3-73f7-pv4m. The rest of jsonatapy still supports 3.10.

Fixed

  • Object keys are in JavaScript's order: integer-like keys first in ascending order, then the
    rest in insertion order, so $keys({"b":1,"2":2}) is ["2","b"] as in jsonata-js. Python
    callers see it too: a dict an expression builds comes back in that order, while a dict passed
    through untouched is the caller's own object and keeps its order. (#273) Thanks to
    @Sawmonabo for finding this and for the fix.
  • A cancel or a timeout now stops $distinct and $keys part way. Both compare each element
    with every one kept so far, and over a large input that ran to the end before U1003 or D1012 was
    seen. (#272) Thanks to @Sawmonabo for the cancel check; the timeout check followed from it.
  • \d, \w, \s and \b in a regex now mean what they mean in jsonata-js: ASCII digits and
    word characters and ECMAScript's whitespace, so $contains("٣", /\d/) is false. (#271)
    Thanks to @Sawmonabo for finding and fixing this.
  • A regex with the i flag folds case as jsonata-js does, by upper case rather than Unicode
    case folding. The Kelvin sign (U+212A) and the long s (U+017F) match only themselves, so
    $contains("\u212A", /k/i) and /[\w]/i against it are false; ß and ẞ no longer match,
    nor the Ohm and Angstrom signs with ω and å; and characters outside the BMP no longer fold.

Security

  • uv.lock: authlib 1.7.2 → 1.9.1 (seven advisories), joserfc 1.7.3 → 1.7.7
    (GHSA-jpxq-7h8p-2q76, GHSA-9pg5-8c7x-5hfx), and dnspython 2.8.0 → 2.9.0
    (GHSA-45c3-73f7-pv4m), which no longer resolves for Python 3.10 now that the mcp extra needs
    3.11 (see Changed). All three are transitive dependencies of the optional mcp extra, not
    of the published crate or of the wheel, which has no runtime dependencies. Users of the mcp
    extra resolve their own versions and should upgrade these. (#269, #270)

Full commit list: v2.2.13...v2.2.14

Test Suite Compatibility

See the README for the current
reference-suite pass count -- this changelog no longer hardcodes a number here, since a
stale hardcoded count is exactly the kind of bug this project has previously shipped
and had to correct.

Installation

pip install jsonatapy==2.2.14
# Cargo.toml
jsonata-core = "2.2.14"

Verification

import jsonatapy
print(jsonatapy.__version__)  # Should print: 2.2.14