Visitor.js 47 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.Visitor = void 0;
  4. /**
  5. * @deprecated JavaScript API is deprecated. Please use Wasm plugin instead.
  6. */
  7. class Visitor {
  8. visitProgram(n) {
  9. switch (n.type) {
  10. case "Module":
  11. return this.visitModule(n);
  12. case "Script":
  13. return this.visitScript(n);
  14. }
  15. }
  16. visitModule(m) {
  17. m.body = this.visitModuleItems(m.body);
  18. return m;
  19. }
  20. visitScript(m) {
  21. m.body = this.visitStatements(m.body);
  22. return m;
  23. }
  24. visitModuleItems(items) {
  25. return items.map(this.visitModuleItem.bind(this));
  26. }
  27. visitModuleItem(n) {
  28. switch (n.type) {
  29. case "ExportDeclaration":
  30. case "ExportDefaultDeclaration":
  31. case "ExportNamedDeclaration":
  32. case "ExportDefaultExpression":
  33. case "ImportDeclaration":
  34. case "ExportAllDeclaration":
  35. case "TsImportEqualsDeclaration":
  36. case "TsExportAssignment":
  37. case "TsNamespaceExportDeclaration":
  38. return this.visitModuleDeclaration(n);
  39. default:
  40. return this.visitStatement(n);
  41. }
  42. }
  43. visitModuleDeclaration(n) {
  44. switch (n.type) {
  45. case "ExportDeclaration":
  46. return this.visitExportDeclaration(n);
  47. case "ExportDefaultDeclaration":
  48. return this.visitExportDefaultDeclaration(n);
  49. case "ExportNamedDeclaration":
  50. return this.visitExportNamedDeclaration(n);
  51. case "ExportDefaultExpression":
  52. return this.visitExportDefaultExpression(n);
  53. case "ImportDeclaration":
  54. return this.visitImportDeclaration(n);
  55. case "ExportAllDeclaration":
  56. return this.visitExportAllDeclaration(n);
  57. case "TsImportEqualsDeclaration":
  58. return this.visitTsImportEqualsDeclaration(n);
  59. case "TsExportAssignment":
  60. return this.visitTsExportAssignment(n);
  61. case "TsNamespaceExportDeclaration":
  62. return this.visitTsNamespaceExportDeclaration(n);
  63. }
  64. }
  65. visitTsNamespaceExportDeclaration(n) {
  66. n.id = this.visitBindingIdentifier(n.id);
  67. return n;
  68. }
  69. visitTsExportAssignment(n) {
  70. n.expression = this.visitExpression(n.expression);
  71. return n;
  72. }
  73. visitTsImportEqualsDeclaration(n) {
  74. n.id = this.visitBindingIdentifier(n.id);
  75. n.moduleRef = this.visitTsModuleReference(n.moduleRef);
  76. return n;
  77. }
  78. visitTsModuleReference(n) {
  79. switch (n.type) {
  80. case "Identifier":
  81. return this.visitIdentifierReference(n);
  82. case "TsExternalModuleReference":
  83. return this.visitTsExternalModuleReference(n);
  84. case "TsQualifiedName":
  85. return this.visitTsQualifiedName(n);
  86. }
  87. }
  88. visitTsExternalModuleReference(n) {
  89. n.expression = this.visitStringLiteral(n.expression);
  90. return n;
  91. }
  92. visitExportAllDeclaration(n) {
  93. n.source = this.visitStringLiteral(n.source);
  94. return n;
  95. }
  96. visitExportDefaultExpression(n) {
  97. n.expression = this.visitExpression(n.expression);
  98. return n;
  99. }
  100. visitExportNamedDeclaration(n) {
  101. n.specifiers = this.visitExportSpecifiers(n.specifiers);
  102. n.source = this.visitOptionalStringLiteral(n.source);
  103. return n;
  104. }
  105. visitExportSpecifiers(nodes) {
  106. return nodes.map(this.visitExportSpecifier.bind(this));
  107. }
  108. visitExportSpecifier(n) {
  109. switch (n.type) {
  110. case "ExportDefaultSpecifier":
  111. return this.visitExportDefaultSpecifier(n);
  112. case "ExportNamespaceSpecifier":
  113. return this.visitExportNamespaceSpecifier(n);
  114. case "ExportSpecifier":
  115. return this.visitNamedExportSpecifier(n);
  116. }
  117. }
  118. visitNamedExportSpecifier(n) {
  119. if (n.exported) {
  120. n.exported = this.visitModuleExportName(n.exported);
  121. }
  122. n.orig = this.visitModuleExportName(n.orig);
  123. return n;
  124. }
  125. visitModuleExportName(n) {
  126. switch (n.type) {
  127. case "Identifier":
  128. return this.visitIdentifier(n);
  129. case "StringLiteral":
  130. return this.visitStringLiteral(n);
  131. }
  132. }
  133. visitExportNamespaceSpecifier(n) {
  134. n.name = this.visitModuleExportName(n.name);
  135. return n;
  136. }
  137. visitExportDefaultSpecifier(n) {
  138. n.exported = this.visitBindingIdentifier(n.exported);
  139. return n;
  140. }
  141. visitOptionalStringLiteral(n) {
  142. if (n) {
  143. return this.visitStringLiteral(n);
  144. }
  145. }
  146. visitExportDefaultDeclaration(n) {
  147. n.decl = this.visitDefaultDeclaration(n.decl);
  148. return n;
  149. }
  150. visitDefaultDeclaration(n) {
  151. switch (n.type) {
  152. case "ClassExpression":
  153. return this.visitClassExpression(n);
  154. case "FunctionExpression":
  155. return this.visitFunctionExpression(n);
  156. case "TsInterfaceDeclaration":
  157. return this.visitTsInterfaceDeclaration(n);
  158. }
  159. }
  160. visitFunctionExpression(n) {
  161. n = this.visitFunction(n);
  162. if (n.identifier) {
  163. n.identifier = this.visitBindingIdentifier(n.identifier);
  164. }
  165. return n;
  166. }
  167. visitClassExpression(n) {
  168. n = this.visitClass(n);
  169. if (n.identifier) {
  170. n.identifier = this.visitBindingIdentifier(n.identifier);
  171. }
  172. return n;
  173. }
  174. visitExportDeclaration(n) {
  175. n.declaration = this.visitDeclaration(n.declaration);
  176. return n;
  177. }
  178. visitArrayExpression(e) {
  179. if (e.elements) {
  180. e.elements = e.elements.map(this.visitArrayElement.bind(this));
  181. }
  182. return e;
  183. }
  184. visitArrayElement(e) {
  185. if (e) {
  186. return this.visitExprOrSpread(e);
  187. }
  188. }
  189. visitExprOrSpread(e) {
  190. return Object.assign(Object.assign({}, e), { expression: this.visitExpression(e.expression) });
  191. }
  192. visitExprOrSpreads(nodes) {
  193. return nodes.map(this.visitExprOrSpread.bind(this));
  194. }
  195. visitSpreadElement(e) {
  196. e.arguments = this.visitExpression(e.arguments);
  197. return e;
  198. }
  199. visitOptionalExpression(e) {
  200. if (e) {
  201. return this.visitExpression(e);
  202. }
  203. }
  204. visitArrowFunctionExpression(e) {
  205. e.body = this.visitArrowBody(e.body);
  206. e.params = this.visitPatterns(e.params);
  207. e.returnType = this.visitTsTypeAnnotation(e.returnType);
  208. e.typeParameters = this.visitTsTypeParameterDeclaration(e.typeParameters);
  209. return e;
  210. }
  211. visitArrowBody(body) {
  212. switch (body.type) {
  213. case "BlockStatement":
  214. return this.visitBlockStatement(body);
  215. default:
  216. return this.visitExpression(body);
  217. }
  218. }
  219. visitBlockStatement(block) {
  220. block.stmts = this.visitStatements(block.stmts);
  221. return block;
  222. }
  223. visitStatements(stmts) {
  224. return stmts.map(this.visitStatement.bind(this));
  225. }
  226. visitStatement(stmt) {
  227. switch (stmt.type) {
  228. case "ClassDeclaration":
  229. case "FunctionDeclaration":
  230. case "TsEnumDeclaration":
  231. case "TsInterfaceDeclaration":
  232. case "TsModuleDeclaration":
  233. case "TsTypeAliasDeclaration":
  234. case "VariableDeclaration":
  235. return this.visitDeclaration(stmt);
  236. case "BreakStatement":
  237. return this.visitBreakStatement(stmt);
  238. case "BlockStatement":
  239. return this.visitBlockStatement(stmt);
  240. case "ContinueStatement":
  241. return this.visitContinueStatement(stmt);
  242. case "DebuggerStatement":
  243. return this.visitDebuggerStatement(stmt);
  244. case "DoWhileStatement":
  245. return this.visitDoWhileStatement(stmt);
  246. case "EmptyStatement":
  247. return this.visitEmptyStatement(stmt);
  248. case "ForInStatement":
  249. return this.visitForInStatement(stmt);
  250. case "ForOfStatement":
  251. return this.visitForOfStatement(stmt);
  252. case "ForStatement":
  253. return this.visitForStatement(stmt);
  254. case "IfStatement":
  255. return this.visitIfStatement(stmt);
  256. case "LabeledStatement":
  257. return this.visitLabeledStatement(stmt);
  258. case "ReturnStatement":
  259. return this.visitReturnStatement(stmt);
  260. case "SwitchStatement":
  261. return this.visitSwitchStatement(stmt);
  262. case "ThrowStatement":
  263. return this.visitThrowStatement(stmt);
  264. case "TryStatement":
  265. return this.visitTryStatement(stmt);
  266. case "WhileStatement":
  267. return this.visitWhileStatement(stmt);
  268. case "WithStatement":
  269. return this.visitWithStatement(stmt);
  270. case "ExpressionStatement":
  271. return this.visitExpressionStatement(stmt);
  272. default:
  273. throw new Error(`Unknown statement type: ` + stmt.type);
  274. }
  275. }
  276. visitSwitchStatement(stmt) {
  277. stmt.discriminant = this.visitExpression(stmt.discriminant);
  278. stmt.cases = this.visitSwitchCases(stmt.cases);
  279. return stmt;
  280. }
  281. visitSwitchCases(cases) {
  282. return cases.map(this.visitSwitchCase.bind(this));
  283. }
  284. visitSwitchCase(c) {
  285. c.test = this.visitOptionalExpression(c.test);
  286. c.consequent = this.visitStatements(c.consequent);
  287. return c;
  288. }
  289. visitIfStatement(stmt) {
  290. stmt.test = this.visitExpression(stmt.test);
  291. stmt.consequent = this.visitStatement(stmt.consequent);
  292. stmt.alternate = this.visitOptionalStatement(stmt.alternate);
  293. return stmt;
  294. }
  295. visitOptionalStatement(stmt) {
  296. if (stmt) {
  297. return this.visitStatement(stmt);
  298. }
  299. }
  300. visitBreakStatement(stmt) {
  301. if (stmt.label) {
  302. stmt.label = this.visitLabelIdentifier(stmt.label);
  303. }
  304. return stmt;
  305. }
  306. visitWhileStatement(stmt) {
  307. stmt.test = this.visitExpression(stmt.test);
  308. stmt.body = this.visitStatement(stmt.body);
  309. return stmt;
  310. }
  311. visitTryStatement(stmt) {
  312. stmt.block = this.visitBlockStatement(stmt.block);
  313. stmt.handler = this.visitCatchClause(stmt.handler);
  314. if (stmt.finalizer) {
  315. stmt.finalizer = this.visitBlockStatement(stmt.finalizer);
  316. }
  317. return stmt;
  318. }
  319. visitCatchClause(handler) {
  320. if (handler) {
  321. if (handler.param) {
  322. handler.param = this.visitPattern(handler.param);
  323. }
  324. handler.body = this.visitBlockStatement(handler.body);
  325. }
  326. return handler;
  327. }
  328. visitThrowStatement(stmt) {
  329. stmt.argument = this.visitExpression(stmt.argument);
  330. return stmt;
  331. }
  332. visitReturnStatement(stmt) {
  333. if (stmt.argument) {
  334. stmt.argument = this.visitExpression(stmt.argument);
  335. }
  336. return stmt;
  337. }
  338. visitLabeledStatement(stmt) {
  339. stmt.label = this.visitLabelIdentifier(stmt.label);
  340. stmt.body = this.visitStatement(stmt.body);
  341. return stmt;
  342. }
  343. visitForStatement(stmt) {
  344. if (stmt.init) {
  345. if (stmt.init.type === "VariableDeclaration") {
  346. stmt.init = this.visitVariableDeclaration(stmt.init);
  347. }
  348. else {
  349. stmt.init = this.visitOptionalExpression(stmt.init);
  350. }
  351. }
  352. stmt.test = this.visitOptionalExpression(stmt.test);
  353. stmt.update = this.visitOptionalExpression(stmt.update);
  354. stmt.body = this.visitStatement(stmt.body);
  355. return stmt;
  356. }
  357. visitForOfStatement(stmt) {
  358. if (stmt.left.type === "VariableDeclaration") {
  359. stmt.left = this.visitVariableDeclaration(stmt.left);
  360. }
  361. else {
  362. stmt.left = this.visitPattern(stmt.left);
  363. }
  364. stmt.right = this.visitExpression(stmt.right);
  365. stmt.body = this.visitStatement(stmt.body);
  366. return stmt;
  367. }
  368. visitForInStatement(stmt) {
  369. if (stmt.left.type === "VariableDeclaration") {
  370. stmt.left = this.visitVariableDeclaration(stmt.left);
  371. }
  372. else {
  373. stmt.left = this.visitPattern(stmt.left);
  374. }
  375. stmt.right = this.visitExpression(stmt.right);
  376. stmt.body = this.visitStatement(stmt.body);
  377. return stmt;
  378. }
  379. visitEmptyStatement(stmt) {
  380. return stmt;
  381. }
  382. visitDoWhileStatement(stmt) {
  383. stmt.body = this.visitStatement(stmt.body);
  384. stmt.test = this.visitExpression(stmt.test);
  385. return stmt;
  386. }
  387. visitDebuggerStatement(stmt) {
  388. return stmt;
  389. }
  390. visitWithStatement(stmt) {
  391. stmt.object = this.visitExpression(stmt.object);
  392. stmt.body = this.visitStatement(stmt.body);
  393. return stmt;
  394. }
  395. visitDeclaration(decl) {
  396. switch (decl.type) {
  397. case "ClassDeclaration":
  398. return this.visitClassDeclaration(decl);
  399. case "FunctionDeclaration":
  400. return this.visitFunctionDeclaration(decl);
  401. case "TsEnumDeclaration":
  402. return this.visitTsEnumDeclaration(decl);
  403. case "TsInterfaceDeclaration":
  404. return this.visitTsInterfaceDeclaration(decl);
  405. case "TsModuleDeclaration":
  406. return this.visitTsModuleDeclaration(decl);
  407. case "TsTypeAliasDeclaration":
  408. return this.visitTsTypeAliasDeclaration(decl);
  409. case "VariableDeclaration":
  410. return this.visitVariableDeclaration(decl);
  411. }
  412. }
  413. visitVariableDeclaration(n) {
  414. n.declarations = this.visitVariableDeclarators(n.declarations);
  415. return n;
  416. }
  417. visitVariableDeclarators(nodes) {
  418. return nodes.map(this.visitVariableDeclarator.bind(this));
  419. }
  420. visitVariableDeclarator(n) {
  421. n.id = this.visitPattern(n.id);
  422. n.init = this.visitOptionalExpression(n.init);
  423. return n;
  424. }
  425. visitTsTypeAliasDeclaration(n) {
  426. n.id = this.visitBindingIdentifier(n.id);
  427. n.typeAnnotation = this.visitTsType(n.typeAnnotation);
  428. n.typeParams = this.visitTsTypeParameterDeclaration(n.typeParams);
  429. return n;
  430. }
  431. visitTsModuleDeclaration(n) {
  432. n.id = this.visitTsModuleName(n.id);
  433. if (n.body) {
  434. n.body = this.visitTsNamespaceBody(n.body);
  435. }
  436. return n;
  437. }
  438. visitTsModuleName(n) {
  439. switch (n.type) {
  440. case "Identifier":
  441. return this.visitBindingIdentifier(n);
  442. case "StringLiteral":
  443. return this.visitStringLiteral(n);
  444. }
  445. }
  446. visitTsNamespaceBody(n) {
  447. if (n) {
  448. switch (n.type) {
  449. case "TsModuleBlock":
  450. return this.visitTsModuleBlock(n);
  451. case "TsNamespaceDeclaration":
  452. return this.visitTsNamespaceDeclaration(n);
  453. }
  454. }
  455. }
  456. visitTsNamespaceDeclaration(n) {
  457. const body = this.visitTsNamespaceBody(n.body);
  458. if (body) {
  459. n.body = body;
  460. }
  461. n.id = this.visitBindingIdentifier(n.id);
  462. return n;
  463. }
  464. visitTsModuleBlock(n) {
  465. n.body = this.visitModuleItems(n.body);
  466. return n;
  467. }
  468. visitTsInterfaceDeclaration(n) {
  469. n.id = this.visitBindingIdentifier(n.id);
  470. n.typeParams = this.visitTsTypeParameterDeclaration(n.typeParams);
  471. n.extends = this.visitTsExpressionsWithTypeArguments(n.extends);
  472. n.body = this.visitTsInterfaceBody(n.body);
  473. return n;
  474. }
  475. visitTsInterfaceBody(n) {
  476. n.body = this.visitTsTypeElements(n.body);
  477. return n;
  478. }
  479. visitTsTypeElements(nodes) {
  480. return nodes.map(this.visitTsTypeElement.bind(this));
  481. }
  482. visitTsTypeElement(n) {
  483. switch (n.type) {
  484. case "TsCallSignatureDeclaration":
  485. return this.visitTsCallSignatureDeclaration(n);
  486. case "TsConstructSignatureDeclaration":
  487. return this.visitTsConstructSignatureDeclaration(n);
  488. case "TsPropertySignature":
  489. return this.visitTsPropertySignature(n);
  490. case "TsGetterSignature":
  491. return this.visitTsGetterSignature(n);
  492. case "TsSetterSignature":
  493. return this.visitTsSetterSignature(n);
  494. case "TsMethodSignature":
  495. return this.visitTsMethodSignature(n);
  496. case "TsIndexSignature":
  497. return this.visitTsIndexSignature(n);
  498. }
  499. }
  500. visitTsCallSignatureDeclaration(n) {
  501. n.params = this.visitTsFnParameters(n.params);
  502. n.typeAnnotation = this.visitTsTypeAnnotation(n.typeAnnotation);
  503. return n;
  504. }
  505. visitTsConstructSignatureDeclaration(n) {
  506. n.params = this.visitTsFnParameters(n.params);
  507. n.typeAnnotation = this.visitTsTypeAnnotation(n.typeAnnotation);
  508. return n;
  509. }
  510. visitTsPropertySignature(n) {
  511. n.params = this.visitTsFnParameters(n.params);
  512. n.typeAnnotation = this.visitTsTypeAnnotation(n.typeAnnotation);
  513. return n;
  514. }
  515. visitTsGetterSignature(n) {
  516. n.typeAnnotation = this.visitTsTypeAnnotation(n.typeAnnotation);
  517. return n;
  518. }
  519. visitTsSetterSignature(n) {
  520. n.param = this.visitTsFnParameter(n.param);
  521. return n;
  522. }
  523. visitTsMethodSignature(n) {
  524. n.params = this.visitTsFnParameters(n.params);
  525. n.typeAnn = this.visitTsTypeAnnotation(n.typeAnn);
  526. return n;
  527. }
  528. visitTsEnumDeclaration(n) {
  529. n.id = this.visitIdentifier(n.id);
  530. n.members = this.visitTsEnumMembers(n.members);
  531. return n;
  532. }
  533. visitTsEnumMembers(nodes) {
  534. return nodes.map(this.visitTsEnumMember.bind(this));
  535. }
  536. visitTsEnumMember(n) {
  537. n.id = this.visitTsEnumMemberId(n.id);
  538. n.init = this.visitOptionalExpression(n.init);
  539. return n;
  540. }
  541. visitTsEnumMemberId(n) {
  542. switch (n.type) {
  543. case "Identifier":
  544. return this.visitBindingIdentifier(n);
  545. case "StringLiteral":
  546. return this.visitStringLiteral(n);
  547. }
  548. }
  549. visitFunctionDeclaration(decl) {
  550. decl.identifier = this.visitIdentifier(decl.identifier);
  551. decl = this.visitFunction(decl);
  552. return decl;
  553. }
  554. visitClassDeclaration(decl) {
  555. decl = this.visitClass(decl);
  556. decl.identifier = this.visitIdentifier(decl.identifier);
  557. return decl;
  558. }
  559. visitClassBody(members) {
  560. return members.map(this.visitClassMember.bind(this));
  561. }
  562. visitClassMember(member) {
  563. switch (member.type) {
  564. case "ClassMethod":
  565. return this.visitClassMethod(member);
  566. case "ClassProperty":
  567. return this.visitClassProperty(member);
  568. case "Constructor":
  569. return this.visitConstructor(member);
  570. case "PrivateMethod":
  571. return this.visitPrivateMethod(member);
  572. case "PrivateProperty":
  573. return this.visitPrivateProperty(member);
  574. case "TsIndexSignature":
  575. return this.visitTsIndexSignature(member);
  576. case "EmptyStatement":
  577. return this.visitEmptyStatement(member);
  578. case "StaticBlock":
  579. return this.visitStaticBlock(member);
  580. }
  581. }
  582. visitTsIndexSignature(n) {
  583. n.params = this.visitTsFnParameters(n.params);
  584. if (n.typeAnnotation)
  585. n.typeAnnotation = this.visitTsTypeAnnotation(n.typeAnnotation);
  586. return n;
  587. }
  588. visitTsFnParameters(params) {
  589. return params.map(this.visitTsFnParameter.bind(this));
  590. }
  591. visitTsFnParameter(n) {
  592. n.typeAnnotation = this.visitTsTypeAnnotation(n.typeAnnotation);
  593. return n;
  594. }
  595. visitPrivateProperty(n) {
  596. n.decorators = this.visitDecorators(n.decorators);
  597. n.key = this.visitPrivateName(n.key);
  598. n.typeAnnotation = this.visitTsTypeAnnotation(n.typeAnnotation);
  599. n.value = this.visitOptionalExpression(n.value);
  600. return n;
  601. }
  602. visitPrivateMethod(n) {
  603. n.accessibility = this.visitAccessibility(n.accessibility);
  604. n.function = this.visitFunction(n.function);
  605. n.key = this.visitPrivateName(n.key);
  606. return n;
  607. }
  608. visitPrivateName(n) {
  609. return n;
  610. }
  611. visitConstructor(n) {
  612. n.accessibility = this.visitAccessibility(n.accessibility);
  613. n.key = this.visitPropertyName(n.key);
  614. n.params = this.visitConstructorParameters(n.params);
  615. if (n.body) {
  616. n.body = this.visitBlockStatement(n.body);
  617. }
  618. return n;
  619. }
  620. visitConstructorParameters(nodes) {
  621. return nodes.map(this.visitConstructorParameter.bind(this));
  622. }
  623. visitConstructorParameter(n) {
  624. switch (n.type) {
  625. case "TsParameterProperty":
  626. return this.visitTsParameterProperty(n);
  627. default:
  628. return this.visitParameter(n);
  629. }
  630. }
  631. visitStaticBlock(n) {
  632. n.body = this.visitBlockStatement(n.body);
  633. return n;
  634. }
  635. visitTsParameterProperty(n) {
  636. n.accessibility = this.visitAccessibility(n.accessibility);
  637. n.decorators = this.visitDecorators(n.decorators);
  638. n.param = this.visitTsParameterPropertyParameter(n.param);
  639. return n;
  640. }
  641. visitTsParameterPropertyParameter(n) {
  642. n.typeAnnotation = this.visitTsTypeAnnotation(n.typeAnnotation);
  643. return n;
  644. }
  645. visitPropertyName(key) {
  646. switch (key.type) {
  647. case "Identifier":
  648. return this.visitBindingIdentifier(key);
  649. case "StringLiteral":
  650. return this.visitStringLiteral(key);
  651. case "NumericLiteral":
  652. return this.visitNumericLiteral(key);
  653. case "BigIntLiteral":
  654. return this.visitBigIntLiteral(key);
  655. default:
  656. return this.visitComputedPropertyKey(key);
  657. }
  658. }
  659. visitAccessibility(n) {
  660. return n;
  661. }
  662. visitClassProperty(n) {
  663. n.accessibility = this.visitAccessibility(n.accessibility);
  664. n.decorators = this.visitDecorators(n.decorators);
  665. n.key = this.visitPropertyName(n.key);
  666. n.typeAnnotation = this.visitTsTypeAnnotation(n.typeAnnotation);
  667. n.value = this.visitOptionalExpression(n.value);
  668. return n;
  669. }
  670. visitClassMethod(n) {
  671. n.accessibility = this.visitAccessibility(n.accessibility);
  672. n.function = this.visitFunction(n.function);
  673. n.key = this.visitPropertyName(n.key);
  674. return n;
  675. }
  676. visitComputedPropertyKey(n) {
  677. n.expression = this.visitExpression(n.expression);
  678. return n;
  679. }
  680. visitClass(n) {
  681. n.decorators = this.visitDecorators(n.decorators);
  682. n.superClass = this.visitOptionalExpression(n.superClass);
  683. n.superTypeParams = this.visitTsTypeParameterInstantiation(n.superTypeParams);
  684. if (n.implements) {
  685. n.implements = this.visitTsExpressionsWithTypeArguments(n.implements);
  686. }
  687. n.body = this.visitClassBody(n.body);
  688. return n;
  689. }
  690. visitFunction(n) {
  691. n.decorators = this.visitDecorators(n.decorators);
  692. n.params = this.visitParameters(n.params);
  693. if (n.body) {
  694. n.body = this.visitBlockStatement(n.body);
  695. }
  696. n.returnType = this.visitTsTypeAnnotation(n.returnType);
  697. n.typeParameters = this.visitTsTypeParameterDeclaration(n.typeParameters);
  698. return n;
  699. }
  700. visitTsExpressionsWithTypeArguments(nodes) {
  701. return nodes.map(this.visitTsExpressionWithTypeArguments.bind(this));
  702. }
  703. visitTsExpressionWithTypeArguments(n) {
  704. n.expression = this.visitExpression(n.expression);
  705. n.typeArguments = this.visitTsTypeParameterInstantiation(n.typeArguments);
  706. return n;
  707. }
  708. visitTsTypeParameterInstantiation(n) {
  709. if (n) {
  710. n.params = this.visitTsTypes(n.params);
  711. }
  712. return n;
  713. }
  714. visitTsTypes(nodes) {
  715. return nodes.map(this.visitTsType.bind(this));
  716. }
  717. visitTsEntityName(n) {
  718. switch (n.type) {
  719. case "Identifier":
  720. return this.visitBindingIdentifier(n);
  721. case "TsQualifiedName":
  722. return this.visitTsQualifiedName(n);
  723. }
  724. }
  725. visitTsQualifiedName(n) {
  726. n.left = this.visitTsEntityName(n.left);
  727. n.right = this.visitIdentifier(n.right);
  728. return n;
  729. }
  730. visitDecorators(nodes) {
  731. if (nodes) {
  732. return nodes.map(this.visitDecorator.bind(this));
  733. }
  734. }
  735. visitDecorator(n) {
  736. n.expression = this.visitExpression(n.expression);
  737. return n;
  738. }
  739. visitExpressionStatement(stmt) {
  740. stmt.expression = this.visitExpression(stmt.expression);
  741. return stmt;
  742. }
  743. visitContinueStatement(stmt) {
  744. if (stmt.label) {
  745. stmt.label = this.visitLabelIdentifier(stmt.label);
  746. }
  747. return stmt;
  748. }
  749. visitExpression(n) {
  750. switch (n.type) {
  751. case "ArrayExpression":
  752. return this.visitArrayExpression(n);
  753. case "ArrowFunctionExpression":
  754. return this.visitArrowFunctionExpression(n);
  755. case "AssignmentExpression":
  756. return this.visitAssignmentExpression(n);
  757. case "AwaitExpression":
  758. return this.visitAwaitExpression(n);
  759. case "BigIntLiteral":
  760. return this.visitBigIntLiteral(n);
  761. case "BinaryExpression":
  762. return this.visitBinaryExpression(n);
  763. case "BooleanLiteral":
  764. return this.visitBooleanLiteral(n);
  765. case "CallExpression":
  766. return this.visitCallExpression(n);
  767. case "ClassExpression":
  768. return this.visitClassExpression(n);
  769. case "ConditionalExpression":
  770. return this.visitConditionalExpression(n);
  771. case "FunctionExpression":
  772. return this.visitFunctionExpression(n);
  773. case "Identifier":
  774. return this.visitIdentifierReference(n);
  775. case "JSXElement":
  776. return this.visitJSXElement(n);
  777. case "JSXEmptyExpression":
  778. return this.visitJSXEmptyExpression(n);
  779. case "JSXFragment":
  780. return this.visitJSXFragment(n);
  781. case "JSXMemberExpression":
  782. return this.visitJSXMemberExpression(n);
  783. case "JSXNamespacedName":
  784. return this.visitJSXNamespacedName(n);
  785. case "JSXText":
  786. return this.visitJSXText(n);
  787. case "MemberExpression":
  788. return this.visitMemberExpression(n);
  789. case "SuperPropExpression":
  790. return this.visitSuperPropExpression(n);
  791. case "MetaProperty":
  792. return this.visitMetaProperty(n);
  793. case "NewExpression":
  794. return this.visitNewExpression(n);
  795. case "NullLiteral":
  796. return this.visitNullLiteral(n);
  797. case "NumericLiteral":
  798. return this.visitNumericLiteral(n);
  799. case "ObjectExpression":
  800. return this.visitObjectExpression(n);
  801. case "ParenthesisExpression":
  802. return this.visitParenthesisExpression(n);
  803. case "PrivateName":
  804. return this.visitPrivateName(n);
  805. case "RegExpLiteral":
  806. return this.visitRegExpLiteral(n);
  807. case "SequenceExpression":
  808. return this.visitSequenceExpression(n);
  809. case "StringLiteral":
  810. return this.visitStringLiteral(n);
  811. case "TaggedTemplateExpression":
  812. return this.visitTaggedTemplateExpression(n);
  813. case "TemplateLiteral":
  814. return this.visitTemplateLiteral(n);
  815. case "ThisExpression":
  816. return this.visitThisExpression(n);
  817. case "TsAsExpression":
  818. return this.visitTsAsExpression(n);
  819. case "TsSatisfiesExpression":
  820. return this.visitTsSatisfiesExpression(n);
  821. case "TsNonNullExpression":
  822. return this.visitTsNonNullExpression(n);
  823. case "TsTypeAssertion":
  824. return this.visitTsTypeAssertion(n);
  825. case "TsConstAssertion":
  826. return this.visitTsConstAssertion(n);
  827. case "TsInstantiation":
  828. return this.visitTsInstantiation(n);
  829. case "UnaryExpression":
  830. return this.visitUnaryExpression(n);
  831. case "UpdateExpression":
  832. return this.visitUpdateExpression(n);
  833. case "YieldExpression":
  834. return this.visitYieldExpression(n);
  835. case "OptionalChainingExpression":
  836. return this.visitOptionalChainingExpression(n);
  837. case "Invalid":
  838. return n;
  839. }
  840. }
  841. visitOptionalChainingExpression(n) {
  842. n.base = this.visitMemberExpressionOrOptionalChainingCall(n.base);
  843. return n;
  844. }
  845. visitMemberExpressionOrOptionalChainingCall(n) {
  846. switch (n.type) {
  847. case "MemberExpression":
  848. return this.visitMemberExpression(n);
  849. case "CallExpression":
  850. return this.visitOptionalChainingCall(n);
  851. }
  852. }
  853. visitOptionalChainingCall(n) {
  854. n.callee = this.visitExpression(n.callee);
  855. n.arguments = this.visitExprOrSpreads(n.arguments);
  856. if (n.typeArguments)
  857. n.typeArguments = this.visitTsTypeParameterInstantiation(n.typeArguments);
  858. return n;
  859. }
  860. visitAssignmentExpression(n) {
  861. n.left = this.visitPatternOrExpression(n.left);
  862. n.right = this.visitExpression(n.right);
  863. return n;
  864. }
  865. visitPatternOrExpression(n) {
  866. switch (n.type) {
  867. case "ObjectPattern":
  868. case "ArrayPattern":
  869. case "Identifier":
  870. case "AssignmentPattern":
  871. case "RestElement":
  872. return this.visitPattern(n);
  873. default:
  874. return this.visitExpression(n);
  875. }
  876. }
  877. visitYieldExpression(n) {
  878. n.argument = this.visitOptionalExpression(n.argument);
  879. return n;
  880. }
  881. visitUpdateExpression(n) {
  882. n.argument = this.visitExpression(n.argument);
  883. return n;
  884. }
  885. visitUnaryExpression(n) {
  886. n.argument = this.visitExpression(n.argument);
  887. return n;
  888. }
  889. visitTsTypeAssertion(n) {
  890. n.expression = this.visitExpression(n.expression);
  891. n.typeAnnotation = this.visitTsType(n.typeAnnotation);
  892. return n;
  893. }
  894. visitTsConstAssertion(n) {
  895. n.expression = this.visitExpression(n.expression);
  896. return n;
  897. }
  898. visitTsInstantiation(n) {
  899. n.expression = this.visitExpression(n.expression);
  900. return n;
  901. }
  902. visitTsNonNullExpression(n) {
  903. n.expression = this.visitExpression(n.expression);
  904. return n;
  905. }
  906. visitTsAsExpression(n) {
  907. n.expression = this.visitExpression(n.expression);
  908. n.typeAnnotation = this.visitTsType(n.typeAnnotation);
  909. return n;
  910. }
  911. visitTsSatisfiesExpression(n) {
  912. n.expression = this.visitExpression(n.expression);
  913. n.typeAnnotation = this.visitTsType(n.typeAnnotation);
  914. return n;
  915. }
  916. visitThisExpression(n) {
  917. return n;
  918. }
  919. visitTemplateLiteral(n) {
  920. n.expressions = n.expressions.map(this.visitExpression.bind(this));
  921. return n;
  922. }
  923. visitParameters(n) {
  924. return n.map(this.visitParameter.bind(this));
  925. }
  926. visitParameter(n) {
  927. n.pat = this.visitPattern(n.pat);
  928. return n;
  929. }
  930. visitTaggedTemplateExpression(n) {
  931. n.tag = this.visitExpression(n.tag);
  932. const template = this.visitTemplateLiteral(n.template);
  933. if (template.type === "TemplateLiteral") {
  934. n.template = template;
  935. }
  936. return n;
  937. }
  938. visitSequenceExpression(n) {
  939. n.expressions = n.expressions.map(this.visitExpression.bind(this));
  940. return n;
  941. }
  942. visitRegExpLiteral(n) {
  943. return n;
  944. }
  945. visitParenthesisExpression(n) {
  946. n.expression = this.visitExpression(n.expression);
  947. return n;
  948. }
  949. visitObjectExpression(n) {
  950. if (n.properties) {
  951. n.properties = this.visitObjectProperties(n.properties);
  952. }
  953. return n;
  954. }
  955. visitObjectProperties(nodes) {
  956. return nodes.map(this.visitObjectProperty.bind(this));
  957. }
  958. visitObjectProperty(n) {
  959. switch (n.type) {
  960. case "SpreadElement":
  961. return this.visitSpreadElement(n);
  962. default:
  963. return this.visitProperty(n);
  964. }
  965. }
  966. visitProperty(n) {
  967. switch (n.type) {
  968. case "Identifier":
  969. return this.visitIdentifier(n);
  970. case "AssignmentProperty":
  971. return this.visitAssignmentProperty(n);
  972. case "GetterProperty":
  973. return this.visitGetterProperty(n);
  974. case "KeyValueProperty":
  975. return this.visitKeyValueProperty(n);
  976. case "MethodProperty":
  977. return this.visitMethodProperty(n);
  978. case "SetterProperty":
  979. return this.visitSetterProperty(n);
  980. }
  981. }
  982. visitSetterProperty(n) {
  983. n.key = this.visitPropertyName(n.key);
  984. n.param = this.visitPattern(n.param);
  985. if (n.body) {
  986. n.body = this.visitBlockStatement(n.body);
  987. }
  988. return n;
  989. }
  990. visitMethodProperty(n) {
  991. n.key = this.visitPropertyName(n.key);
  992. if (n.body) {
  993. n.body = this.visitBlockStatement(n.body);
  994. }
  995. n.decorators = this.visitDecorators(n.decorators);
  996. n.params = this.visitParameters(n.params);
  997. n.returnType = this.visitTsTypeAnnotation(n.returnType);
  998. n.typeParameters = this.visitTsTypeParameterDeclaration(n.typeParameters);
  999. return n;
  1000. }
  1001. visitKeyValueProperty(n) {
  1002. n.key = this.visitPropertyName(n.key);
  1003. n.value = this.visitExpression(n.value);
  1004. return n;
  1005. }
  1006. visitGetterProperty(n) {
  1007. n.key = this.visitPropertyName(n.key);
  1008. if (n.body) {
  1009. n.body = this.visitBlockStatement(n.body);
  1010. }
  1011. n.typeAnnotation = this.visitTsTypeAnnotation(n.typeAnnotation);
  1012. return n;
  1013. }
  1014. visitAssignmentProperty(n) {
  1015. n.key = this.visitIdentifier(n.key);
  1016. n.value = this.visitExpression(n.value);
  1017. return n;
  1018. }
  1019. visitNullLiteral(n) {
  1020. return n;
  1021. }
  1022. visitNewExpression(n) {
  1023. n.callee = this.visitExpression(n.callee);
  1024. if (n.arguments) {
  1025. n.arguments = this.visitArguments(n.arguments);
  1026. }
  1027. n.typeArguments = this.visitTsTypeArguments(n.typeArguments);
  1028. return n;
  1029. }
  1030. visitTsTypeArguments(n) {
  1031. if (n) {
  1032. n.params = this.visitTsTypes(n.params);
  1033. }
  1034. return n;
  1035. }
  1036. visitArguments(nodes) {
  1037. return nodes.map(this.visitArgument.bind(this));
  1038. }
  1039. visitArgument(n) {
  1040. n.expression = this.visitExpression(n.expression);
  1041. return n;
  1042. }
  1043. visitMetaProperty(n) {
  1044. return n;
  1045. }
  1046. visitMemberExpression(n) {
  1047. n.object = this.visitExpression(n.object);
  1048. switch (n.property.type) {
  1049. case 'Computed': {
  1050. n.property = this.visitComputedPropertyKey(n.property);
  1051. return n;
  1052. }
  1053. case 'Identifier': {
  1054. n.property = this.visitIdentifier(n.property);
  1055. return n;
  1056. }
  1057. case 'PrivateName': {
  1058. n.property = this.visitPrivateName(n.property);
  1059. return n;
  1060. }
  1061. }
  1062. }
  1063. visitSuperPropExpression(n) {
  1064. switch (n.property.type) {
  1065. case 'Computed': {
  1066. n.property = this.visitComputedPropertyKey(n.property);
  1067. return n;
  1068. }
  1069. case 'Identifier': {
  1070. n.property = this.visitIdentifier(n.property);
  1071. return n;
  1072. }
  1073. }
  1074. }
  1075. visitCallee(n) {
  1076. if (n.type === "Super" || n.type === "Import") {
  1077. return n;
  1078. }
  1079. return this.visitExpression(n);
  1080. }
  1081. visitJSXText(n) {
  1082. return n;
  1083. }
  1084. visitJSXNamespacedName(n) {
  1085. n.namespace = this.visitIdentifierReference(n.namespace);
  1086. n.name = this.visitIdentifierReference(n.name);
  1087. return n;
  1088. }
  1089. visitJSXMemberExpression(n) {
  1090. n.object = this.visitJSXObject(n.object);
  1091. n.property = this.visitIdentifierReference(n.property);
  1092. return n;
  1093. }
  1094. visitJSXObject(n) {
  1095. switch (n.type) {
  1096. case "Identifier":
  1097. return this.visitIdentifierReference(n);
  1098. case "JSXMemberExpression":
  1099. return this.visitJSXMemberExpression(n);
  1100. }
  1101. }
  1102. visitJSXFragment(n) {
  1103. n.opening = this.visitJSXOpeningFragment(n.opening);
  1104. if (n.children) {
  1105. n.children = this.visitJSXElementChildren(n.children);
  1106. }
  1107. n.closing = this.visitJSXClosingFragment(n.closing);
  1108. return n;
  1109. }
  1110. visitJSXClosingFragment(n) {
  1111. return n;
  1112. }
  1113. visitJSXElementChildren(nodes) {
  1114. return nodes.map(this.visitJSXElementChild.bind(this));
  1115. }
  1116. visitJSXElementChild(n) {
  1117. switch (n.type) {
  1118. case "JSXElement":
  1119. return this.visitJSXElement(n);
  1120. case "JSXExpressionContainer":
  1121. return this.visitJSXExpressionContainer(n);
  1122. case "JSXFragment":
  1123. return this.visitJSXFragment(n);
  1124. case "JSXSpreadChild":
  1125. return this.visitJSXSpreadChild(n);
  1126. case "JSXText":
  1127. return this.visitJSXText(n);
  1128. }
  1129. }
  1130. visitJSXExpressionContainer(n) {
  1131. n.expression = this.visitExpression(n.expression);
  1132. return n;
  1133. }
  1134. visitJSXSpreadChild(n) {
  1135. n.expression = this.visitExpression(n.expression);
  1136. return n;
  1137. }
  1138. visitJSXOpeningFragment(n) {
  1139. return n;
  1140. }
  1141. visitJSXEmptyExpression(n) {
  1142. return n;
  1143. }
  1144. visitJSXElement(n) {
  1145. n.opening = this.visitJSXOpeningElement(n.opening);
  1146. n.children = this.visitJSXElementChildren(n.children);
  1147. n.closing = this.visitJSXClosingElement(n.closing);
  1148. return n;
  1149. }
  1150. visitJSXClosingElement(n) {
  1151. if (n) {
  1152. n.name = this.visitJSXElementName(n.name);
  1153. }
  1154. return n;
  1155. }
  1156. visitJSXElementName(n) {
  1157. switch (n.type) {
  1158. case "Identifier":
  1159. return this.visitIdentifierReference(n);
  1160. case "JSXMemberExpression":
  1161. return this.visitJSXMemberExpression(n);
  1162. case "JSXNamespacedName":
  1163. return this.visitJSXNamespacedName(n);
  1164. }
  1165. }
  1166. visitJSXOpeningElement(n) {
  1167. n.name = this.visitJSXElementName(n.name);
  1168. n.typeArguments = this.visitTsTypeParameterInstantiation(n.typeArguments);
  1169. n.attributes = this.visitJSXAttributeOrSpreads(n.attributes);
  1170. return n;
  1171. }
  1172. visitJSXAttributes(attrs) {
  1173. if (attrs)
  1174. return attrs.map(this.visitJSXAttributeOrSpread.bind(this));
  1175. }
  1176. visitJSXAttributeOrSpread(n) {
  1177. switch (n.type) {
  1178. case "JSXAttribute":
  1179. return this.visitJSXAttribute(n);
  1180. case "SpreadElement":
  1181. return this.visitSpreadElement(n);
  1182. }
  1183. }
  1184. visitJSXAttributeOrSpreads(nodes) {
  1185. return nodes.map(this.visitJSXAttributeOrSpread.bind(this));
  1186. }
  1187. visitJSXAttribute(n) {
  1188. n.name = this.visitJSXAttributeName(n.name);
  1189. n.value = this.visitJSXAttributeValue(n.value);
  1190. return n;
  1191. }
  1192. visitJSXAttributeValue(n) {
  1193. if (!n)
  1194. return n;
  1195. switch (n.type) {
  1196. case "BooleanLiteral":
  1197. return this.visitBooleanLiteral(n);
  1198. case "NullLiteral":
  1199. return this.visitNullLiteral(n);
  1200. case "NumericLiteral":
  1201. return this.visitNumericLiteral(n);
  1202. case "JSXText":
  1203. return this.visitJSXText(n);
  1204. case "StringLiteral":
  1205. return this.visitStringLiteral(n);
  1206. case "JSXElement":
  1207. return this.visitJSXElement(n);
  1208. case "JSXExpressionContainer":
  1209. return this.visitJSXExpressionContainer(n);
  1210. case "JSXFragment":
  1211. return this.visitJSXFragment(n);
  1212. }
  1213. return n;
  1214. }
  1215. visitJSXAttributeName(n) {
  1216. switch (n.type) {
  1217. case "Identifier":
  1218. return this.visitIdentifierReference(n);
  1219. case "JSXNamespacedName":
  1220. return this.visitJSXNamespacedName(n);
  1221. }
  1222. }
  1223. visitConditionalExpression(n) {
  1224. n.test = this.visitExpression(n.test);
  1225. n.consequent = this.visitExpression(n.consequent);
  1226. n.alternate = this.visitExpression(n.alternate);
  1227. return n;
  1228. }
  1229. visitCallExpression(n) {
  1230. n.callee = this.visitCallee(n.callee);
  1231. n.typeArguments = this.visitTsTypeParameterInstantiation(n.typeArguments);
  1232. if (n.arguments) {
  1233. n.arguments = this.visitArguments(n.arguments);
  1234. }
  1235. return n;
  1236. }
  1237. visitBooleanLiteral(n) {
  1238. return n;
  1239. }
  1240. visitBinaryExpression(n) {
  1241. n.left = this.visitExpression(n.left);
  1242. n.right = this.visitExpression(n.right);
  1243. return n;
  1244. }
  1245. visitAwaitExpression(n) {
  1246. n.argument = this.visitExpression(n.argument);
  1247. return n;
  1248. }
  1249. visitTsTypeParameterDeclaration(n) {
  1250. if (n) {
  1251. n.parameters = this.visitTsTypeParameters(n.parameters);
  1252. }
  1253. return n;
  1254. }
  1255. visitTsTypeParameters(nodes) {
  1256. return nodes.map(this.visitTsTypeParameter.bind(this));
  1257. }
  1258. visitTsTypeParameter(n) {
  1259. if (n.constraint) {
  1260. n.constraint = this.visitTsType(n.constraint);
  1261. }
  1262. if (n.default) {
  1263. n.default = this.visitTsType(n.default);
  1264. }
  1265. n.name = this.visitIdentifierReference(n.name);
  1266. return n;
  1267. }
  1268. visitTsTypeAnnotation(a) {
  1269. if (a) {
  1270. a.typeAnnotation = this.visitTsType(a.typeAnnotation);
  1271. }
  1272. return a;
  1273. }
  1274. visitTsType(n) {
  1275. throw new Error("Method visitTsType not implemented.");
  1276. }
  1277. visitPatterns(nodes) {
  1278. return nodes.map(this.visitPattern.bind(this));
  1279. }
  1280. visitImportDeclaration(n) {
  1281. n.source = this.visitStringLiteral(n.source);
  1282. n.specifiers = this.visitImportSpecifiers(n.specifiers || []);
  1283. return n;
  1284. }
  1285. visitImportSpecifiers(nodes) {
  1286. return nodes.map(this.visitImportSpecifier.bind(this));
  1287. }
  1288. visitImportSpecifier(node) {
  1289. switch (node.type) {
  1290. case "ImportDefaultSpecifier":
  1291. return this.visitImportDefaultSpecifier(node);
  1292. case "ImportNamespaceSpecifier":
  1293. return this.visitImportNamespaceSpecifier(node);
  1294. case "ImportSpecifier":
  1295. return this.visitNamedImportSpecifier(node);
  1296. }
  1297. }
  1298. visitNamedImportSpecifier(node) {
  1299. node.local = this.visitBindingIdentifier(node.local);
  1300. if (node.imported) {
  1301. node.imported = this.visitModuleExportName(node.imported);
  1302. }
  1303. return node;
  1304. }
  1305. visitImportNamespaceSpecifier(node) {
  1306. node.local = this.visitBindingIdentifier(node.local);
  1307. return node;
  1308. }
  1309. visitImportDefaultSpecifier(node) {
  1310. node.local = this.visitBindingIdentifier(node.local);
  1311. return node;
  1312. }
  1313. visitBindingIdentifier(i) {
  1314. if (i.typeAnnotation) {
  1315. i.typeAnnotation = this.visitTsTypeAnnotation(i.typeAnnotation);
  1316. }
  1317. return this.visitIdentifier(i);
  1318. }
  1319. visitIdentifierReference(i) {
  1320. return this.visitIdentifier(i);
  1321. }
  1322. visitLabelIdentifier(label) {
  1323. return this.visitIdentifier(label);
  1324. }
  1325. visitIdentifier(n) {
  1326. return n;
  1327. }
  1328. visitStringLiteral(n) {
  1329. return n;
  1330. }
  1331. visitNumericLiteral(n) {
  1332. return n;
  1333. }
  1334. visitBigIntLiteral(n) {
  1335. return n;
  1336. }
  1337. visitPattern(n) {
  1338. switch (n.type) {
  1339. case "Identifier":
  1340. return this.visitBindingIdentifier(n);
  1341. case "ArrayPattern":
  1342. return this.visitArrayPattern(n);
  1343. case "ObjectPattern":
  1344. return this.visitObjectPattern(n);
  1345. case "AssignmentPattern":
  1346. return this.visitAssignmentPattern(n);
  1347. case "RestElement":
  1348. return this.visitRestElement(n);
  1349. default:
  1350. return this.visitExpression(n);
  1351. }
  1352. }
  1353. visitRestElement(n) {
  1354. n.argument = this.visitPattern(n.argument);
  1355. n.typeAnnotation = this.visitTsTypeAnnotation(n.typeAnnotation);
  1356. return n;
  1357. }
  1358. visitAssignmentPattern(n) {
  1359. n.left = this.visitPattern(n.left);
  1360. n.right = this.visitExpression(n.right);
  1361. n.typeAnnotation = this.visitTsTypeAnnotation(n.typeAnnotation);
  1362. return n;
  1363. }
  1364. visitObjectPattern(n) {
  1365. n.properties = this.visitObjectPatternProperties(n.properties || []);
  1366. n.typeAnnotation = this.visitTsTypeAnnotation(n.typeAnnotation);
  1367. return n;
  1368. }
  1369. visitObjectPatternProperties(nodes) {
  1370. return nodes.map(this.visitObjectPatternProperty.bind(this));
  1371. }
  1372. visitObjectPatternProperty(n) {
  1373. switch (n.type) {
  1374. case "AssignmentPatternProperty":
  1375. return this.visitAssignmentPatternProperty(n);
  1376. case "KeyValuePatternProperty":
  1377. return this.visitKeyValuePatternProperty(n);
  1378. case "RestElement":
  1379. return this.visitRestElement(n);
  1380. }
  1381. }
  1382. visitKeyValuePatternProperty(n) {
  1383. n.key = this.visitPropertyName(n.key);
  1384. n.value = this.visitPattern(n.value);
  1385. return n;
  1386. }
  1387. visitAssignmentPatternProperty(n) {
  1388. n.key = this.visitBindingIdentifier(n.key);
  1389. n.value = this.visitOptionalExpression(n.value);
  1390. return n;
  1391. }
  1392. visitArrayPattern(n) {
  1393. n.typeAnnotation = this.visitTsTypeAnnotation(n.typeAnnotation);
  1394. n.elements = this.visitArrayPatternElements(n.elements);
  1395. return n;
  1396. }
  1397. visitArrayPatternElements(nodes) {
  1398. return nodes.map(this.visitArrayPatternElement.bind(this));
  1399. }
  1400. visitArrayPatternElement(n) {
  1401. if (n) {
  1402. n = this.visitPattern(n);
  1403. }
  1404. return n;
  1405. }
  1406. }
  1407. exports.Visitor = Visitor;
  1408. exports.default = Visitor;