code: Node createAsyncGeneratorWrapperReference(JSType originalFunctionType, Scope scope) {
      Node ctor = createQName(scope, "$jscomp.AsyncGeneratorWrapper");
  
      if (isAddingTypes() && !ctor.getJSType().isUnknownType()) {
        // if ctor has the unknown type, we must have not injected the required runtime
        // libraries - hopefully because this is in a test using NonInjectingCompiler.
  
        // e.g get `number` from `AsyncIterable<number>`
        JSType yieldedType =
            originalFunctionType
                .toMaybeFunctionType()
                .getReturnType()
                .getInstantiatedTypeArgument(getNativeType(JSTypeNative.ASYNC_ITERABLE_TYPE));
  
        // e.g. replace
        //  AsyncGeneratorWrapper<T>
        // with
        //  AsyncGeneratorWrapper<number>
        ctor.setJSType(replaceTemplate(ctor.getJSType(), yieldedType));
      }
  
      return ctor;
    }
docs: Creates a reference to $jscomp.AsyncGeneratorWrapper with the template filled in to match the
  original function.
  
  @param originalFunctionType the type of the async generator function that needs transpilation