import Blockly from 'blockly';
declare module 'blockly' {
  interface WorkspaceSvg {
    highlightBlock(id?: string, state?: boolean): void;
    highlightedBlocks_: Block[];
  }

  interface BlocklyOptions {
    plugins?: { [key: string]: any };
  }
  const Themes: any;

  interface GeneratorMap {
    [blockType: string]: (block: Block) => string | [string, number] | null;
  }

  interface JavaScriptOrder {
    /** 0 "" ... */ readonly ORDER_ATOMIC: number;
    /**  new */ readonly ORDER_NEW: number;
    /**  . [] */ readonly ORDER_MEMBER: number;
    /**  () */ readonly ORDER_FUNCTION_CALL: number;
    /**  ++ */ readonly ORDER_INCREMENT: number;
    /**  -- */ readonly ORDER_DECREMENT: number;
    /**  ~ */ readonly ORDER_BITWISE_NOT: number;
    /**  + */ readonly ORDER_UNARY_PLUS: number;
    /**  - */ readonly ORDER_UNARY_NEGATION: number;
    /**  ! */ readonly ORDER_LOGICAL_NOT: number;
    /**  typeof */ readonly ORDER_TYPEOF: number;
    /**  void */ readonly ORDER_VOID: number;
    /**  delete */ readonly ORDER_DELETE: number;
    /**  await */ readonly ORDER_AWAIT: number;
    /**  ** */ readonly ORDER_EXPONENTIATION: number;
    /**  * */ readonly ORDER_MULTIPLICATION: number;
    /**  / */ readonly ORDER_DIVISION: number;
    /**  % */ readonly ORDER_MODULUS: number;
    /**  - */ readonly ORDER_SUBTRACTION: number;
    /**  + */ readonly ORDER_ADDITION: number;
    /**  << >> >>> */ readonly ORDER_BITWISE_SHIFT: number;
    /**  < <= > >= */ readonly ORDER_RELATIONAL: number;
    /**  in */ readonly ORDER_IN: number;
    /**  instanceof */ readonly ORDER_INSTANCEOF: number;
    /**  == != === !== */ readonly ORDER_EQUALITY: number;
    /**  & */ readonly ORDER_BITWISE_AND: number;
    /**  ^ */ readonly ORDER_BITWISE_XOR: number;
    /**  | */ readonly ORDER_BITWISE_OR: number;
    /**  && */ readonly ORDER_LOGICAL_AND: number;
    /**  || */ readonly ORDER_LOGICAL_OR: number;
    /**  ?: */ readonly ORDER_CONDITIONAL: number;
    /**  = += -= **= *= /= %= <<= >>= ... */ readonly ORDER_ASSIGNMENT: number;
    /**  yield */ readonly ORDER_YIELD: number;
    /**  , */ readonly ORDER_COMMA: number;
    /**  (...) */ readonly ORDER_NONE: number;
  }

  const JavaScript: Generator & GeneratorMap & JavaScriptOrder;
}
