NodeMocks.ts 6.2 KB

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