:valuenow resolves through a non-interpolatedTemplateLiteral(e.g.`1.2.3`) the same way it already does for a stringLiteral(e.g."1.2.3"), returning the cooked value of its single quasi. Some bundlers/minifiers emit one in place of the other with no functional difference, so queries that only checked for a plainLiteralwere silently missing matches on template-literal output. Applies wherever:valueis read, including through$:/$$:resolution — no query changes needed to pick up either shape.
- Depth-bounded descendant selectors:
//{n}Type,//{n,m}Type,//{n,}Typeand//{,m}Typelimit how many steps down a//selector will match, including on attribute descendants (//{n,m}:name)
- 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
- 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
- Upgrade meriyah to 7.x (
sourceTypereplacesmodule: boolean) - Disable regex validation (
validateRegex: false) during parsing
- Add JSX parsing support by falling back to meriyah's
jsxoption when non-JSX parsing fails (tries both module and script modes)
- Fix problem with resolving TemplateElement values in filters
- Fix problem with resolving TemplateElement values in filters
- Fix problem with resolving TemplateElement values
- Update dependencies and fix related stuff
- Fix broken CJS/ESM dual build
- Reduce memory/GC
- Reduce memory
- Don't includeranges and loc by default - reduced memory usage
- Fixing binding issues for hoisting
- Fix scope creation bug and reduce nodePath creation
- Remove globals leakage from scopes++
- Reducing memory consumption
- Replacing babel with meriyah
- Replacing babel with meriyah
- More speed and memory improvements
- More scoping issues for binding
- Scoping issues for binding
- Speed improvement - switch out babel.traverse with optimized traversal
- Support for function
/fn:join(data, sep),/fn:first(data),/fn:concat(...)and/fn:nthchild(selector, n)
- Modernizing build output
- Fix bug in resolve
$$
- Support for
$$which will resolve to the right value for x in botha.x = 2andlet y = 1; a.x = y;
- Performance update
Fixing build
Initial version