NodeMetadata.ts 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import * as ESTree from 'estree';
  2. export class NodeMetadata {
  3. /**
  4. * @param {T} node
  5. * @param {Partial<T["metadata"]>} metadata
  6. */
  7. public static set <T extends ESTree.Node = ESTree.Node> (node: T, metadata: Partial<T['metadata']>): void {
  8. node.metadata = Object.assign(node.metadata ?? {}, metadata);
  9. }
  10. /**
  11. * @param {Node} node
  12. * @param {keyof T} metadataKey
  13. * @returns {T[keyof T] | undefined}
  14. */
  15. public static get <T extends ESTree.BaseNodeMetadata> (node: ESTree.Node, metadataKey: keyof T): T[keyof T] | undefined {
  16. return node.metadata !== undefined
  17. ? (<T>node.metadata)[metadataKey]
  18. : undefined;
  19. }
  20. /**
  21. * @param {Node} node
  22. * @returns {boolean}
  23. */
  24. public static isForceTransformNode (node: ESTree.Node): boolean {
  25. return NodeMetadata.get(node, 'forceTransformNode') === true;
  26. }
  27. /**
  28. * @param {Node} node
  29. * @returns {boolean}
  30. */
  31. public static isIgnoredNode (node: ESTree.Node): boolean {
  32. return NodeMetadata.get(node, 'ignoredNode') === true;
  33. }
  34. /**
  35. * @param {Node} literalNode
  36. * @returns {boolean}
  37. */
  38. public static isReplacedLiteral (literalNode: ESTree.Literal): boolean {
  39. return NodeMetadata.get<ESTree.LiteralNodeMetadata>(literalNode, 'replacedLiteral') === true;
  40. }
  41. }