@adguard/agtree
Version:
Tool set for working with adblock filter lists
49 lines (46 loc) • 1.69 kB
JavaScript
/*
* AGTree v4.1.1 (build date: Thu, 23 Apr 2026 09:15:37 GMT)
* (c) 2026 Adguard Software Ltd.
* Released under the MIT license
* https://github.com/AdguardTeam/tsurlfilter/tree/master/packages/agtree#readme
*/
import { TokenType } from '@adguard/css-tokenizer';
/**
* Handles class selector parsing in selector list.
*/
class ClassSelectorHandler {
/**
* Handles class selector parsing by creating a class selector node
* and appending it to the current complex selector node.
*
* @param context Selector list parser context.
*
* @throws If the class selector is syntactically incorrect.
*/
static handle(context) {
const { options, baseOffset, stream, complexSelector, } = context;
// Get class selector dot token
const token = stream.getOrFail();
// Advance class selector dot token
stream.advance();
// Expect next token to be an identifier (class selector value)
stream.expect(TokenType.Ident);
// Extract class selector value (without dot)
const value = stream.fragment();
// Construct class selector node
const result = {
type: 'ClassSelector',
value,
};
// Include class selector node locations if needed
if (options.isLocIncluded) {
result.start = baseOffset + token.start;
result.end = baseOffset + token.end + value.length;
}
// Append class selector node to the current complex selector node
complexSelector.children.push(result);
// Advance class selector value token
stream.advance();
}
}
export { ClassSelectorHandler };