0.101  2025-10-13
    [Feature]
    - Added scalars helper mirroring jq's scalars/0 filter to pass through only
      scalar inputs while skipping arrays and objects.
    [Tests]
    - Added regression coverage ensuring scalars() keeps strings, numbers,
      booleans, and nulls while dropping containers.
    [Docs]
    - Documented scalars across README, module POD, and helper listings.

0.100  2025-10-13
    [Feature]
    - Added objects helper mirroring jq's objects/0 filter to pass through only
      hash inputs while skipping scalars and arrays.
    [Tests]
    - Added regression coverage ensuring objects() mirrors jq semantics for
      arrays, scalars, and nested objects.
    [Docs]
    - Documented objects across README, module POD, helper listings, and
      updated MANIFEST.

0.99  2025-10-13
    [Feature]
    - Added arrays helper mirroring jq's arrays/0 filter to pass through only
      array inputs while dropping scalars and objects.
    [Tests]
    - Added regression coverage ensuring arrays() filters pipelines and
      non-array inputs as jq does.
    [Docs]
    - Documented arrays across README, module POD, CLI helper listings, and
      updated MANIFEST.

0.98  2025-10-13
    [Feature]
    - Added rindex(value) helper mirroring jq's rindex/1 to locate the final
      occurrence of a value within arrays (deep comparing elements) or strings.
    [Tests]
    - Added regression coverage ensuring rindex() handles arrays of scalars,
      nested hashes, booleans, empty fragments, and missing values.
    [Docs]
    - Documented rindex() across README, module POD, CLI help listings, and
      updated MANIFEST.

0.97  2025-10-12
    [Feature]
    - Added getpath(path_expr) helper mirroring jq's getpath/1 to retrieve
      values from literal path arrays or dynamically generated paths.
    [Tests]
    - Added regression coverage ensuring getpath handles nested hashes, array
      indices (including negatives), boolean values, and filter-produced paths.
    [Docs]
    - Documented getpath() in README, module POD, CLI helper listings, and
      updated MANIFEST.

0.96  2025-10-12
    [Feature]
    - Added leaf_paths() helper mirroring jq's paths(scalars) traversal to
      emit only terminal key/index chains.
    [Tests]
    - Added regression coverage for leaf_paths() to ensure arrays, objects,
      and scalars produce the correct terminal paths.
    [Docs]
    - Documented leaf_paths() in README, module POD, and CLI helper listings.

0.95  2025-10-12
    [Feature]
    - Added walk(filter) helper to recursively traverse arrays and objects while
      applying jq-compatible filters to every value.
    [Tests]
    - Added regression coverage for walk() to ensure nested scalars and arrays
      are transformed recursively.
    [Docs]
    - Documented walk() across README, POD, and --help-functions listings.

0.94  2025-10-12
    [Feature]
    - Added all([filter]) helper mirroring jq's all/0 and all/1 semantics for
      truthiness checks across arrays and scalars.
    [Tests]
    - Added regression coverage for all() with and without filters, including
      edge cases for empty arrays and scalar inputs.
    [Docs]
    - Documented the new helper across README, POD, and --help-functions
      listings.

0.93  2025-10-12
    [Feature]
    - Added tojson() helper to encode any value as JSON text, mirroring jq's
      tojson/0 behavior and complementing existing tostring(). Documented the
      helper across README, POD, CLI help, and regression tests.
    [Tests]
    - Added regression coverage for tojson() to ensure strings, numbers,
      booleans, nulls, arrays, and objects emit the expected JSON text.
    [Docs]
    - Documented tojson() across README, POD, CLI help listings, and function
      tables alongside existing string helpers.
    - Added delpaths(paths) helper to delete multiple keys or indices using
      jq-compatible path arrays evaluated via arbitrary filters. Updated the
      documentation and regression tests accordingly.

0.92  2025-10-11
    [Feature]
    - Added map_values(filter) helper to transform every value within objects
      using jq-compatible filter semantics, dropping keys when the filter
      yields no result and recursing through arrays of objects. Documented the
      helper across README, POD, CLI help, and regression tests.

0.91  2025-10-11
    [Feature]
    - Added indices(value) helper to emit every index where the supplied value
      occurs within arrays or strings, matching jq's behaviour for substring and
      element searches. Documented the helper across README, POD, CLI help, and
      regression tests.

0.90  2025-10-11
    [Feature]
    - Added any([filter]) helper to mirror jq's any/0 and any/1 behaviour for
      truthiness checks over arrays and scalars, including nested filter
      evaluation. Documented the helper across README, POD, CLI help, and
      regression tests.

