MethodDefinitionTransformer.ts 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import { injectable, inject } from 'inversify';
  2. import { ServiceIdentifiers } from '../../container/ServiceIdentifiers';
  3. import * as ESTree from 'estree';
  4. import { IOptions } from '../../interfaces/options/IOptions';
  5. import { NodeType } from '../../enums/NodeType';
  6. import { AbstractNodeTransformer } from '../AbstractNodeTransformer';
  7. import { Node } from '../../node/Node';
  8. /**
  9. * replaces:
  10. * foo () { //... };
  11. *
  12. * on:
  13. * ['foo'] { //... };
  14. *
  15. * Literal node will be obfuscated by LiteralTransformer
  16. */
  17. @injectable()
  18. export class MethodDefinitionTransformer extends AbstractNodeTransformer {
  19. /**
  20. * @type {string[]}
  21. */
  22. private static readonly ignoredNames: string[] = ['constructor'];
  23. /**
  24. * @param options
  25. */
  26. constructor (
  27. @inject(ServiceIdentifiers.IOptions) options: IOptions
  28. ) {
  29. super(options);
  30. }
  31. /**
  32. * replaces:
  33. * object.identifier = 1;
  34. *
  35. * on:
  36. * object['identifier'] = 1;
  37. *
  38. * and skip:
  39. * object[identifier] = 1;
  40. * Literal node will be obfuscated by LiteralTransformer
  41. *
  42. * @param methodDefinitionNode
  43. * @param parentNode
  44. * @returns {ESTree.Node}
  45. */
  46. public transformNode (methodDefinitionNode: ESTree.MethodDefinition, parentNode: ESTree.Node): ESTree.Node {
  47. if (
  48. Node.isIdentifierNode(methodDefinitionNode.key) &&
  49. !MethodDefinitionTransformer.ignoredNames.includes(methodDefinitionNode.key.name) &&
  50. methodDefinitionNode.computed === false
  51. ) {
  52. methodDefinitionNode.computed = true;
  53. methodDefinitionNode.key = {
  54. type: NodeType.Literal,
  55. value: methodDefinitionNode.key.name,
  56. raw: `'${methodDefinitionNode.key.name}'`
  57. };
  58. }
  59. return methodDefinitionNode;
  60. }
  61. }