Skip to content

Latest commit

 

History

History
175 lines (142 loc) · 9.6 KB

CHANGELOG.md

File metadata and controls

175 lines (142 loc) · 9.6 KB

Changelog

2.1.0

  • Added the RFC 9535 length(), count(), match(), search(), and value() function extensions.
  • Added a dedicated expression parser and static type checker for function expressions; malformed and ill-typed expressions are rejected without evaluating user-controlled PHP code.
  • Added checked RFC 9485 I-Regexp support for full-string and substring matching, with PCRE resource limits.

2.0.0

🔻 Breaking changes ahead:

  • Aligned every current result with the JSONPath comparison consensus or majority.
  • Tightened selector parsing so malformed or ambiguous syntax is rejected instead of being interpreted as another query. This removes unquoted bracket members, quoted dot members, empty selectors, incomplete recursive descent, script expressions, mixed wildcard/filter unions, and synthetic .length handling.
  • Restricted filter operators to portable comparisons (==, !=, <, <=, >, >=) and logical expressions; legacy single/strict equality, regex, membership, arithmetic, literal-only truth tests, array/object comparison literals, and function-like expressions are now unsupported.
  • Fixed filters over objects to return node lists, added descendant and nested-filter existence tests, distinguished missing nodes from JSON null, and corrected missing-member/path-to-path comparisons.
  • Lowered the minimum PHP version from 8.5 to the verified PHP 8.3 floor and expanded CI to PHP 8.3 through 8.6, including the PHP 8.6 nightly.
  • Kept the PHPUnit suite at 100% class, method, and line coverage for the stricter behavior.

1.0.2

  • Fixed tokenizer handling for quoted bracket keys containing $ so literals like ['[$the.size$]'] remain atomic and do not split into root tokens.

1.0.1

  • Aligned the query runner and lexer with the JSONPath comparison suite: JSON documents are now decoded as objects to preserve {} vs [], unsupported selectors no longer abort the runner, and dot-notation now accepts quoted keys with dots/spaces/leading @.
  • Hardened filter parsing: boolean-only filters (?(true|false|null)), literal short-circuiting (&& false, || true), and empty filters now return the expected collections instead of throwing.
  • Slice filters gracefully skip non-countable objects.

1.0.0

  • Rebuilt the test suite from scratch: removed bulky baseline fixtures and added compact unit/integration coverage for every filter (index, union, query, recursive, slice), lexer edge cases, and JSONPath core helpers. Runs reflection-free and deprecation-free.
  • Achieved and enforced 100% code coverage across AccessHelper, all filters, lexer, tokens, and JSONPath core while keeping phpstan and coding standards clean.
  • Added a lightweight manual query runner with curated examples to exercise selectors quickly without external datasets.
  • Major compatibility push toward the unofficial JSONPath standard: unions support slices/queries/wildcards, trailing commas parse correctly, negative indexes and bracket-escaped keys (quotes, brackets, wildcards, special chars) are honored, filters compare path-to-path and root references, equality/deep-equality/regex/in/nin semantics align with expectations, and null existence/value handling follows RFC behavior.
  • New feature highlights from this cycle:
    • Multi-key unions with and without quotes: $[name,year] and $["name","year"].
    • Robust bracket notation for special/escaped keys, including ']', '*', $, backslashes, and mixed punctuation.
    • Trailing comma support in unions/slices (e.g. $..books[0,1,2,]).
    • Negative index handling aligned with spec (short arrays return empty; -1 works where valid).
    • Filter improvements: path-to-path/root comparisons, deep equality across scalars/objects/arrays/null/empties, regex matching, in/nin/!in, tautological expressions, and ?@ existence behavior per RFC.
    • Unions combining slices/queries/wildcards now return complete results (e.g. $[1:3,4], $[*,1]).

0.11.0

🔻 Breaking changes ahead:

  • Dropped support for PHP < 8.5
  • JSONPathToken now uses a TokenType enum and the constructor signature changed accordingly.
  • JSONPath options flag is now an int bitmask (was bool), requiring callers to pass integer flags.
  • SliceFilter returns an empty result for non-positive step values (previously iterated indefinitely).
  • QueryResultFilter now throws a JSONPathException for unsupported operators instead of silently proceeding.
  • Access helper behavior is stricter: arrayValues throws on invalid types; ArrayAccess lookups check offsetExists before reading; traversables and objects are handled distinctly.
  • Adopted PHP 8.5 features: TokenType enum, readonly value object for tokens, typed flags/options, and #[\Override] usage.
  • CI now runs on PHP 8.5 with required extensions; code style workflow updated accordingly.
  • Added coverage for AccessHelper edge cases (magic getters, ArrayAccess, traversables, negative indexes), QueryResultFilter arithmetic branches, and SliceFilter negative/null bounds.
  • Fixed empty-expression handling in lexer and improved safety in AccessHelper traversable lookups.
  • Added PHPStan static analysis to the toolchain and addressed its findings.

