export function Node(_astNode: any) { return new Proxy(_astNode, { get(target: any, prop: string, reciver: any) { // @ts-ignore if (target.hasOwnProperty(prop)) { // @ts-ignore return target[prop]; } else { if (prop == "getAttribute") { return (name: string) => { var _attr: any = null; if (_astNode.attrs) { _astNode.attrs.every((attr: any) => { if (attr.name == name) { _attr = attr.value; return false; } return true; }) } return _attr; } } else if (prop == "setAttribute") { return (name: string, value: string) => { var __found = false; for (let i = 0; i < target.attrs.length; i++) { let attr = target.attrs[i]; if (attr.name == name) { target.attrs[i] = {name: attr.name, value: value}; __found = true; return false; } return true; } if (!__found) _astNode.attrs.push({ name: name, value: value }); } } else if (prop == "removeAttribute") { return (name: string) => { for (let i = 0; i < target.attrs.length; i++) { let attr = target.attrs[i]; if (attr.name == name) { delete target.attrs[i]; return false; } return true; } } } } } }) }