Tags: techouse/qs
Tags
🔖 release v1.7.4 ## 1.7.4 * [FIX] restore Dart 3.0.0 test compatibility by materializing `ByteBuffer` fixtures via `_byteBufferFrom` instead of relying on `List<int>.buffer` * [CHORE] widen the `lints` dev dependency range to support versions from 3.0.0 up to 7.0.0
🔖 release v1.7.3 ## 1.7.3 * [PERF] speed up decode for flat and mixed query workloads via structured-key pre-scan, flat-query early return, and parse/merge bypass when safe * [PERF] optimize decode tokenization/list hot paths with capped splitting for String/RegExp/Pattern delimiters, capped comma splitting, and lower-overhead substring/index usage * [FIX] tighten strict list-limit behavior and list-growth detection (including root `[]` map input, scalar→list transitions, and ignoring `[]=` substrings inside values) * [CHORE] add targeted decode regression coverage for new fast paths and delimiter/list-limit edge cases * [CHORE] add `tool/decode_perf_snapshot.dart` for repeatable decode perf snapshots and remove obsolete JS-style `slice` list/string extensions
🔖 release v1.7.2 ## 1.7.2 * [PERF] optimize deep `encode=false` workloads with a guarded single-key linear map fast path, segment-string reuse, and lower-allocation top-level fragment assembly * [PERF] refactor iterative encoder traversal to phase-driven frames, removing per-child callback allocation and preserving existing cycle/null/comma semantics * [PERF] make `KeyPathNode.materialize()` linear-time by replacing per-step `toString()` materialization with one final string build * [CHORE] add `tool/perf_snapshot.dart` for repeatable deep encode snapshots (`2000/5000/12000`, median-of-7 with warmup) * [CHORE] expand encode/key-path regression coverage for deep chains and fast-path fallback scenarios
🔖 release v1.7.1
## 1.7.1
* [FIX] restore robust cyclic detection when `filter` callbacks wrap values in fresh containers by tracking object identity before filter/date transformations
* [FIX] improve deep path handling in encoder key materialization/dot-encoding via iterative `KeyPathNode` caching (avoids recursive overflow risk and reuses ancestor caches)
* [CHORE] refactor encoder internals to share immutable frame config through new `EncodeConfig` and reduce per-frame option duplication
* [CHORE] replace `weak_map` usage in encode cycle tracking with identity-based `Set<Object>` side-channel and remove `weak_map` dependency
* [CHORE] expand encoder regression coverage with new tests for filter-wrapped cycles, `KeyPathNode` caching/encoding edge cases, and `EncodeConfig.copyWith` sentinel behavior
* [CHORE] refine decode internals with clearer duplicate-handling branching and a small dot-decoding fast-path guard (`cleanRoot.contains('%2')`)
🔖 release v1.7.0
## 1.7.0
* [FEAT] add `DecodeOptions.throwOnLimitExceeded` for strict limit enforcement on parameter, list, and depth overflows
* [FIX] tolerate malformed UTF-8 when encoding `ByteBuffer` values to match Node `Buffer.toString('utf8')`
* [FIX] encode `ByteBuffer` values via charset even when `encode=false` (avoid `Instance of 'ByteBuffer'` output)
* [FIX] ensure invalid charset in `Utils.encode` consistently throws `ArgumentError`
* [FIX] improve merge semantics for lists/maps (hole replacement, undefined normalization under `parseLists=false`, and non-mutating list/set merges)
* [FIX] add runtime validation and DecodeOptions constructor asserts for invalid charsets and inconsistent dot options
* [CHORE] refactor encode/merge internals to stack-based frames (`EncodeFrame`, `MergeFrame`, `MergePhase`) for deep-nesting safety
* [CHORE] expand coverage for encode/decode/merge edge cases and add a shared `FakeEncoding` test helper
PreviousNext