Releases: techouse/qs_codec
Releases · techouse/qs_codec
1.5.0
1.5.0
- [FEAT] add the
Programming Language :: Python :: Free Threading :: 3 - Stableclassifier - [CHORE] clarify in the thread-safety docs that the free-threaded CPython build is supported and covered by the test suite
- [CHORE] treat free-threaded CPython (
3.13t,3.14t) CI jobs as normal required test runs instead of experimental jobs
1.4.6
1.4.6
- [FIX] avoid a shared default
EncodeOptions()instance inencode()by constructing defaults per call - [CHORE] document the library's thread-safety boundary for concurrent
encode()/decode()use and shared read-only options - [CHORE] add concurrent regression coverage for
encode(),decode(),WeakWrapper, andKeyPathNodecache behavior - [CHORE] scale deep stack-safety and thread-stress canaries for older PyPy 3.8 CI runners while preserving coverage on other interpreters
1.4.5
1.4.5
- [CHORE] optimize
encodehot paths with lower-overhead iterative traversal, cheaper container checks, and deep linear mapping fast paths - [CHORE] optimize
EncodeUtilsASCII/BMP handling andKeyPathNodepath materialization caching for repeated encode workloads - [FIX] preserve legacy
max_depthvs circular-reference error precedence in both generic and fast-path encoding - [FIX] keep
EncodeOptionsfree of encode-time mutable cache state while preserving encoder/equality behavior - [CHORE] expand encode regression coverage for deep nesting, cycle handling, key-path caching, and
EncodeOptionssemantics
1.4.4
1.4.4
- [CHORE] optimize
decodehot paths via structured-key pre-scan/bypass logic and lower-overhead default decoder dispatch - [FIX] align
decodeedge cases with Nodeqsfor mixed flat/structured keys and leading-zero bracket roots (e.g.[01]) - [FIX] avoid incorrect list forcing when
[]=appears only in the value token - [FIX] restore Python 3.8 compatibility in
decodeby avoiding runtime subscripting ofcollections.abc.Mapping - [CHORE] refactor
encodetraversal internals into dedicated frame/state models and constants - [CHORE] add repeatable local benchmark snapshots for decode (
C1/C2/C3) and deep encode traversal - [CHORE] expand decode/utils regression coverage for collision semantics and parser compatibility paths
1.4.3
1.4.3
- [CHORE] optimize
encodetraversal internals and hot paths with lower allocation overhead - [CHORE] add internal
KeyPathNodepath caching for lazy materialization and dot-encoded path reuse - [FIX] avoid
RecursionErrorin deep key-path dot encoding by makingKeyPathNode.as_dot_encodediterative - [FIX] ensure strict null handling applies RFC formatter behavior for bare-key output (e.g. RFC1738 space handling)
- [FIX] avoid mutating caller-owned root list/tuple elements when
EncodeOptions.filteris callable - [CHORE] remove unused
KeyPathNode.total_lengthstate to keep nodes lightweight - [CHORE] expand encode regression and internal helper tests (path caching, list format generators, strict-null formatting, mutation safety)
1.4.2
1.4.2
- [CHORE] optimize
decodeby skipping dot-in-keys normalization when "%2" is not present in key segments
1.4.1
1.4.1
- [FIX] harden encoder traversal to an iterative implementation to avoid recursion-based crashes on very deep nested input
- [FIX] harden decode merge path (
Utils.merge) with iterative traversal to preventRecursionErroron deep conflicting merges - [FIX] update
EncodeOptions.max_depthsemantics:Noneis unbounded by this option; explicit limits are enforced directly - [FIX] preserve legacy map-merge key collision semantics for mixed key types (
'1'vs1) in iterative merge - [CHORE] optimize deep encode performance by replacing per-frame side-channel chain scans with O(1) ancestry cycle state lookups
- [CHORE] add deep stack-safety regressions (depth 12_000) and cycle-state compatibility tests
- [CHORE] update encoding depth documentation
1.4.0
1.4.0
- [FEAT] add
EncodeOptions.max_depthto cap encoding traversal depth (capped to the current recursion limit) - [FIX] avoid
RecursionErroron deeply nested input by enforcing a configurable encoding depth guard - [FIX] make
WeakWrapperhashing identity-based to keep weak-key lookups stable after mutations - [CHORE] optimize encode/merge paths (shallow-copy root mappings, reuse dict targets in internal merges)
- [CHORE] expand tests and documentation for encoding depth limits
1.3.4
1.3.4
- [CHORE] stricter static type checking with pyright
1.3.3
1.3.3
- [FIX] implement
DecodeOptions.list_limithandling inUtils.combinefunction to prevent DoS via memory exhaustion