jsonatapy 2.2.9__tar.gz → 2.2.10__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. {jsonatapy-2.2.9 → jsonatapy-2.2.10}/CHANGELOG.md +46 -0
  2. jsonatapy-2.2.10/CONTRIBUTORS.md +2 -0
  3. {jsonatapy-2.2.9 → jsonatapy-2.2.10}/Cargo.lock +13 -13
  4. {jsonatapy-2.2.9 → jsonatapy-2.2.10}/Cargo.toml +1 -1
  5. {jsonatapy-2.2.9 → jsonatapy-2.2.10}/PKG-INFO +27 -6
  6. {jsonatapy-2.2.9 → jsonatapy-2.2.10}/README.md +26 -5
  7. jsonatapy-2.2.10/SECURITY.md +47 -0
  8. {jsonatapy-2.2.9 → jsonatapy-2.2.10}/pyproject.toml +1 -1
  9. {jsonatapy-2.2.9 → jsonatapy-2.2.10}/.gitignore +0 -0
  10. {jsonatapy-2.2.9 → jsonatapy-2.2.10}/.gitmodules +0 -0
  11. {jsonatapy-2.2.9 → jsonatapy-2.2.10}/.serena/.gitignore +0 -0
  12. {jsonatapy-2.2.9 → jsonatapy-2.2.10}/.serena/memories/architecture.md +0 -0
  13. {jsonatapy-2.2.9 → jsonatapy-2.2.10}/.serena/memories/conventions.md +0 -0
  14. {jsonatapy-2.2.9 → jsonatapy-2.2.10}/.serena/memories/core.md +0 -0
  15. {jsonatapy-2.2.9 → jsonatapy-2.2.10}/.serena/memories/memory_maintenance.md +0 -0
  16. {jsonatapy-2.2.9 → jsonatapy-2.2.10}/.serena/memories/suggested_commands.md +0 -0
  17. {jsonatapy-2.2.9 → jsonatapy-2.2.10}/.serena/memories/task_completion.md +0 -0
  18. {jsonatapy-2.2.9 → jsonatapy-2.2.10}/.serena/memories/tech_stack.md +0 -0
  19. {jsonatapy-2.2.9 → jsonatapy-2.2.10}/.serena/project.yml +0 -0
  20. {jsonatapy-2.2.9 → jsonatapy-2.2.10}/LICENSE +0 -0
  21. {jsonatapy-2.2.9 → jsonatapy-2.2.10}/benches/evaluator_bench.rs +0 -0
  22. {jsonatapy-2.2.9 → jsonatapy-2.2.10}/bindings/c/README.md +0 -0
  23. {jsonatapy-2.2.9 → jsonatapy-2.2.10}/bindings/c/examples/smoke.c +0 -0
  24. {jsonatapy-2.2.9 → jsonatapy-2.2.10}/bindings/c/jsonata.h +0 -0
  25. {jsonatapy-2.2.9 → jsonatapy-2.2.10}/examples/evaluator_demo.rs +0 -0
  26. {jsonatapy-2.2.9 → jsonatapy-2.2.10}/examples/host_functions.rs +0 -0
  27. {jsonatapy-2.2.9 → jsonatapy-2.2.10}/examples/parser_demo.rs +0 -0
  28. {jsonatapy-2.2.9 → jsonatapy-2.2.10}/examples/simd_json_bench.rs +0 -0
  29. {jsonatapy-2.2.9 → jsonatapy-2.2.10}/python/jsonatapy/__init__.py +0 -0
  30. {jsonatapy-2.2.9 → jsonatapy-2.2.10}/python/jsonatapy/__main__.py +0 -0
  31. {jsonatapy-2.2.9 → jsonatapy-2.2.10}/python/jsonatapy/_cli/__init__.py +0 -0
  32. {jsonatapy-2.2.9 → jsonatapy-2.2.10}/python/jsonatapy/_cli/bindings.py +0 -0
  33. {jsonatapy-2.2.9 → jsonatapy-2.2.10}/python/jsonatapy/_cli/error_format.py +0 -0
  34. {jsonatapy-2.2.9 → jsonatapy-2.2.10}/python/jsonatapy/_cli/mcp_server.py +0 -0
  35. {jsonatapy-2.2.9 → jsonatapy-2.2.10}/python/jsonatapy/_cli/resolve.py +0 -0
  36. {jsonatapy-2.2.9 → jsonatapy-2.2.10}/python/jsonatapy/_cli/run.py +0 -0
  37. {jsonatapy-2.2.9 → jsonatapy-2.2.10}/python/jsonatapy/py.typed +0 -0
  38. {jsonatapy-2.2.9 → jsonatapy-2.2.10}/src/ast.rs +0 -0
  39. {jsonatapy-2.2.9 → jsonatapy-2.2.10}/src/ast_transform.rs +0 -0
  40. {jsonatapy-2.2.9 → jsonatapy-2.2.10}/src/bin/jsonata/bindings.rs +0 -0
  41. {jsonatapy-2.2.9 → jsonatapy-2.2.10}/src/bin/jsonata/error_format.rs +0 -0
  42. {jsonatapy-2.2.9 → jsonatapy-2.2.10}/src/bin/jsonata/main.rs +0 -0
  43. {jsonatapy-2.2.9 → jsonatapy-2.2.10}/src/bin/jsonata/resolve.rs +0 -0
  44. {jsonatapy-2.2.9 → jsonatapy-2.2.10}/src/builtins.rs +0 -0
  45. {jsonatapy-2.2.9 → jsonatapy-2.2.10}/src/capi.rs +0 -0
  46. {jsonatapy-2.2.9 → jsonatapy-2.2.10}/src/compiler.rs +0 -0
  47. {jsonatapy-2.2.9 → jsonatapy-2.2.10}/src/datetime.rs +0 -0
  48. {jsonatapy-2.2.9 → jsonatapy-2.2.10}/src/evaluator.rs +0 -0
  49. {jsonatapy-2.2.9 → jsonatapy-2.2.10}/src/expression.rs +0 -0
  50. {jsonatapy-2.2.9 → jsonatapy-2.2.10}/src/functions.rs +0 -0
  51. {jsonatapy-2.2.9 → jsonatapy-2.2.10}/src/lazy.rs +0 -0
  52. {jsonatapy-2.2.9 → jsonatapy-2.2.10}/src/lib.rs +0 -0
  53. {jsonatapy-2.2.9 → jsonatapy-2.2.10}/src/parser.rs +0 -0
  54. {jsonatapy-2.2.9 → jsonatapy-2.2.10}/src/signature.rs +0 -0
  55. {jsonatapy-2.2.9 → jsonatapy-2.2.10}/src/value.rs +0 -0
  56. {jsonatapy-2.2.9 → jsonatapy-2.2.10}/src/vm.rs +0 -0
  57. {jsonatapy-2.2.9 → jsonatapy-2.2.10}/study/cli_fixtures.json +0 -0
  58. {jsonatapy-2.2.9 → jsonatapy-2.2.10}/study/cli_fixtures_testdata.json +0 -0
  59. {jsonatapy-2.2.9 → jsonatapy-2.2.10}/study/cli_spec.md +0 -0
  60. {jsonatapy-2.2.9 → jsonatapy-2.2.10}/tests/cli_fixtures_test.rs +0 -0
  61. {jsonatapy-2.2.9 → jsonatapy-2.2.10}/tests/cli_test.rs +0 -0
  62. {jsonatapy-2.2.9 → jsonatapy-2.2.10}/tests/datetime_picture_suite.rs +0 -0
  63. {jsonatapy-2.2.9 → jsonatapy-2.2.10}/tests/fixtures/builtin_arity.json +0 -0
  64. {jsonatapy-2.2.9 → jsonatapy-2.2.10}/tests/fixtures/builtin_differential.json +0 -0
  65. {jsonatapy-2.2.9 → jsonatapy-2.2.10}/tests/fixtures/builtin_signatures.json +0 -0
  66. {jsonatapy-2.2.9 → jsonatapy-2.2.10}/tests/fixtures/fastpath_differential.json +0 -0
  67. {jsonatapy-2.2.9 → jsonatapy-2.2.10}/tests/fixtures/fastpath_known_divergences.json +0 -0
  68. {jsonatapy-2.2.9 → jsonatapy-2.2.10}/tests/host_functions_test.rs +0 -0
  69. {jsonatapy-2.2.9 → jsonatapy-2.2.10}/tests/integration_test.rs +0 -0
  70. {jsonatapy-2.2.9 → jsonatapy-2.2.10}/tests/lambda_closure_suite.rs +0 -0
  71. {jsonatapy-2.2.9 → jsonatapy-2.2.10}/tests/parent_and_focus_binding_suite.rs +0 -0
