@adguard/agtree
Version:
Tool set for working with adblock filter lists
62 lines (59 loc) • 1.61 kB
JavaScript
/*
* AGTree v3.2.2 (build date: Tue, 08 Jul 2025 13:39:47 GMT)
* (c) 2025 Adguard Software Ltd.
* Released under the MIT license
* https://github.com/AdguardTeam/tsurlfilter/tree/master/packages/agtree#readme
*/
import { isNull } from '../utils/type-guards.js';
/**
* @file Custom clone functions for AST nodes, this is probably the most efficient way to clone AST nodes.
* @todo Maybe move them to parser classes as 'clone' methods
*/
/**
* Clones a scriptlet rule node.
*
* @param node Node to clone
* @returns Cloned node
*/
function cloneScriptletRuleNode(node) {
return {
type: node.type,
children: node.children.map((child) => (isNull(child) ? null : { ...child })),
};
}
/**
* Clones a domain list node.
*
* @param node Node to clone
* @returns Cloned node
*/
function cloneDomainListNode(node) {
return {
type: node.type,
separator: node.separator,
children: node.children.map((domain) => ({ ...domain })),
};
}
/**
* Clones a modifier list node.
*
* @param node Node to clone
* @returns Cloned node
*/
function cloneModifierListNode(node) {
return {
type: node.type,
children: node.children.map((modifier) => {
const res = {
type: modifier.type,
exception: modifier.exception,
name: { ...modifier.name },
};
if (modifier.value) {
res.value = { ...modifier.value };
}
return res;
}),
};
}
export { cloneDomainListNode, cloneModifierListNode, cloneScriptletRuleNode };