@adguard/agtree
Version:
Tool set for working with adblock filter lists
66 lines (63 loc) • 1.63 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 { 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 };