import { BaseNode } from "estree"; export type WalkerContext = { skip: () => void; remove: () => void; replace: (node: BaseNode) => void; }; export class WalkerBase { protected should_skip: boolean = false; protected should_remove: boolean = false; protected replacement: BaseNode = null; public context: WalkerContext = { skip: () => (this.should_skip = true), remove: () => (this.should_remove = true), replace: (node: BaseNode) => (this.replacement = node) }; public replace(parent: any, prop: string, index: number, node: BaseNode) { if (parent) { if (index !== null) { parent[prop][index] = node; } else { parent[prop] = node; } } } public remove(parent: any, prop: string, index: number) { if (parent) { if (index !== null) { parent[prop].splice(index, 1); } else { delete parent[prop]; } } } }