MetadataTransformer.ts 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import { inject, injectable, } from 'inversify';
  2. import { ServiceIdentifiers } from '../../container/ServiceIdentifiers';
  3. import * as ESTree from 'estree';
  4. import { IOptions } from '../../interfaces/options/IOptions';
  5. import { IRandomGenerator } from '../../interfaces/utils/IRandomGenerator';
  6. import { IVisitor } from '../../interfaces/node-transformers/IVisitor';
  7. import { TransformationStage } from '../../enums/node-transformers/TransformationStage';
  8. import { AbstractNodeTransformer } from '../AbstractNodeTransformer';
  9. import { NodeGuards } from '../../node/NodeGuards';
  10. import { NodeMetadata } from '../../node/NodeMetadata';
  11. /**
  12. * Adds metadata properties to each node
  13. */
  14. @injectable()
  15. export class MetadataTransformer extends AbstractNodeTransformer {
  16. /**
  17. * @param {IRandomGenerator} randomGenerator
  18. * @param {IOptions} options
  19. */
  20. constructor (
  21. @inject(ServiceIdentifiers.IRandomGenerator) randomGenerator: IRandomGenerator,
  22. @inject(ServiceIdentifiers.IOptions) options: IOptions
  23. ) {
  24. super(randomGenerator, options);
  25. }
  26. /**
  27. * @param {TransformationStage} transformationStage
  28. * @returns {IVisitor | null}
  29. */
  30. public getVisitor (transformationStage: TransformationStage): IVisitor | null {
  31. switch (transformationStage) {
  32. case TransformationStage.Preparing:
  33. return {
  34. enter: (node: ESTree.Node, parentNode: ESTree.Node | null) => {
  35. return this.transformNode(node, parentNode);
  36. }
  37. };
  38. default:
  39. return null;
  40. }
  41. }
  42. /**
  43. * @param {Node} node
  44. * @param {Node} parentNode
  45. * @returns {Node}
  46. */
  47. public transformNode (node: ESTree.Node, parentNode: ESTree.Node | null): ESTree.Node {
  48. NodeMetadata.set(node, { ignoredNode: false });
  49. if (NodeGuards.isIdentifierNode(node)) {
  50. NodeMetadata.set(node, { renamedIdentifier: false });
  51. }
  52. if (NodeGuards.isLiteralNode(node)) {
  53. NodeMetadata.set(node, { replacedLiteral: false });
  54. }
  55. return node;
  56. }
  57. }