docs: function transpileDerivedExchangeFile (folder, filename) {
  
      try {
  
          let contents = fs.readFileSync (folder + filename, 'utf8')
  
          let { python2, python3, php, className, baseClass } = transpileDerivedExchangeClass (contents)
  
          const python2Filename = python2Folder + filename.replace ('.js', '.py')
          const python3Filename = python3Folder + filename.replace ('.js', '.py')
          const phpFilename     = phpFolder     + filename.replace ('.js', '.php')
  
          log.cyan ('Transpiling from', filename.yellow)
  
          overwriteFile (python2Filename, python2)
          overwriteFile (python3Filename, python3)
          overwriteFile (phpFilename,     php)
  
          return { className, baseClass }
  
      } catch (e) {
  
          log.red ('\nFailed to transpile source code from', filename.yellow)
          log.red ('See https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md on how to build this library properly\n')
          throw e // rethrow it
      }
  }