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).