💉
aquinas
API

Injectables

injectables are just objects

Injectables

Injectables are objects that represent the implementation of a reference.

Use

implements

Create an injectable and implement it by using the injectable function:

import { injectable } from "aquinas";
import { UserServiceReference } from "./user-service.reference";

const UserService = injectable(UserServiceReference)
    .implements(() => ({
        async getUser(id) {
            ...
        },
    }));

deps

Declare dependencies for your injectable using the deps method:

import { injectable } from "aquinas";
import { UserRepositoryReference } from "./user.repository.reference";
import { NotificationServiceReference } from "./notification.service.reference";
import { RegisterUserUsecaseReference } from "./register-user.usecase.reference";

const RegisterUserUsecase = injectable(RegisterUserUsecaseReference)
    .deps({
        userRepository: UserRepositoryReference,
        notificationService: NotificationServiceReference,
    })
    .implements(() => ({
        async getUser(id) {
            const user = await this.userRepository.findById(id);

            await this.notificationService.notifyUserAccess(id);

            return user;
        },
    }));

init

Use the init method to run synchronous initialization logic before implementing the injectable:

import { injectable } from "aquinas";
import { createUtils } from "./utils";
import { UserRepositoryReference } from "./user-repository.reference";

const UserRepository = injectable(UserRepositoryReference)
    .init(() => {
        const utils = createUtils()

        return {
            utils
        }
    })
    .implements(({ utils }) => ({
        async findById(id) {
            ...
        },
    }));

To register your injectable, check next section on docks.