@@ -19,6 +19,52 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
19
19
 
20
20
  ### Security
21
21
 
22
+ ## [2.2.10] - 2026-09-24
23
+
24
+ ### Added
25
+ - `SECURITY.md` security policy: security fixes ship as a new patch release of the latest
26
+ minor line (currently 2.2.x) with no backports, and vulnerabilities are reported privately
27
+ through the repository's Security tab rather than in public issues. (#171)
28
+ - Benchmark tables gain a per-row **jsonata-core (pure Rust)** column, measured by a new
29
+ `benchmarks/rust` harness that evaluates this project's engine as a Rust library with no
30
+ Python boundary. The column previously labelled `jsonatapy (rust)` is relabelled
31
+ `jsonatapy (json I/O)`: it was always the `evaluate_json` path of the same engine, not a
32
+ separate Rust implementation. (#162)
33
+ - The README's performance section now shows an auto-generated chart of the "Realistic
34
+ Workload" benchmarks, regenerated alongside `docs/performance.md` on each release. (#165)
35
+ - `CONTRIBUTORS.md`. (#167)
36
+
37
+ ### Changed
38
+ - Updated Rust dependencies: `simd-json` 0.18.0 → 0.18.1 (#163), `indexmap` 2.14.0 → 2.14.2
39
+ (#168), and `clap` 4.6.6 → 4.6.7, used only by the `jsonata` CLI (#169).
40
+ - CodeQL now runs through GitHub's CodeQL default setup, covering Rust, Python, C/C++,
41
+ JavaScript/TypeScript and GitHub Actions, instead of CodeQL jobs in the Security Scanning
42
+ workflow. (#170, #171)
43
+ - The Security Scanning workflow now audits the resolved `uv.lock` with `pip-audit`, not just
44
+ the packages installed on the runner, and fails on a vulnerable locked dependency. It also
45
+ lists `cargo-audit` warnings such as yanked crates, without failing the build on them. (#170)
46
+
47
+ ### Deprecated
48
+
49
+ ### Removed
50
+
51
+ ### Fixed
52
+ - The default docs URL (`/stable/`) served the previous release's performance page: the
53
+ release job deployed docs from the release tag, which never contains that release's own
54
+ benchmark numbers. Release docs now take `docs/performance.md` from `main` after the
55
+ benchmark job records it, and the docs workflow can republish the released docs line
56
+ without a new release. (#164)
57
+ - Resolved all 18 open CodeQL code-quality alerts in the benchmark and test scripts, and
58
+ implemented the previously stubbed `test_compile_invalid_expression` test. (#170)
59
+
60
+ ### Security
61
+ - `Cargo.lock`: `chacha20` 0.10.1 → 0.10.2. 0.10.1 was yanked; it reaches the build through
62
+ `rand` and was compiled into the 2.2.9 Python wheels and CLI binaries. (#170)
63
+ - `uv.lock`: `anyio` 4.14.1 → 4.15.1 (CVE-2026-63374, CVE-2026-64847, CVE-2026-63349),
64
+ `cryptography` 49.0.0 → 50.0.1 (PYSEC-2026-3552), and `mkdocs-material` 9.7.6 → 9.7.7
65
+ (PYSEC-2026-3864). These are development and documentation dependencies only; the published
66
+ `jsonatapy` package has no Python dependencies and was not affected. (#170)
67
+
22
68
  ## [2.2.9] "Perform-ata" - 2026-08-31
23
69
 
24
70
  ### Changed
@@ -0,0 +1,2 @@
1
+ # Contributors
2
+ - [Maria](https://github.com/Tangerinedream13)
@@ -189,9 +189,9 @@ checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
189
189
 
190
190
  [[package]]
191
191
  name = "chacha20"
192
- version = "0.10.1"
192
+ version = "0.10.2"
193
193
  source = "registry+https://github.com/rust-lang/crates.io-index"
194
- checksum = "d524456ba66e72eb8b115ff89e01e497f8e6d11d78b70b1aa13c0fbd97540a81"
194
+ checksum = "65c35e4b699c7e15ccbe7ee35c005e4fc0a278d22238a2857e6ce2dadeda1b06"
195
195
  dependencies = [
196
196
  "cfg-if",
197
197
  "cpufeatures",
@@ -240,9 +240,9 @@ dependencies = [
240
240
 
241
241
  [[package]]
242
242
  name = "clap"
243
- version = "4.6.6"
243
+ version = "4.6.7"
244
244
  source = "registry+https://github.com/rust-lang/crates.io-index"
245
- checksum = "473c7e07f409a8d772161724aa8db6a765a2532a70f9667eeb7b49d3d02fbdca"
245
+ checksum = "aa8876b300ab35ba921adea3dfd70157a46249b33f95c9084ae5709785478946"
246
246
  dependencies = [
247
247
  "clap_builder",
248
248
  "clap_derive",
@@ -250,9 +250,9 @@ dependencies = [
250
250
 
251
251
  [[package]]
252
252
  name = "clap_builder"
253
- version = "4.6.6"
253
+ version = "4.6.7"
254
254
  source = "registry+https://github.com/rust-lang/crates.io-index"
255
- checksum = "7b48fea5a88e9ae728a2dcbedbfc0e730f7d60da42e1cb049a83c9fb8b789889"
255
+ checksum = "ec0797fb7aeb1406c84efac526901f7ec3ead2124f946b494e72879d4b54704d"
256
256
  dependencies = [
257
257
  "anstream",
258
258
  "anstyle",
@@ -262,9 +262,9 @@ dependencies = [
262
262
 
263
263
  [[package]]
264
264
  name = "clap_derive"
265
- version = "4.6.4"
265
+ version = "4.6.7"
266
266
  source = "registry+https://github.com/rust-lang/crates.io-index"
267
- checksum = "d012d2b9d65aca7f18f4d9878a045bc17899bba951561ba5ec3c2ba1eed9a061"
267
+ checksum = "f9c751b79415d4e559e3d1fcf128e09e720eb673a06d26cf6f392d37d75b66e0"
268
268
  dependencies = [
269
269
  "heck",
270
270
  "proc-macro2",
@@ -544,9 +544,9 @@ dependencies = [
544
544
 
545
545
  [[package]]
546
546
  name = "indexmap"
547
- version = "2.14.0"
547
+ version = "2.14.2"
548
548
  source = "registry+https://github.com/rust-lang/crates.io-index"
549
- checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9"
549
+ checksum = "cc4e190f5d26ca7051642629da2c52fc03bde85a03197c99408dcd291734c855"
550
550
  dependencies = [
551
551
  "equivalent",
552
552
  "hashbrown 0.17.1",
@@ -586,7 +586,7 @@ dependencies = [
586
586
 
587
587
  [[package]]
588
588
  name = "jsonata-core"
589
- version = "2.2.9"
589
+ version = "2.2.10"
590
590
  dependencies = [
591
591
  "assert_cmd",
592
592
  "base64",
@@ -1132,9 +1132,9 @@ checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba"
1132
1132
 
1133
1133
  [[package]]
1134
1134
  name = "simd-json"
1135
- version = "0.18.0"
1135
+ version = "0.18.1"
1136
1136
  source = "registry+https://github.com/rust-lang/crates.io-index"
1137
- checksum = "5b4c2bab24c48682e93509b5afc39f1f6ef2fbc1ebccab917c8b0534b3007ae4"
1137
+ checksum = "6ebe141eb4a23ecc4d5de93fa5b139ac65dc07c38037a2fe9a8fb7c9d36bd832"
1138
1138
  dependencies = [
1139
1139
  "halfbrown",
1140
1140
  "ref-cast",
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "jsonata-core"
3
- version = "2.2.9"
3
+ version = "2.2.10"
4
4
  edition = "2021"
5
5
  authors = ["txjmb <txjmb@users.noreply.github.com>"]
6
6
  description = "High-performance Rust implementation of JSONata query and transformation language"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: jsonatapy
3
- Version: 2.2.9
3
+ Version: 2.2.10
4
4
  Classifier: Development Status :: 5 - Production/Stable
5
5
  Classifier: Intended Audience :: Developers
6
6
  Classifier: License :: OSI Approved :: MIT License
@@ -66,7 +66,26 @@ Project-URL: Repository, https://github.com/txjmb/jsonata-core
66
66
  [![JSONata conformance](https://img.shields.io/badge/JSONata%20conformance-1686%2F1686-brightgreen.svg)](https://github.com/jsonata-js/jsonata/tree/master/test/test-suite)
67
67
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
68
68
 
69
- > ### ⚠️ Upgrading to 2.2.8 "Conform-ata" — please test before you deploy
69
+ <!-- BEGIN generated performance chart -->
70
+ <!-- Regenerated from the latest benchmark run by
71
+ benchmarks/python/generate_readme_chart.py. Do not hand-edit this block
72
+ or the SVGs it points at; edit the generator instead. -->
73
+ <a href="https://txjmb.github.io/jsonata-core/stable/performance/">
74
+ <picture>
75
+ <source media="(prefers-color-scheme: dark)"
76
+ srcset="https://raw.githubusercontent.com/txjmb/jsonata-core/main/docs/assets/realistic-workload-dark.svg">
77
+ <img width="880"
78
+ alt="Realistic-workload benchmark on a 100-product dataset, lower is better: jsonatapy is 7.5x faster than the jsonata-js reference on the geometric mean of 5 e-commerce queries, and the pure-Rust jsonata-core engine is faster still."
79
+ src="https://raw.githubusercontent.com/txjmb/jsonata-core/main/docs/assets/realistic-workload-light.svg">
80
+ </picture>
81
+ </a>
82
+
83
+ *Click the chart for the full category-by-category tables, including jsonata-python
84
+ and jsonata-rs, which are left off the chart because at 68 ms–9 s they would
85
+ flatten everything else into a sliver.*
86
+ <!-- END generated performance chart -->
87
+
88
+ > ### ⚠️ Upgrading to 2.2.8 "Conform-ata"+ — please test before you deploy
70
89
  >
71
90
  > 2.2.8 is primarily a **conformance** release: it corrects a number of places where this
72
91
  > library disagreed with the jsonata-js reference. These issues were found during routine quality checks and documentation improvements. The test harness was inadvertently missing some edge cases. Many of those corrections **change the
@@ -97,7 +116,7 @@ JSONata implementation in Python, so the goal was to port JSONata to Rust (with
97
116
  for Python) and see how fast it could go. The answer: faster than V8 for most expression
98
117
  workloads, and faster than the next pure-Rust implementation. The rust versions are published on crates.io, and the python wheels on pypi. There is also a command-line binary and Python command-line available (works great with uvx) for use in scripting. The Python library is also usable in a command-line fashion, and a C-compatible library is available for those who want to easily use jsonata in C/C++.
99
118
 
100
- Many, many thanks to the incredible work of all the maintainers of the [JSONata](https://github.com/jsonata-js/jsonata) reference library. JSONata is a very powerful, well-designed, and useful language that has made an impact on many projects. This project leverages their outstanding work to extend that capability to Python and Rust and would not be possible without that project. The implementation in Rust was strongly influenced by their implementation. The 1600+ (1686/1686 passing for last build of this project) tests they created provided the scaffolding and validation for all of this project. This project will continue to follow and be a derivative of the reference project as the JSONata reference library evolves.
119
+ Many, many thanks to the incredible work of all the maintainers of the [JSONata](https://github.com/jsonata-js/jsonata) reference library. JSONata is a very powerful, well-designed, expressive and useful language that has made an impact on many projects. This project leverages their outstanding work to extend that capability to Python and Rust and would not be possible without that project. The implementation in Rust was strongly influenced by their implementation. The 1600+ (1686/1686 passing for last build of this project) tests they created provided the scaffolding and validation for all of this project. This project will continue to follow and be a derivative of the reference project as the JSONata reference library evolves.
101
120
 
102
121
  Release versions will follow the reference jsonata-js project major and minor release numbers, but not necessarily patches. This will make it easier for adopters of this library to understand each release's JSONata API compatibility. As an example, 2.2.8 should be compliant with 2.2.x jsonata-js tests, but may have fixes specific to this library. If a patch release for jsonata-js is relevant for this project, it will be included in a patch release that may or may not follow the patch numbers of the upstream project. "Major" versions of this library that don't include any updates to follow jsonata-js conformance will be "named" in release notes/changelog.
103
122
 
@@ -137,10 +156,10 @@ let result = Evaluator::new().evaluate(&ast, &data)?;
137
156
  ```toml
138
157
  # Cargo.toml
139
158
  [dependencies]
140
- jsonata-core = "2.2.8" # pure Rust, no Python dependency
159
+ jsonata-core = "2.2.9" # pure Rust, no Python dependency
141
160
 
142
161
  # Optional: disable SIMD for constrained targets
143
- jsonata-core = { version = "2.2.8", default-features = false }
162
+ jsonata-core = { version = "2.2.9", default-features = false }
144
163
  ```
145
164
 
146
165
  ---
@@ -225,7 +244,9 @@ See [official JSONata docs](https://docs.jsonata.org/) for the full language ref
225
244
 
226
245
  ## Performance
227
246
 
228
- `jsonata-core` passes **1682/1682** JSONata reference tests and is the fastest JSONata
247
+
248
+
249
+ `jsonata-core` passes **1686/1686** JSONata reference tests and is the fastest JSONata
229
250
  implementation available in either Rust or Python:
230
251
 
231
252
  - **~6x faster on average** than the JavaScript reference implementation (V8), across all
@@ -17,7 +17,26 @@
17
17
  [![JSONata conformance](https://img.shields.io/badge/JSONata%20conformance-1686%2F1686-brightgreen.svg)](https://github.com/jsonata-js/jsonata/tree/master/test/test-suite)
18
18
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
19
19
 
20
- > ### ⚠️ Upgrading to 2.2.8 "Conform-ata" — please test before you deploy
20
+ <!-- BEGIN generated performance chart -->
21
+ <!-- Regenerated from the latest benchmark run by
22
+ benchmarks/python/generate_readme_chart.py. Do not hand-edit this block
23
+ or the SVGs it points at; edit the generator instead. -->
24
+ <a href="https://txjmb.github.io/jsonata-core/stable/performance/">
25
+ <picture>
26
+ <source media="(prefers-color-scheme: dark)"
27
+ srcset="https://raw.githubusercontent.com/txjmb/jsonata-core/main/docs/assets/realistic-workload-dark.svg">
28
+ <img width="880"
29
+ alt="Realistic-workload benchmark on a 100-product dataset, lower is better: jsonatapy is 7.5x faster than the jsonata-js reference on the geometric mean of 5 e-commerce queries, and the pure-Rust jsonata-core engine is faster still."
30
+ src="https://raw.githubusercontent.com/txjmb/jsonata-core/main/docs/assets/realistic-workload-light.svg">
31
+ </picture>
32
+ </a>
33
+
34
+ *Click the chart for the full category-by-category tables, including jsonata-python
35
+ and jsonata-rs, which are left off the chart because at 68 ms–9 s they would
36
+ flatten everything else into a sliver.*
37
+ <!-- END generated performance chart -->
38
+
39
+ > ### ⚠️ Upgrading to 2.2.8 "Conform-ata"+ — please test before you deploy
21
40
  >
22
41
  > 2.2.8 is primarily a **conformance** release: it corrects a number of places where this
23
42
  > library disagreed with the jsonata-js reference. These issues were found during routine quality checks and documentation improvements. The test harness was inadvertently missing some edge cases. Many of those corrections **change the
@@ -48,7 +67,7 @@ JSONata implementation in Python, so the goal was to port JSONata to Rust (with
48
67
  for Python) and see how fast it could go. The answer: faster than V8 for most expression
49
68
  workloads, and faster than the next pure-Rust implementation. The rust versions are published on crates.io, and the python wheels on pypi. There is also a command-line binary and Python command-line available (works great with uvx) for use in scripting. The Python library is also usable in a command-line fashion, and a C-compatible library is available for those who want to easily use jsonata in C/C++.
50
69
 
51
- Many, many thanks to the incredible work of all the maintainers of the [JSONata](https://github.com/jsonata-js/jsonata) reference library. JSONata is a very powerful, well-designed, and useful language that has made an impact on many projects. This project leverages their outstanding work to extend that capability to Python and Rust and would not be possible without that project. The implementation in Rust was strongly influenced by their implementation. The 1600+ (1686/1686 passing for last build of this project) tests they created provided the scaffolding and validation for all of this project. This project will continue to follow and be a derivative of the reference project as the JSONata reference library evolves.
70
+ Many, many thanks to the incredible work of all the maintainers of the [JSONata](https://github.com/jsonata-js/jsonata) reference library. JSONata is a very powerful, well-designed, expressive and useful language that has made an impact on many projects. This project leverages their outstanding work to extend that capability to Python and Rust and would not be possible without that project. The implementation in Rust was strongly influenced by their implementation. The 1600+ (1686/1686 passing for last build of this project) tests they created provided the scaffolding and validation for all of this project. This project will continue to follow and be a derivative of the reference project as the JSONata reference library evolves.
52
71
 
53
72
  Release versions will follow the reference jsonata-js project major and minor release numbers, but not necessarily patches. This will make it easier for adopters of this library to understand each release's JSONata API compatibility. As an example, 2.2.8 should be compliant with 2.2.x jsonata-js tests, but may have fixes specific to this library. If a patch release for jsonata-js is relevant for this project, it will be included in a patch release that may or may not follow the patch numbers of the upstream project. "Major" versions of this library that don't include any updates to follow jsonata-js conformance will be "named" in release notes/changelog.
54
73
 
@@ -88,10 +107,10 @@ let result = Evaluator::new().evaluate(&ast, &data)?;
88
107
  ```toml
89
108
  # Cargo.toml
90
109
  [dependencies]
91
- jsonata-core = "2.2.8" # pure Rust, no Python dependency
110
+ jsonata-core = "2.2.9" # pure Rust, no Python dependency
92
111
 
93
112
  # Optional: disable SIMD for constrained targets
94
- jsonata-core = { version = "2.2.8", default-features = false }
113
+ jsonata-core = { version = "2.2.9", default-features = false }
95
114
  ```
96
115
 
97
116
  ---
@@ -176,7 +195,9 @@ See [official JSONata docs](https://docs.jsonata.org/) for the full language ref
176
195
 
177
196
  ## Performance
178
197
 
179
- `jsonata-core` passes **1682/1682** JSONata reference tests and is the fastest JSONata
198
+
199
+
200
+ `jsonata-core` passes **1686/1686** JSONata reference tests and is the fastest JSONata
180
201
  implementation available in either Rust or Python:
181
202
 
182
203
  - **~6x faster on average** than the JavaScript reference implementation (V8), across all
@@ -0,0 +1,47 @@
1
+ # Security Policy
2
+
3
+ This policy covers the **jsonata-core** Rust crate, the **jsonatapy** Python
4
+ package, the `jsonata` command-line tool, and the C API in `bindings/c`, all
5
+ published from this repository.
6
+
7
+ ## Supported Versions
8
+
9
+ Security fixes are released as a new patch version of the latest minor line,
10
+ published to [crates.io](https://crates.io/crates/jsonata-core) and
11
+ [PyPI](https://pypi.org/project/jsonatapy/). Older lines do not receive
12
+ backports; upgrade to the latest release to pick up a fix.
13
+
14
+ | Version | Supported |
15
+ | ------- | --------- |
16
+ | 2.2.x (latest patch) | ✅ |
17
+ | < 2.2 | ❌ |
18
+
19
+ ## Reporting a Vulnerability
20
+
21
+ **Please do not report security vulnerabilities through public GitHub issues,
22
+ discussions, or pull requests.**
23
+
24
+ Report them privately instead: go to the repository's
25
+ [**Security** tab](https://github.com/txjmb/jsonata-core/security) and choose
26
+ **Report a vulnerability**. Only the maintainers can see the report.
27
+
28
+ Please include:
29
+
30
+ - The affected component (Rust crate, Python package, CLI, or C API) and version
31
+ - A minimal reproduction: the JSONata expression and input data that trigger
32
+ the issue
33
+ - What happens (crash, hang, memory growth, wrong result) and what you expected
34
+ - Your assessment of the impact, if you have one
35
+
36
+ What to expect:
37
+
38
+ - We aim to acknowledge your report within 5 business days, and will keep you
39
+ updated as we investigate.
40
+ - If the report is accepted, we fix it in a new patch release, then publish a
41
+ GitHub Security Advisory and request a CVE where appropriate. We coordinate
42
+ the disclosure date with you and credit you in the advisory unless you prefer
43
+ to stay anonymous.
44
+ - If the report is declined, we explain why.
45
+
46
+ Please give us a reasonable chance to release a fix before disclosing the issue
47
+ publicly.
@@ -4,7 +4,7 @@ build-backend = "maturin"
4
4
 
5
5
  [project]
6
6
  name = "jsonatapy"
7
- version = "2.2.9"
7
+ version = "2.2.10"
8
8
  description = "High-performance Python/Rust implementation of JSONata query and transformation language"
9
9
  authors = [
10
10
  {name = "txjmb", email = "txjmb@users.noreply.github.com"}
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes