NodeMocks.ts 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. import * as escodegen from 'escodegen';
  2. import { TExpression } from "../../src/types/nodes/TExpression";
  3. import { TStatement } from "../../src/types/nodes/TStatement";
  4. import { IBlockStatementNode } from "../../src/interfaces/nodes/IBlockStatementNode";
  5. import { ICallExpressionNode } from "../../src/interfaces/nodes/ICallExpressionNode";
  6. import { ICatchClauseNode } from "../../src/interfaces/nodes/ICatchClauseNode";
  7. import { IExpressionStatementNode } from "../../src/interfaces/nodes/IExpressionStatementNode";
  8. import { IFunctionDeclarationNode } from "../../src/interfaces/nodes/IFunctionDeclarationNode";
  9. import { IIdentifierNode } from "../../src/interfaces/nodes/IIdentifierNode";
  10. import { IIfStatementNode } from "../../src/interfaces/nodes/IIfStatementNode";
  11. import { ILiteralNode } from "../../src/interfaces/nodes/ILiteralNode";
  12. import { IMemberExpressionNode } from "../../src/interfaces/nodes/IMemberExpressionNode";
  13. import { IProgramNode } from "../../src/interfaces/nodes/IProgramNode";
  14. import { ISpreadElementNode } from "../../src/interfaces/nodes/ISpreadElementNode";
  15. import { IVariableDeclarationNode } from "../../src/interfaces/nodes/IVariableDeclarationNode";
  16. import { IVariableDeclaratorNode } from "../../src/interfaces/nodes/IVariableDeclaratorNode";
  17. import { NodeType } from "../../src/enums/NodeType";
  18. export class NodeMocks {
  19. /**
  20. * @param bodyNodes
  21. * @returns {IProgramNode}
  22. */
  23. public static getProgramNode (bodyNodes: TStatement[] = []): IProgramNode {
  24. return {
  25. type: NodeType.Program,
  26. body: bodyNodes,
  27. sourceType: 'script'
  28. };
  29. }
  30. /**
  31. * @param bodyNodes
  32. * @returns {IBlockStatementNode}
  33. */
  34. public static getBlockStatementNode (bodyNodes: TStatement[] = []): IBlockStatementNode {
  35. return {
  36. type: NodeType.BlockStatement,
  37. body: bodyNodes
  38. };
  39. }
  40. /**
  41. * @param bodyNodes
  42. * @returns {ICatchClauseNode}
  43. */
  44. public static getCatchClauseNode (bodyNodes: TStatement[] = []): ICatchClauseNode {
  45. return {
  46. type: NodeType.CatchClause,
  47. param: NodeMocks.getIdentifierNode('err'),
  48. body: NodeMocks.getBlockStatementNode(bodyNodes)
  49. };
  50. }
  51. /**
  52. * @param callee
  53. * @param args
  54. * @returns {ICallExpressionNode}
  55. */
  56. public static getCallExpressionNode (
  57. callee: TExpression,
  58. args: TExpression[] | ISpreadElementNode[] = []
  59. ): ICallExpressionNode {
  60. return {
  61. type: NodeType.CallExpression,
  62. callee: callee,
  63. arguments: args
  64. };
  65. }
  66. /**
  67. * @param expression
  68. * @returns {IExpressionStatementNode}
  69. */
  70. public static getExpressionStatementNode (
  71. expression: TExpression = NodeMocks.getIdentifierNode()
  72. ): IExpressionStatementNode {
  73. return {
  74. type: NodeType.ExpressionStatement,
  75. expression: expression
  76. };
  77. }
  78. /**
  79. * @param functionName
  80. * @param blockStatementNode
  81. * @param params
  82. * @returns {IFunctionDeclarationNode}
  83. */
  84. public static getFunctionDeclarationNode (
  85. functionName: string,
  86. blockStatementNode: IBlockStatementNode,
  87. params: IIdentifierNode[] = []
  88. ): IFunctionDeclarationNode {
  89. return {
  90. type: NodeType.FunctionDeclaration,
  91. id: NodeMocks.getIdentifierNode(functionName),
  92. params: params,
  93. body: blockStatementNode,
  94. generator: false,
  95. expression: false
  96. };
  97. }
  98. /**
  99. * @param blockStatementNode
  100. * @returns {IIfStatementNode}
  101. */
  102. public static getIfStatementNode (blockStatementNode: IBlockStatementNode): IIfStatementNode {
  103. return {
  104. type: 'IfStatement',
  105. test: {
  106. type: 'Literal',
  107. value: true,
  108. raw: 'true'
  109. },
  110. consequent: blockStatementNode,
  111. alternate: null
  112. };
  113. }
  114. /**
  115. * @param identifierName
  116. * @returns {IIdentifierNode}
  117. */
  118. public static getIdentifierNode (identifierName: string = 'identifier'): IIdentifierNode {
  119. return {
  120. type: NodeType.Identifier,
  121. name: identifierName,
  122. };
  123. }
  124. /**
  125. * @param value
  126. * @returns {ILiteralNode}
  127. */
  128. public static getLiteralNode (value: boolean|number|string = 'value'): ILiteralNode {
  129. return {
  130. type: NodeType.Literal,
  131. value: value,
  132. raw: `'${value}'`,
  133. 'x-verbatim-property': {
  134. content: `'${value}'`,
  135. precedence: escodegen.Precedence.Primary
  136. }
  137. };
  138. }
  139. /**
  140. * @param object
  141. * @param property
  142. * @return {IMemberExpressionNode}
  143. */
  144. public static getMemberExpressionNode (
  145. object: IIdentifierNode,
  146. property: IIdentifierNode|ILiteralNode
  147. ): IMemberExpressionNode {
  148. return {
  149. type: NodeType.MemberExpression,
  150. computed: false,
  151. object: object,
  152. property: property
  153. };
  154. }
  155. /**
  156. * @param declarations
  157. * @param kind
  158. * @returns {IVariableDeclarationNode}
  159. */
  160. public static getVariableDeclarationNode (
  161. declarations: IVariableDeclaratorNode[] = [],
  162. kind: string = 'var'
  163. ): IVariableDeclarationNode {
  164. return {
  165. type: NodeType.VariableDeclaration,
  166. declarations: declarations,
  167. kind: kind
  168. };
  169. }
  170. /**
  171. * @param id
  172. * @param init
  173. * @returns {IVariableDeclaratorNode}
  174. */
  175. public static getVariableDeclaratorNode (id: IIdentifierNode, init: any): IVariableDeclaratorNode {
  176. return {
  177. type: NodeType.VariableDeclarator,
  178. id: id,
  179. init: init
  180. };
  181. }
  182. }