fb55/css-select

[Bug] SelectAll changes array of elements passed to it by reference

Opened this issue · 2 comments

First of, select two elements. First - any. Second - child of the first element.
Then, just run SelectAll on this array.
Array (as any of js objects) passed by reference and css-select changes it somewhere.

Example:

const CSSselect = require('css-select');
const {parseDocument} = require('htmlparser2');

const dom = parseDocument('<div class="root"><div class="product"><h1></h1></div></div>');
const elements = CSSselect.selectAll('h1, .product', dom);
console.log(elements.length); // elements.length === 2
// elements contains both h1 AND .product (which are parent of h1)

CSSselect.selectAll('no matter', elements);
console.log(elements.length); // elements.length become 1
// elements contains only .product

As I found, this happens after removeSubset() call:

? adapter.removeSubsets(elems)
which refer to default adapter https://github.com/fb55/domutils/blob/d3e1af0f3b98c0e9f028443385760aaa068be624/src/helpers.ts#L11

But. Is there normal to change original array?

fb55 commented

This works as expected, but should be documented. Thanks for raising the issue!