Releases: RetireJS/ASTronomical
Releases · RetireJS/ASTronomical
3.0.7
[3.0.7] - 2026-06-11
Performance upgrades
- Store scope ids as a flat
scopeIdproperty on AST nodes instead of a nestedextraobject, removing an object allocation per node - Materialize
NodePathobjects lazily — only when a selector actually matches — instead of for every visited node (ancestors are materialized on demand, so../filter chains are unchanged) - Key the per-depth filter map by AST node instead of query node, making filter lookup O(1) instead of scanning filters accumulated across siblings
- Remove dead per-depth filter stack and allocate filter-result arrays lazily (most matches carry no filter)
- Skip the binding-registration call for already-registered subtrees and avoid wrapper-array allocations in the binding pass
- Gate debug-only statistics counters that did a hash write per created path
- ~10% faster on the retire.js detection suite; retained heap during a query on large files reduced by more than half
Performance upgrades
- Index active descendant (
//Type) selectors by node type so each visited node only checks the selectors that can match its type, instead of scanning every active descendant selector (arbitrary-depth matching unchanged) - Lazily allocate the per-depth filter map, avoiding a Map allocation for every visited node
- Replace the per-node descendant-presence scan and
slice()with O(1) checks - ~23% faster querying on large minified/bundled files
3.0.6
[3.0.6] - 2026-06-05
Performance upgrades
- Index active descendant (
//Type) selectors by node type so each visited node only checks the selectors that can match its type, instead of scanning every active descendant selector (arbitrary-depth matching unchanged) - Lazily allocate the per-depth filter map, avoiding a Map allocation for every visited node
- Replace the per-node descendant-presence scan and
slice()with O(1) checks - ~23% faster querying on large minified/bundled files
3.0.5
3.0.4
3.0.3
3.0.2
3.0.1
3.0.0
v2.1.1-rc.1 performance
Memory/CPU usage updates