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.
- {jsonatapy-2.2.9 → jsonatapy-2.2.10}/CHANGELOG.md +46 -0
- jsonatapy-2.2.10/CONTRIBUTORS.md +2 -0
- {jsonatapy-2.2.9 → jsonatapy-2.2.10}/Cargo.lock +13 -13
- {jsonatapy-2.2.9 → jsonatapy-2.2.10}/Cargo.toml +1 -1
- {jsonatapy-2.2.9 → jsonatapy-2.2.10}/PKG-INFO +27 -6
- {jsonatapy-2.2.9 → jsonatapy-2.2.10}/README.md +26 -5
- jsonatapy-2.2.10/SECURITY.md +47 -0
- {jsonatapy-2.2.9 → jsonatapy-2.2.10}/pyproject.toml +1 -1
- {jsonatapy-2.2.9 → jsonatapy-2.2.10}/.gitignore +0 -0
- {jsonatapy-2.2.9 → jsonatapy-2.2.10}/.gitmodules +0 -0
- {jsonatapy-2.2.9 → jsonatapy-2.2.10}/.serena/.gitignore +0 -0
- {jsonatapy-2.2.9 → jsonatapy-2.2.10}/.serena/memories/architecture.md +0 -0
- {jsonatapy-2.2.9 → jsonatapy-2.2.10}/.serena/memories/conventions.md +0 -0
- {jsonatapy-2.2.9 → jsonatapy-2.2.10}/.serena/memories/core.md +0 -0
- {jsonatapy-2.2.9 → jsonatapy-2.2.10}/.serena/memories/memory_maintenance.md +0 -0
- {jsonatapy-2.2.9 → jsonatapy-2.2.10}/.serena/memories/suggested_commands.md +0 -0
- {jsonatapy-2.2.9 → jsonatapy-2.2.10}/.serena/memories/task_completion.md +0 -0
- {jsonatapy-2.2.9 → jsonatapy-2.2.10}/.serena/memories/tech_stack.md +0 -0
- {jsonatapy-2.2.9 → jsonatapy-2.2.10}/.serena/project.yml +0 -0
- {jsonatapy-2.2.9 → jsonatapy-2.2.10}/LICENSE +0 -0
- {jsonatapy-2.2.9 → jsonatapy-2.2.10}/benches/evaluator_bench.rs +0 -0
- {jsonatapy-2.2.9 → jsonatapy-2.2.10}/bindings/c/README.md +0 -0
- {jsonatapy-2.2.9 → jsonatapy-2.2.10}/bindings/c/examples/smoke.c +0 -0
- {jsonatapy-2.2.9 → jsonatapy-2.2.10}/bindings/c/jsonata.h +0 -0
- {jsonatapy-2.2.9 → jsonatapy-2.2.10}/examples/evaluator_demo.rs +0 -0
- {jsonatapy-2.2.9 → jsonatapy-2.2.10}/examples/host_functions.rs +0 -0
- {jsonatapy-2.2.9 → jsonatapy-2.2.10}/examples/parser_demo.rs +0 -0
- {jsonatapy-2.2.9 → jsonatapy-2.2.10}/examples/simd_json_bench.rs +0 -0
- {jsonatapy-2.2.9 → jsonatapy-2.2.10}/python/jsonatapy/__init__.py +0 -0
- {jsonatapy-2.2.9 → jsonatapy-2.2.10}/python/jsonatapy/__main__.py +0 -0
- {jsonatapy-2.2.9 → jsonatapy-2.2.10}/python/jsonatapy/_cli/__init__.py +0 -0
- {jsonatapy-2.2.9 → jsonatapy-2.2.10}/python/jsonatapy/_cli/bindings.py +0 -0
- {jsonatapy-2.2.9 → jsonatapy-2.2.10}/python/jsonatapy/_cli/error_format.py +0 -0
- {jsonatapy-2.2.9 → jsonatapy-2.2.10}/python/jsonatapy/_cli/mcp_server.py +0 -0
- {jsonatapy-2.2.9 → jsonatapy-2.2.10}/python/jsonatapy/_cli/resolve.py +0 -0
- {jsonatapy-2.2.9 → jsonatapy-2.2.10}/python/jsonatapy/_cli/run.py +0 -0
- {jsonatapy-2.2.9 → jsonatapy-2.2.10}/python/jsonatapy/py.typed +0 -0
- {jsonatapy-2.2.9 → jsonatapy-2.2.10}/src/ast.rs +0 -0
- {jsonatapy-2.2.9 → jsonatapy-2.2.10}/src/ast_transform.rs +0 -0
- {jsonatapy-2.2.9 → jsonatapy-2.2.10}/src/bin/jsonata/bindings.rs +0 -0
- {jsonatapy-2.2.9 → jsonatapy-2.2.10}/src/bin/jsonata/error_format.rs +0 -0
- {jsonatapy-2.2.9 → jsonatapy-2.2.10}/src/bin/jsonata/main.rs +0 -0
- {jsonatapy-2.2.9 → jsonatapy-2.2.10}/src/bin/jsonata/resolve.rs +0 -0
- {jsonatapy-2.2.9 → jsonatapy-2.2.10}/src/builtins.rs +0 -0
- {jsonatapy-2.2.9 → jsonatapy-2.2.10}/src/capi.rs +0 -0
- {jsonatapy-2.2.9 → jsonatapy-2.2.10}/src/compiler.rs +0 -0
- {jsonatapy-2.2.9 → jsonatapy-2.2.10}/src/datetime.rs +0 -0
- {jsonatapy-2.2.9 → jsonatapy-2.2.10}/src/evaluator.rs +0 -0
- {jsonatapy-2.2.9 → jsonatapy-2.2.10}/src/expression.rs +0 -0
- {jsonatapy-2.2.9 → jsonatapy-2.2.10}/src/functions.rs +0 -0
- {jsonatapy-2.2.9 → jsonatapy-2.2.10}/src/lazy.rs +0 -0
- {jsonatapy-2.2.9 → jsonatapy-2.2.10}/src/lib.rs +0 -0
- {jsonatapy-2.2.9 → jsonatapy-2.2.10}/src/parser.rs +0 -0
- {jsonatapy-2.2.9 → jsonatapy-2.2.10}/src/signature.rs +0 -0
- {jsonatapy-2.2.9 → jsonatapy-2.2.10}/src/value.rs +0 -0
- {jsonatapy-2.2.9 → jsonatapy-2.2.10}/src/vm.rs +0 -0
- {jsonatapy-2.2.9 → jsonatapy-2.2.10}/study/cli_fixtures.json +0 -0
- {jsonatapy-2.2.9 → jsonatapy-2.2.10}/study/cli_fixtures_testdata.json +0 -0
- {jsonatapy-2.2.9 → jsonatapy-2.2.10}/study/cli_spec.md +0 -0
- {jsonatapy-2.2.9 → jsonatapy-2.2.10}/tests/cli_fixtures_test.rs +0 -0
- {jsonatapy-2.2.9 → jsonatapy-2.2.10}/tests/cli_test.rs +0 -0
- {jsonatapy-2.2.9 → jsonatapy-2.2.10}/tests/datetime_picture_suite.rs +0 -0
- {jsonatapy-2.2.9 → jsonatapy-2.2.10}/tests/fixtures/builtin_arity.json +0 -0
- {jsonatapy-2.2.9 → jsonatapy-2.2.10}/tests/fixtures/builtin_differential.json +0 -0
- {jsonatapy-2.2.9 → jsonatapy-2.2.10}/tests/fixtures/builtin_signatures.json +0 -0
- {jsonatapy-2.2.9 → jsonatapy-2.2.10}/tests/fixtures/fastpath_differential.json +0 -0
- {jsonatapy-2.2.9 → jsonatapy-2.2.10}/tests/fixtures/fastpath_known_divergences.json +0 -0
- {jsonatapy-2.2.9 → jsonatapy-2.2.10}/tests/host_functions_test.rs +0 -0
- {jsonatapy-2.2.9 → jsonatapy-2.2.10}/tests/integration_test.rs +0 -0
- {jsonatapy-2.2.9 → jsonatapy-2.2.10}/tests/lambda_closure_suite.rs +0 -0
- {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
|
|
@@ -189,9 +189,9 @@ checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
|
|
|
189
189
|
|
|
190
190
|
[[package]]
|
|
191
191
|
name = "chacha20"
|
|
192
|
-
version = "0.10.
|
|
192
|
+
version = "0.10.2"
|
|
193
193
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
194
|
-
checksum = "
|
|
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.
|
|
243
|
+
version = "4.6.7"
|
|
244
244
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
245
|
-
checksum = "
|
|
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.
|
|
253
|
+
version = "4.6.7"
|
|
254
254
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
255
|
-
checksum = "
|
|
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.
|
|
265
|
+
version = "4.6.7"
|
|
266
266
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
267
|
-
checksum = "
|
|
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.
|
|
547
|
+
version = "2.14.2"
|
|
548
548
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
549
|
-
checksum = "
|
|
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.
|
|
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.
|
|
1135
|
+
version = "0.18.1"
|
|
1136
1136
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1137
|
-
checksum = "
|
|
1137
|
+
checksum = "6ebe141eb4a23ecc4d5de93fa5b139ac65dc07c38037a2fe9a8fb7c9d36bd832"
|
|
1138
1138
|
dependencies = [
|
|
1139
1139
|
"halfbrown",
|
|
1140
1140
|
"ref-cast",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: jsonatapy
|
|
3
|
-
Version: 2.2.
|
|
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
|
[](https://github.com/jsonata-js/jsonata/tree/master/test/test-suite)
|
|
67
67
|
[](https://opensource.org/licenses/MIT)
|
|
68
68
|
|
|
69
|
-
|
|
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.
|
|
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.
|
|
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
|
-
|
|
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
|
[](https://github.com/jsonata-js/jsonata/tree/master/test/test-suite)
|
|
18
18
|
[](https://opensource.org/licenses/MIT)
|
|
19
19
|
|
|
20
|
-
|
|
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.
|
|
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.
|
|
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
|
-
|
|
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.
|
|
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
|
|
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
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|