0.89  2025-10-11
    [Feature]
    - Added paths() helper to enumerate every nested key/index path in objects,
      arrays, and scalars (empty path) matching jq's behaviour.
    - Documented the helper across README, POD, and regression tests.

0.88  2025-10-11
    [Feature]
    - Added explode() and implode() helpers to convert between strings and
      arrays of Unicode code points, mirroring jq's functions and handling
      nested arrays element-wise.
    - Documented the helpers across README, POD, and regression tests.

0.87  2025-10-11
    [Feature]
    - Added ltrimstr(prefix) and rtrimstr(suffix) helpers to remove literal
      prefixes/suffixes from strings while preserving non-matching values and
      recursively processing arrays.
    - Documented the helpers across README, POD, CLI help, and regression tests.

0.86  2025-10-11
    [Feature]
    - Added range(start; end[, step]) helper to emit numeric sequences matching
      jq's range function, including descending and custom step behavior.
    - Documented the helper across README, POD, CLI help, and regression tests.

0.85  2025-10-11
    [Feature]
    - Added tostring() helper to convert values into their JSON string form,
      matching jq's behavior for scalars, booleans, null, arrays, and objects.
    - Documented the helper across README, POD, CLI help, and regression tests.
    - Added keys_unsorted helper to expose jq's unsorted key traversal for
      objects, along with documentation and regression tests.

0.84  2025-10-11
    [Feature]
    - Added to_entries(), from_entries(), and with_entries(filter) helpers to
      round out jq's entry transformation workflow for objects and arrays.
    - Documented the helpers across README, POD, CLI help, and regression tests.

0.83  2025-10-11
    [Feature]
    - Added median_by(path) helper to compute the median of numeric values
      projected from array elements, mirroring the semantics of median.
    - Documented the helper across README, POD, CLI help, and regression tests.

0.82  2025-10-11
    [Feature]
    - Added percentile(p) helper to compute linear-interpolated percentiles for
      numeric array values.
    - Documented the helper across README, POD, CLI help, and regression tests.

0.81  2025-10-11
    [Feature]
    - Added enumerate() helper to pair array elements with their zero-based
      index for downstream processing.
    - Documented the helper across README, POD, CLI help, and regression tests.
    - Added transpose() helper to pivot arrays-of-arrays from rows into
      columns, truncating to the shortest length for uneven input.

0.80  2025-10-11
    [Feature]
    - Added merge_objects() helper to flatten arrays of hashes into a single
      object using last-write-wins semantics while ignoring non-object entries.
    - Documented the helper across README, POD, CLI help, and regression tests.

0.79  2025-10-11
    [Feature]
    - Added tail(n) helper to return the last N elements from arrays while
      preserving shorter inputs unchanged.
    - Documented the helper across README, POD, CLI help, and regression tests.

0.78  2025-10-11
    [Feature]
    - Added avg_by(path) helper to compute the arithmetic mean of numeric values
      projected from each array item, mirroring the behavior of sum_by.
    - Documented the helper across README, POD, CLI help, and regression tests.

0.77  2025-10-10
    [Feature]
    - Added variance helper to compute the average squared deviation of numeric
      array values.
    - Documented the helper across README, POD, CLI help, and regression tests.

0.76  2025-10-10
    [Feature]
    - Added mode helper to return the most frequent array value with stable
      tie-breaking based on first appearance.
    - Documented the helper across README, POD, CLI help, and regression tests.

0.75  2025-10-09
    [Feature]
    - Added min_by(path) and max_by(path) helpers to select array elements with
      the smallest or largest projected value.
    - Documented the helpers across README, POD, CLI help, and regression tests.

0.74  2025-10-08
    [Feature]
    - Added pick(key1, key2, ...) helper to build objects that only include the
      requested keys, with array-aware behavior for bulk selection.
    - Documented the helper across README, POD, CLI help, and regression tests.

0.73  2025-10-05
    [Feature]
    - Added clamp(min, max) helper to constrain numeric values within an
      inclusive range while leaving non-numeric data untouched.
    - Documented the helper across README, POD, CLI help, and regression tests.

0.72  2025-10-05
    [Feature]
    - Added to_number() helper to coerce numeric-looking strings and booleans
      into Perl numbers while preserving non-numeric values.
    - Documented the helper across README, POD, CLI help, and regression tests.

0.71  2025-10-05
    [Feature]
    - Added has(key) helper to verify object keys and array indexes.
    - Documented the helper across README, POD, CLI help, and regression tests.

