Nodes.ts 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. import { IBlockStatementNode } from "./interfaces/nodes/IBlockStatementNode";
  2. import { IIdentifierNode } from "./interfaces/nodes/IIdentifierNode";
  3. import { ILiteralNode } from "./interfaces/nodes/ILiteralNode";
  4. import { IMemberExpressionNode } from "./interfaces/nodes/IMemberExpressionNode";
  5. import { INode } from "./interfaces/nodes/INode";
  6. import { IProgramNode } from "./interfaces/nodes/IProgramNode";
  7. import { IPropertyNode } from "./interfaces/nodes/IPropertyNode";
  8. import { IVariableDeclaratorNode } from "./interfaces/nodes/IVariableDeclaratorNode";
  9. import { TStatement } from "./types/nodes/TStatement";
  10. import { TNodeWithBlockStatement } from "./types/TNodeWithBlockStatement";
  11. import { NodeType } from "./enums/NodeType";
  12. export class Nodes {
  13. /**
  14. * @param bodyNode
  15. * @returns IProgramNode
  16. */
  17. public static getProgramNode (bodyNode: TStatement[]): IProgramNode {
  18. let programNode: IProgramNode = {
  19. 'type': NodeType.Program,
  20. 'body': bodyNode,
  21. 'sourceType': 'script'
  22. };
  23. return programNode;
  24. }
  25. /**
  26. * @param node
  27. * @returns {boolean}
  28. */
  29. public static isBlockStatementNode (node: INode): node is IBlockStatementNode {
  30. return node.type === NodeType.BlockStatement;
  31. }
  32. /**
  33. * @param node
  34. * @returns {boolean}
  35. */
  36. public static isIdentifierNode (node: INode): node is IIdentifierNode {
  37. return node.type === NodeType.Identifier;
  38. }
  39. /**
  40. * @param node
  41. * @returns {boolean}
  42. */
  43. public static isLiteralNode (node: INode): node is ILiteralNode {
  44. return node.type === NodeType.Literal;
  45. }
  46. /**
  47. * @param node
  48. * @returns {boolean}
  49. */
  50. public static isMemberExpressionNode (node: INode): node is IMemberExpressionNode {
  51. return node.type === NodeType.MemberExpression;
  52. }
  53. /**
  54. *
  55. * @param node
  56. * @returns {boolean}
  57. */
  58. public static isProgramNode (node: INode): node is IProgramNode {
  59. return node.type === NodeType.Program;
  60. }
  61. /**
  62. *
  63. * @param node
  64. * @returns {boolean}
  65. */
  66. public static isPropertyNode (node: INode): node is IPropertyNode {
  67. return node.type === NodeType.Property;
  68. }
  69. /**
  70. *
  71. * @param node
  72. * @returns {boolean}
  73. */
  74. public static isVariableDeclaratorNode (node: INode): node is IVariableDeclaratorNode {
  75. return node.type === NodeType.VariableDeclarator;
  76. }
  77. /**
  78. * @param node
  79. * @returns {boolean}
  80. */
  81. public static isNodeHasBlockStatement (node: INode): node is TNodeWithBlockStatement {
  82. return node.hasOwnProperty('body') && Array.isArray((<TNodeWithBlockStatement>node).body);
  83. }
  84. }