Skip to content

Modules

Modules are the fundamental building blocks of Orbit applications. They help organize your code into cohesive blocks of functionality.

Overview

A module is a class decorated with @Module() that provides metadata about how the application should be structured.

typescript
import { Module } from '@galaxy-stack/orbit-core';
import { UserController } from './user.controller';
import { UserService } from './user.service';

@Module({
  controllers: [UserController],
  providers: [UserService],
})
export class UserModule {}

Module Decorator Options

PropertyDescription
importsList of modules to import
controllersControllers to be instantiated
providersProviders to be instantiated by the DI container
exportsProviders to be available in other modules

Feature Modules

Organize your application by feature:

typescript
// users/user.module.ts
@Module({
  controllers: [UserController],
  providers: [UserService, UserRepository],
  exports: [UserService],
})
export class UserModule {}

// posts/post.module.ts
@Module({
  imports: [UserModule], // Import UserModule to use UserService
  controllers: [PostController],
  providers: [PostService],
})
export class PostModule {}

Root Module

Every application has a root module:

typescript
@Module({
  imports: [
    ConfigModule.forRoot(),
    DatabaseModule.forRoot(),
    UserModule,
    PostModule,
  ],
})
export class AppModule {}

Global Modules

Use global: true to make providers available everywhere:

typescript
@Module({
  providers: [ConfigService],
  exports: [ConfigService],
  global: true,
})
export class ConfigModule {}

Dynamic Modules

Create configurable modules:

typescript
@Module({})
export class DatabaseModule {
  static forRoot(options: DatabaseOptions): DynamicModule {
    return {
      module: DatabaseModule,
      providers: [
        {
          provide: 'DATABASE_OPTIONS',
          useValue: options,
        },
        DatabaseService,
      ],
      exports: [DatabaseService],
      global: true,
    };
  }
}

Module Re-exporting

Re-export imported modules:

typescript
@Module({
  imports: [CommonModule],
  exports: [CommonModule], // Re-export so importers can use CommonModule
})
export class CoreModule {}

Forward References

Handle circular dependencies:

typescript
import { forwardRef } from '@galaxy-stack/orbit-core';

@Module({
  imports: [forwardRef(() => PostModule)],
})
export class UserModule {}

Released under the MIT License.