0.70  2025-10-05
    [Feature]
    - Added flatten_depth(n) helper to flatten nested arrays up to a specified
      depth while preserving deeper structure.
    - Documented the helper across README, POD, CLI help, and regression tests.

0.69  2025-10-05
    [Feature]
    - Added titlecase() helper to convert scalars and arrays to title case.
    - Documented the helper across README, POD, CLI help, and regression tests.

0.68  2025-10-05
    [Feature]
    - Added sum_by(path) helper to aggregate numeric values from array items.
    - Documented the helper across README, POD, CLI help, and tests.

0.67  2025-10-05
    [Feature]
    - Added flatten_all() helper to recursively flatten nested arrays.
    - Documented the helper across README, POD, CLI help, and tests.

0.66  2025-10-05
    [Feature]
    - Added slice(start[, length]) helper to extract portions of arrays using
      zero-based indices (including support for negative starts).
    - Documented the helper across README, POD, CLI help, and tests.

0.65  2025-10-05
    [Feature]
    - Added index(value) helper to return the first matching index for arrays or
      substring position for scalars.
    - Documented the helper across README, POD, CLI help, and tests.

0.64  2025-10-05
    [Feature]
    - Added chunks(n) helper to split arrays into evenly-sized subarrays.
    - Documented the helper across README, POD, CLI help, and tests.

0.63  2025-10-05
    [Feature]
    - Added drop(n) helper to skip the first N elements of arrays.
    - Documented the helper across README, POD, CLI help, and tests.

0.62  2025-10-05
    [Feature]
    - Added stddev helper to calculate the standard deviation of numeric array
      values.
    - Documented the helper across README, POD, and --help-functions output.
    - Added regression tests covering numeric, mixed, and single-value inputs.

0.61  2025-10-05
    [Feature]
    - Added sort_desc helper to sort arrays in descending order using smart
      numeric/string comparisons.
    - Documented the helper across README, POD, and --help-functions output.
    - Added regression tests covering numeric, string, and numeric-string values.

0.60  2025-10-05
    [Feature]
    - Added unique_by(key) helper to deduplicate arrays based on projected keys.
    - Documented the helper across README, POD, and --help-functions output.
    - Added regression tests covering scalar, object, and nested-key scenarios.

0.59  2025-10-05
    [Feature]
    - Added product helper to multiply numeric array values.
    - Documented the helper across README, POD, and --help-functions output.
    - Extended aggregation tests to cover the new helper.

0.58  2025-10-05
    [Feature]
    - Added sum helper as an alias for add to provide jq-compatible naming.
    - Documented the new helper across README, POD, and --help-functions output.
    - Extended aggregation tests to cover the new function.

0.57  2025-10-04
    [Feature]
    - Added substr(start, length) helper to extract substrings from scalars and
      arrays of strings.
    - Documented the new function in README, POD, and --help-functions output.
    - Added regression tests covering basic usage, negative indices, arrays,
      and null-safe behavior.

0.56  2025-10-04
    [Feature]
    - Added contains() function for substring, array element, and hash key checks.
    - Documented the new helper and covered it with regression tests.

0.55  2025-10-04
    [Feature]
    - Updated length function to return character counts for scalars in addition to
      array elements and hash keys.

0.54  2025-10-04
    - Added round() helper for rounding numbers (and arrays) to the nearest integer.
    - Documented the new function in README, POD, and --help-functions output.
    - Added regression tests covering scalars, nested arrays, and mixed values.

0.53  2025-10-04
    - Added ceil()/floor() helpers for rounding numeric scalars and arrays.
    - Documented the new functions in README, POD, and --help-functions output.
    - Added regression tests for positive/negative values and nested arrays.

0.52  2025-10-04
    - Added split() helper for splitting string values by a literal separator.
    - Documented the new function in README, POD, and --help-functions output.
    - Added regression tests covering scalar strings, nested arrays, and edge cases.

0.51  2025-10-04
    - Added startswith()/endswith() helpers for prefix and suffix checks on
      scalars and arrays of strings.
    - Documented the new functions and listed them in README and --help-functions output.
    - Added regression tests covering scalars, arrays, mixed values, and chained usage.

0.50  2025-10-04
    - Added trim() helper to remove leading/trailing whitespace from strings
      and array elements recursively.
    - Documented the new function and included it in the --help-functions
      listing and README feature table.
    - Added regression tests covering scalar, array, and mixed inputs.

0.49  2025-10-04
    - Added abs() helper to convert numbers (and arrays of numbers) to their
      absolute values.
    - Documented the new function and listed it in --help-functions output.
    - Added regression tests covering scalar and array usage.

