UNPKG

@yuebai008/cli

Version:

Command line interface for rapid qg-minigame development

1 lines 3.18 kB
const SkipSubTreeObject={};export class ESTreeWalker{#e;#t;#r;constructor(e,t){this.#e=e,this.#t=t||function(){},this.#r=!1}static get SkipSubtree(){return SkipSubTreeObject}setWalkNulls(e){this.#r=e}walk(e){this.#a(e,null)}#a(e,t){if(!e&&t&&this.#r){const t={raw:"null",value:null,parent:null,type:"Literal"};e=t}if(!e)return;if(e.parent=t,this.#e.call(null,e)===ESTreeWalker.SkipSubtree)return void this.#t.call(null,e);const r=_walkOrder[e.type];if(r){if("TemplateLiteral"===e.type){const t=e,r=t.expressions.length;for(let e=0;e<r;++e)this.#a(t.quasis[e],t),this.#a(t.expressions[e],t);this.#a(t.quasis[r],t)}else for(let t=0;t<r.length;++t){const a=e[r[t]];Array.isArray(a)?this.#i(a,e):this.#a(a,e)}this.#t.call(null,e)}else console.error("Walk order not defined for "+e.type)}#i(e,t){for(let r=0;r<e.length;++r)this.#a(e[r],t)}}const _walkOrder={AwaitExpression:["argument"],ArrayExpression:["elements"],ArrayPattern:["elements"],ArrowFunctionExpression:["params","body"],AssignmentExpression:["left","right"],AssignmentPattern:["left","right"],BinaryExpression:["left","right"],BlockStatement:["body"],BreakStatement:["label"],CallExpression:["callee","arguments"],CatchClause:["param","body"],ClassBody:["body"],ClassDeclaration:["id","superClass","body"],ClassExpression:["id","superClass","body"],ChainExpression:["expression"],ConditionalExpression:["test","consequent","alternate"],ContinueStatement:["label"],DebuggerStatement:[],DoWhileStatement:["body","test"],EmptyStatement:[],ExpressionStatement:["expression"],ForInStatement:["left","right","body"],ForOfStatement:["left","right","body"],ForStatement:["init","test","update","body"],FunctionDeclaration:["id","params","body"],FunctionExpression:["id","params","body"],Identifier:[],ImportDeclaration:["specifiers","source"],ImportDefaultSpecifier:["local"],ImportNamespaceSpecifier:["local"],ImportSpecifier:["imported","local"],ImportExpression:["source"],ExportAllDeclaration:["source"],ExportDefaultDeclaration:["declaration"],ExportNamedDeclaration:["specifiers","source","declaration"],ExportSpecifier:["exported","local"],IfStatement:["test","consequent","alternate"],LabeledStatement:["label","body"],Literal:[],LogicalExpression:["left","right"],MemberExpression:["object","property"],MetaProperty:["meta","property"],MethodDefinition:["key","value"],NewExpression:["callee","arguments"],ObjectExpression:["properties"],ObjectPattern:["properties"],ParenthesizedExpression:["expression"],PrivateIdentifier:[],PropertyDefinition:["key","value"],Program:["body"],Property:["key","value"],RestElement:["argument"],ReturnStatement:["argument"],SequenceExpression:["expressions"],SpreadElement:["argument"],Super:[],SwitchCase:["test","consequent"],SwitchStatement:["discriminant","cases"],TaggedTemplateExpression:["tag","quasi"],TemplateElement:[],TemplateLiteral:["quasis","expressions"],ThisExpression:[],ThrowStatement:["argument"],TryStatement:["block","handler","finalizer"],UnaryExpression:["argument"],UpdateExpression:["argument"],VariableDeclaration:["declarations"],VariableDeclarator:["id","init"],WhileStatement:["test","body"],WithStatement:["object","body"],YieldExpression:["argument"]};