@Override
  protected ScriptedMetricAggregatorFactory doBuild(
      AggregationContext context, AggregatorFactory<?> parent, Builder subfactoriesBuilder)
      throws IOException {

    QueryShardContext queryShardContext = context.searchContext().getQueryShardContext();
    Function<Map<String, Object>, ExecutableScript> executableInitScript;
    if (initScript != null) {
      executableInitScript =
          queryShardContext.getLazyExecutableScript(initScript, ScriptContext.Standard.AGGS);
    } else {
      executableInitScript = (p) -> null;
      ;
    }
    Function<Map<String, Object>, SearchScript> searchMapScript =
        queryShardContext.getLazySearchScript(mapScript, ScriptContext.Standard.AGGS);
    Function<Map<String, Object>, ExecutableScript> executableCombineScript;
    if (combineScript != null) {
      executableCombineScript =
          queryShardContext.getLazyExecutableScript(combineScript, ScriptContext.Standard.AGGS);
    } else {
      executableCombineScript = (p) -> null;
    }
    return new ScriptedMetricAggregatorFactory(
        name,
        type,
        searchMapScript,
        executableInitScript,
        executableCombineScript,
        reduceScript,
        params,
        context,
        parent,
        subfactoriesBuilder,
        metaData);
  }