0.48  2025-10-04
    - Updated the --help-functions listing to cover every built-in helper.
    - Bumped version number for the 0.48 release.

0.47  2025-10-04
    - Added upper()/lower() helpers for case conversion of scalars and arrays.
    - Documented the new functions and listed them in --help-functions output.
    - Added regression tests covering scalar, array, and pipeline scenarios.

0.46  2025-10-04
    - Added group_count(key) helper to tally grouped results.
    - Documented the new function and added regression tests.

0.45  2025-10-04
    - Added median() aggregation helper with numeric filtering using looks_like_number().
    - Documented the median function and added dedicated tests covering mixed numeric formats.
    - Updated MANIFEST and module documentation for the new release.

0.44  2025-10-04
    - Prepare release for version 0.44.
    - Added standalone LICENSE file and included it in MANIFEST for kwalitee compliance.

0.42  2025-04-28
    - Added new function: default(value)
      * default() returns the specified value if the current value is undef or null.

0.41  2025-04-28
    - Added new function: is_empty()
      * is_empty() returns true if a value is an empty array or an empty object.

0.40  2025-04-28
    - Added new function: path()
      * path() returns the keys of a hash or the indices of an array.
      * Returns an empty string for scalars or null values.
    - Bump version to 0.40

0.39  2025-04-27
    - Added compact() function to remove undef/null values from arrays

0.38  2025-04-27
    - Added del(key) function to delete specific keys from hash objects

0.37  2025-04-27
    - Added nth(n) function to extract the nth element from an array

0.36  2025-04-27
    - Added type() function to determine JSON value type (string, number, boolean, array, object, null)
    - Improved handling of undefined values in type() function
    - Added test file t/type.t

0.35  2025-04-16
    - Added flatten() function to explicitly flatten arrays (equivalent to .[])
    - flatten() performs 1-layer array flattening like jq
    - Added test file t/flatten.t

0.34  2025-04-15
    - Added --help-functions option to display supported built-in functions
    - Added values() function to extract values from hash references
    - Improved MANIFEST handling with MANIFEST.SKIP for cleaner packaging
    - Minor test adjustments and documentation updates

0.33  2025-04-14
    - Added empty() function (compatible with jq, discards all output)
    - Example: .users[] | select(.age > 25) | empty
    - Useful for pipelines where only side effects are needed

0.32  2025-04-13
    - Added support for sort_by(.key) function to sort arrays of objects
      Example: .users | sort_by(.age)
    - Fixed path handling in sort_by() (leading dot now handled correctly)
    - Improved internal comparison logic with _smart_cmp()
    - Added test script t/sort_by.t to verify sort_by() functionality

0.31  2025-04-13
    - Added support for join(", ") function
    - Allows joining array of strings with a custom separator

0.30  2025-04-12
    - Enhanced META information for CPAN Testers and MetaCPAN
    - Added MIN_PERL_VERSION and no_index to Makefile.PL
    - Included bugtracker and repository links

0.29  2025-04-12
    - Added count function to return the number of items in the result set
    - Example: .users | count  → returns array length
              .users[] | select(...) | count → counts matching items
    - Adjusted count logic to treat both arrays and flat result lists properly
    - Added test: t/count.t

0.28  2025-04-12
    - Added group_by(...) function to group arrays by a field
    - Example: .users | group_by(department)
    - Added test: t/group_by.t

0.27  2025-04-12
    - Added support for pipe-style queries using .[] (e.g. .[] | select(...) | .name)
    - Introduced 'flatten' as internal command for .[] handling
    - Improved run_query parsing to better support chained queries with select()
    - Added test: t/pipe_select_name.t

0.26  2025-04-06
    - Improved interactive mode: input prompt is now always displayed at the bottom of the screen
      to avoid being overwritten by JSON output. This improves readability and usability when working
      with large or deeply nested JSON files.

0.25  2025-04-07
    - Added support for aggregation functions:
        * add   - sum of numeric arrays
        * min   - minimum value of numeric arrays
        * max   - maximum value of numeric arrays
        * avg   - average of numeric arrays
    - Improved CLI argument parsing:
        * Queries no longer require a leading dot (e.g. 'map(...)' now works)
        * File arguments are more accurately distinguished from query strings
        * Interactive mode works even without a query when only a JSON file is provided
    - Confirmed compatibility of map(), select(), and arithmetic expressions across CLI and interactive modes
    - All previous features and test cases remain working and fully compatible

