ContextNode.js 817 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import Node from './Node.js';
  2. class ContextNode extends Node {
  3. constructor( node, type, context = {} ) {
  4. super( type );
  5. this.node = node;
  6. this.context = context;
  7. Object.defineProperty( this, 'isContextNode', { value: true } );
  8. }
  9. setContextValue( name, value ) {
  10. this.context[ name ] = value;
  11. return this;
  12. }
  13. getContextValue( name ) {
  14. return this.context[ name ];
  15. }
  16. getType( builder ) {
  17. return this.node.getType( builder );
  18. }
  19. generate( builder, output ) {
  20. const type = this.getType( builder );
  21. const previousContext = builder.getContext();
  22. builder.setContext( Object.assign( {}, builder.context, this.context ) );
  23. const snippet = this.node.build( builder, output );
  24. builder.setContext( previousContext );
  25. return snippet;
  26. }
  27. }
  28. export default ContextNode;