Documentation
    Preparing search index...

    Function moduleCaller

    • The moduleCaller works around a very specific pattern we use with AdonisJS, ie to construct classes and call methods using the container.

      For example: Controllers of AdonisJS allows defining a controller as follows

      route.get('/', [HomeController, 'index'])
      

      Behind the scenes, we have to run following operations in order to call the handle method on the defined middleware.

      • Create an instance of the controller class using the container.
      • Call the method using the container. Hence having the ability to use DI

      Parameters

      • target: Constructor<any>
      • method: string

      Returns {
          toCallable<
              T extends
                  undefined
                  | ContainerResolver<any>
                  | Container<any> = undefined,
              Args extends any[] = any[],
          >(
              container?: T,
          ): ModuleCallable<T, Args>;
          toHandleMethod<
              T extends
                  undefined
                  | ContainerResolver<any>
                  | Container<any> = undefined,
              Args extends any[] = any[],
          >(
              container?: T,
          ): ModuleHandler<T, Args>;
      }

      • toCallable: function
        • Converts the class reference to a callable function. Invoking this method internally creates a new instance of the class using the container and invokes the method using the container.

          You can create a callable function using the container instance as shown below

          const fn = moduleCaller(HomeController, 'handle')
          .toCallable(container)

          // Call the function and pass context to it
          await fn(ctx)

          Another option is to not pass the container at the time of creating the callable function, but instead pass a resolver instance at the time of calling the function

          const fn = moduleCaller(HomeController, 'handle')
          .toCallable()

          // Call the function and pass context to it
          const resolver = container.createResolver()
          await fn(resolver, ctx)

          Type Parameters

          Parameters

          • Optionalcontainer: T

          Returns ModuleCallable<T, Args>

      • toHandleMethod: function
        • Converts the class reference to an object with handle method. Invoking this method internally creates a new instance of the class using the container and invokes the method using the container.

          You can create a handle method object using the container instance as shown below

          const handler = moduleCaller(HomeController, 'handle')
          .toHandleMethod(container)

          // Call the function and pass context to it
          await handler.handle(ctx)

          Another option is to not pass the container at the time of creating the handle method object, but instead pass a resolver instance at the time of calling the function

          const handler = moduleCaller(HomeController, 'handle')
          .toHandleMethod()

          // Call the function and pass context to it
          const resolver = container.createResolver()
          await handler.handle(resolver, ctx)

          Type Parameters

          Parameters

          • Optionalcontainer: T

          Returns ModuleHandler<T, Args>