0.24  2025-04-06
    - Added support for numeric expressions inside select(), e.g.:
        select(.id + 5 > 20)
    - Enhanced run_query() to evaluate simple arithmetic operations (+, -, *, /, %) in filters
    - Improved CLI query parsing to allow function-style queries like:
        map(select(.id > 10))
      without requiring a leading dot ('.')
    - Verified compatibility with map(), length, sort, and select chaining
    - Added test cases for arithmetic expressions and map/select combinations

0.23  2025-04-06
    - Added support for `map(...)` query syntax.
      Allows jq-style mapping and filtering of arrays, e.g.:
        map(select(.id > 10))
        map(.name)
    - Improved CLI (jq-lite) to accept function-style queries like map(...)
    - Fixed command-line argument parsing to handle non-dot-prefixed queries
    - Added tests for map(select(...)) to verify behavior

0.22  2025-04-06
    - Added test files:
        t/contains.t
        t/first_last.t
        t/friends.t
        t/has.t
        t/limit.t
        t/match_i.t
        t/match.t
        t/reverse.t
        t/sort_unique.t

0.21  2025-04-06
    - Prefer JSON::MaybeXS as the default decoder if available
    - Added support for user-specified decoder module selection including JSON::MaybeXS
    - Updated internal decoder selection logic with fallback to Cpanel::JSON::XS, JSON::XS, and JSON::PP

0.20  2025-04-06
    - Improved POD documentation: Added full CLI and API usage, supported syntax, and examples.
    - Added support for reverse, sort, first, last, unique, and has functions.
    - Added --use and --debug options to jq-lite CLI.
    - Added interactive mode to CLI when no query is provided.
    - Internal refactoring for modular query processing.

0.19  2025-04-06
    - Added support for faster JSON decoding by conditionally using Cpanel::JSON::XS or JSON::XS.
      Falls back to JSON::PP when XS modules are not available.
    - Added --debug option to show which JSON module is being used.
    - Added --use <ModuleName> option to explicitly select JSON parser (e.g. --use JSON::PP).
    - Improved CLI behavior and internal flexibility.

0.18  2025-04-06
    - Moved CLI script from script/jq-lite to bin/jq-lite for MetaCPAN visibility
    - Updated Makefile.PL to include EXE_FILES => ['bin/jq-lite']

0.17  2025-04-05
    - Added --color option to jq-lite CLI script to enable colorized JSON output.
      Keys are cyan, strings green, numbers yellow, and booleans/null magenta.
    - Updated help and usage examples to reflect the new --color option.
    - Improved CLI usability by simplifying option name (from --color-output to --color).

0.16  2025-04-05
    - Added --version (-v) option to the jq-lite CLI script.
      It displays the installed version of JQ::Lite.

0.14  2025-04-05
    - Fixed: --raw-output (-r) now pretty-prints objects and arrays,
             and outputs scalars as plain text, matching jq behavior.
    - Improved: Output formatting now distinguishes between scalars and structures.
    - Updated: Interactive mode preserves output consistency with command-line usage.

0.13  2025-04-05
    - Added real-time interactive mode: users can now type queries character-by-character
      and see results update immediately without pressing Enter.
    - Retains previous valid results on incomplete or invalid query input.
    - Displays full JSON on startup in interactive mode using '.' as default query.
    - Automatically enters interactive mode when reading JSON from STDIN without a query.
    - No non-core modules required: implemented raw terminal mode using 'stty'.

0.12 2025-04-05
    [Enhancement]
    - Added fallback behavior to show help message when jq-lite is executed with no arguments.
      This prevents the script from hanging waiting on STDIN and improves user experience.

0.11  2025-04-05
    - Added interactive mode to jq-lite command-line tool
      * Launches when no query is given
      * Accepts queries from /dev/tty
      * Clears screen before printing each result
      * Supports --raw-output (-r) in interactive mode
    - Improved argument parsing to allow: jq-lite users.json
    - Enhanced usability and documentation in README.md
0.10  2025-03-30
    - Added match operator for regular expressions (e.g. match "Bob")

0.09  2025-03-30
    - Added support for case-insensitive match (e.g. match "bob"i)
    - Added limit(n) operator to restrict number of results

0.08  2025-03-29
    - Added 'has' operator: select(.meta has "key")
    - Added 'first' and 'last' operators for arrays
    - Added 'reverse' operator to reverse array order
    - JQ-compatible enhancements for improved filtering and data navigation

0.07  2025-03-29
    - Removed use of eval in _evaluate_condition for better performance and stability.
    - Refactored _traverse for readability and maintainability.
    - Added support for multi-level array traversal (e.g., .users[].friends[].name).













