DirectusContextService
Usage
import { DirectusContextService } from "@tsed/third-parties/directus-sdk/src/services/DirectusContextService";See /packages/third-parties/directus-sdk/src/services/DirectusContextService.ts.
Overview
class DirectusContextService {
set(ctx: DirectusContext): void;
get(): DirectusContext;
getItemsService<T extends Item = Item, Collection extends string = string>(collection: Collection, options?: any): Promise<import("@directus/types").AbstractService<T>>;
}Description
Service to manage and access Directus context within Ts.ED dependency injection container.
This service provides a bridge between Directus extensions and Ts.ED's DI system, allowing you to access the Directus context and its services from anywhere in your code.
The context is automatically set by wrapEndpoint, wrapOperation, and defineHook wrappers, making it available through the DI container.
Accessing context in a custom service
import {Injectable} from "@tsed/di";
import {DirectusContextService} from "@tsed/directus-sdk";
@Injectable()
export class MyService {
directusContext = inject(DirectusContextService);
async doSomething() {
const context = this.directusContext.get();
const schema = await context.getSchema();
// Use schema...
}
}Using inject() to get the service
import {inject} from "@tsed/di";
import {DirectusContextService} from "@tsed/directus-sdk";
const contextService = inject(DirectusContextService);
const context = contextService.get();This service is automatically registered as injectable and can be accessed via inject().
set
set(ctx: DirectusContext): void;- ctx (
DirectusContext): - The Directus extension context (endpoint, operation, or hook)
Sets the Directus context in the current DI context.
This method is typically called internally by the wrapper functions (wrapEndpoint, wrapOperation, defineHook) and should not be called manually in most cases.
const contextService = inject(DirectusContextService);
contextService.set(directusContext);get
get(): DirectusContext;Retrieves the Directus context from the current DI context.
Returns the context that was previously set by the wrapper functions. This allows you to access Directus services, schema, logger, and other context-specific functionality.
Accessing context properties
const contextService = inject(DirectusContextService);
const context = contextService.get();
// Access logger
context.logger.info("Message");
// Access schema
const schema = await context.getSchema();
// Access services
const itemsService = new context.services.ItemsService("users");getItemsService
getItemsService<T extends Item = Item, Collection extends string = string>(collection: Collection, options?: any): Promise<import("@directus/types").AbstractService<T>>;collection (
Collection): - The name of the collection to accessoptions (
any): Optional. - Additional options for the ItemsService (e.g., accountability, knex instance)
Creates and returns an ItemsService instance for the specified collection.
This is a convenience method that:
- Retrieves the Directus context
- Fetches the database schema
- Creates an ItemsService with the schema and provided options
The ItemsService allows you to perform CRUD operations on Directus collections.
Basic usage
const contextService = inject(DirectusContextService);
const usersService = await contextService.getItemsService("users");
// Read all users
const users = await usersService.readByQuery({ limit: -1 });
// Create a user
const userId = await usersService.createOne({ name: "John", email: "john@example.com" });With typed collection
type User = Item & {
id: string;
name: string;
email: string;
};
const contextService = inject(DirectusContextService);
const usersService = await contextService.getItemsService<User, "users">("users");
// Now fully typed
const users: User[] = await usersService.readByQuery({ limit: -1 });With accountability options
const contextService = inject(DirectusContextService);
const itemsService = await contextService.getItemsService("articles", {
accountability: {
user: "user-id",
role: "admin"
}
});