0.10.1

  • Fixed ignore whitespace after comparison value in filter expression

0.10.0

  • Fixed query/selector Filter Expression With Current Object
  • Fixed query/selector Filter Expression With Different Grouped Operators
  • Fixed query/selector Filter Expression With equals_on_array_of_numbers
  • Fixed query/selector Filter Expression With Negation and Equals
  • Fixed query/selector Filter Expression With Negation and Less Than
  • Fixed query/selector Filter Expression Without Value
  • Fixed query/selector Filter Expression With Boolean AND Operator (#42)
  • Fixed query/selector Filter Expression With Boolean OR Operator (#43)
  • Fixed query/selector Filter Expression With Equals (#45)
  • Fixed query/selector Filter Expression With Equals false (#46)
  • Fixed query/selector Filter Expression With Equals null (#47)
  • Fixed query/selector Filter Expression With Equals Number With Fraction (#48)
  • Fixed query/selector Filter Expression With Equals true (#50)
  • Fixed query/selector Filter Expression With Greater Than (#52)
  • Fixed query/selector Filter Expression With Greater Than or Equal (#53)
  • Fixed query/selector Filter Expression With Less Than (#54)
  • Fixed query/selector Filter Expression With Less Than or Equal (#55)
  • Fixed query/selector Filter Expression With Not Equals (#56)
  • Fixed query/selector Filter Expression With Value (#57)
  • Fixed query/selector script_expression (Expected test result corrected)
  • Added additional NULL related query tests from JSONPath RFC

0.9.0

🔻 Breaking changes ahead:

  • Dropped support for PHP < 8.1

0.8.3

  • Change getData() so that it can be mixed instead of array

0.8.2

  • AccessHelper & RecursiveFilter now return a plain object, rather than an ArrayAccess object

0.8.1

  • Removed strict_types
  • Applied some PSR-12 related changes
  • Small code optimizations

0.8.0

🔻 Breaking changes ahead:

  • Dropped support for PHP < 8.0
  • Removed deprecated method JSONPath->data()

0.7.5

  • Added support for $.length
  • Added trim to explode to support both 1,2,3 and 1, 2, 3 inputs
  • Dropped in_array strict equality check to be in line with the other standard equality checks such as (== and !=)

0.7.4

  • Removed PHPUnit from conflicting packages

0.7.3

  • Fixed PHP 7.4+ compatibility issues

0.7.2

  • Fixed query/selector "Array Slice With Start Large Negative Number And Open End On Short Array" (#7)
  • Fixed query/selector "Union With Keys" (#22)
  • Fixed query/selector "Dot Notation After Union With Keys" (#15)
  • Fixed query/selector "Union With Keys After Array Slice" (#23)
  • Fixed query/selector "Union With Keys After Bracket Notation" (#24)
  • Fixed query/selector "Union With Keys On Object Without Key" (#25)

0.7.1

  • Fixed issues with empty tokens ([''] and [""])
  • Fixed TypeError in AccessHelper::keyExists
  • Improved QueryTest

0.7.0

🔻 Breaking changes ahead:

  • Made JSONPath::__construct final
  • Added missing type hints
  • Partially reduced complexity
  • Performed some code optimizations
  • Updated composer.json for proper PHPUnit/PHP usage
  • Added support for regular expression operator (=~)
  • Added QueryTest to perform tests against all queries from https://cburgmer.github.io/json-path-comparison/
  • Switched Code Style from PSR-2 to PSR-12

0.6.4

  • Removed unnecessary type casting, that caused problems under certain circumstances
  • Added support for nin operator
  • Added support for greater than or equal operator (>=)
  • Added support for less or equal operator (<=)

0.6.3

  • Added support for in operator
  • Fixed evaluation on indexed object

0.6.x

  • Dropped support for PHP < 7.1
  • Switched from (broken) PSR-0 to PSR-4
  • Updated PHPUnit to 8.5 / 9.4
  • Updated tests
  • Added missing PHPDoc blocks
  • Added return type hints
  • Moved from Travis to GitHub actions
  • Set strict_types=1

0.5.0

  • Fixed the slice notation (e.g. [0:2:5] etc.). Breaks code relying on the broken implementation

0.3.0

  • Added JSONPathToken class as value object
  • Lexer clean up and refactor
  • Updated the lexing and filtering of the recursive token ("..") to allow for a combination of recursion and filters, e.g. $..[?(@.type == 'suburb')].name

0.2.1 - 0.2.5

  • Various bug fixes and clean up

0.2.0

  • Added a heap of array access features for more creative iterating and chaining possibilities

0.1.x

  • Init