Loads the source, transpiles and analyses the code, storing the result in outputPath

@param callback
{Function} callback for when the load is completed
function(callback) {
      var t = this;
      var className = this.__className;
      t.__fatalCompileError = false;
      t.__numClassesDefined = 0;

      fs.readFile(this.getSourcePath(), {encoding: "utf-8"}, function(err, src) {
        if (err) {
          callback(err);
          return;
        }

        try {
          let options = t.__analyser.getBabelOptions() || {};
          options.modules = false;
          var config = {
              babelrc: false,
              sourceFileName : t.getSourcePath(),
              filename: t.getSourcePath(),
              sourceMaps: true,
              "presets": [
                [ require.resolve("@babel/preset-env"), options]
              ],
              plugins: [
                t._babelClassPlugin()
              ],
              parserOpts: { sourceType: "script" },
              passPerPreset: true
            };
          var result = babelCore.transform(src, config);
        } catch (ex) {
          if (ex._babel) {
            console.log(ex);
          }
          t.addMarker("compiler.syntaxError", ex.loc, ex.message, ex.codeFrame);
          t.__fatalCompileError = true;
          t._compileDbClassInfo();
          callback();
          return;
        }
        
        if (!t.__numClassesDefined) {
          t.addMarker("compiler.missingClassDef");
          t.__fatalCompileError = true;
          t._compileDbClassInfo();
          callback();
          return;
        }

        if (!t.__metaDefinitions[className]) {
          t.addMarker("compiler.wrongClassName", null, className, Object.keys(t.__metaDefinitions).join(", "));
          t._compileDbClassInfo();
        }

        var pos = className.lastIndexOf("."); 
        var name = pos > -1 ? className.substring(pos + 1) : className;
        var outputPath = t.getOutputPath();
        util.mkParentPath(outputPath, function(err) {
          if (err) {
            callback(err);
            return;
          }
          fs.writeFile(outputPath, result.code + "\n\n//# sourceMappingURL=" + name + ".js.map?dt=" + (new Date().getTime()), {encoding: "utf-8"}, function(err) {
            if (err) {
              callback(err);
              return;
            }
            fs.writeFile(outputPath + ".map", JSON.stringify(result.map, null, 2), {encoding: "utf-8"}, function(err) {
              if (err) {
                callback(err);
                return;
              }
              t._waitForTaskQueueDrain(function() {
                callback();
              });
            });
          });
        });
      });
    }