Skip to content

API Reference

@repo/electron-ipc가 export하는 모든 심볼의 시그니처와 설명.

데코레이터

Injectable()

DI 컨테이너에 등록 가능한 서비스를 표시한다.

ts
function Injectable(): (target: Constructor, context: ClassDecoratorContext) => void

Controller()

IPC 핸들러를 포함하는 클래스를 표시한다. 클래스 내 @Handle 메타데이터를 수집한다.

ts
function Controller(): (target: Constructor, context: ClassDecoratorContext) => void

Handle(channel)

메서드를 IPC 채널에 바인딩한다. @Controller() 클래스 내에서만 사용한다.

ts
function Handle(channel: string): (target: IpcHandler, context: ClassMethodDecoratorContext) => void

매개변수:

이름타입설명
channelstringipcMain.handle()에 등록할 채널 이름

Module(metadata)

provider와 controller를 모듈 단위로 그룹화한다.

ts
function Module(metadata: ModuleMetadata): (target: Constructor, context: ClassDecoratorContext) => void

매개변수:

이름타입설명
metadataModuleMetadata모듈 구성 정보

클래스

Container

싱글톤 레지스트리. provider를 등록하고 lifecycle을 관리한다.

ts
class Container {
  constructor(options?: ContainerOptions)
  register(token: Constructor): void
  resolve<T>(token: Constructor<T>): T
  createInstance<T>(cls: Constructor<T>): T
  resolveAll(): void
  initAll(): void
  attachWindowAll(window: BrowserWindow): void
  disposeAll(): void
}
메서드설명
register(token)@Injectable 표시된 클래스를 등록한다
resolve(token)싱글톤 인스턴스를 반환한다. 첫 호출 시 생성한다
createInstance(cls)레지스트리에 등록하지 않는 일회성 인스턴스를 생성한다
resolveAll()등록된 모든 provider를 등록 순서대로 eagerly resolve한다
initAll()OnInit.onInit()을 등록 순서대로 호출한다
attachWindowAll(window)OnWindowAttach.onWindowAttach()을 등록 순서대로 호출한다
disposeAll()OnDispose.onDispose()를 등록 순서대로 호출한다

SenderGuard

IPC 메시지 발신자가 등록된 윈도우의 webContents인지 검증하는 내장 Guard.

ts
class SenderGuard implements IpcGuard {
  canActivate(ctx: IpcContext): boolean
}

함수

createApp(config)

모듈을 부트스트랩하고 IPC 핸들러를 등록하는 팩토리. 반환된 객체의 start()로 앱을 시작한다.

ts
function createApp(config: AppConfig): { start(): BrowserWindow }

자세한 설정은 AppConfig를 참고한다.

inject(token)

클래스 필드 이니셜라이저에서 의존성을 주입한다. Container의 인스턴스 생성 컨텍스트 안에서만 호출할 수 있다.

ts
function inject<T>(token: Constructor<T>): T

매개변수:

이름타입설명
tokenConstructor<T>resolve할 서비스 클래스

인터페이스

AppConfig

createApp()에 전달하는 설정 객체. 자세한 설명은 AppConfig 레퍼런스를 참고한다.

ts
interface AppConfig {
  modules: Constructor[]
  createWindow: () => BrowserWindow
  guards?: IpcGuard[]
  exceptionHandlers?: IpcExceptionHandler[]
  logger?: AppLogger
  onError?: (name: string, error: unknown) => void
}

AppLogger

AppConfig.logger에 전달하는 로거 인터페이스.

ts
interface AppLogger {
  info(message: string): void
}

ContainerOptions

Container 생성자에 전달하는 옵션.

ts
interface ContainerOptions {
  onError?: (name: string, error: unknown) => void
}

IpcContext

Guard와 ExceptionHandler에 전달되는 IPC 요청 컨텍스트.

ts
interface IpcContext {
  event: IpcMainInvokeEvent
  channel: string
  window: BrowserWindow
  args: unknown[]
}

IpcGuard

IPC 요청 검증 인터페이스.

ts
interface IpcGuard {
  canActivate(ctx: IpcContext): boolean | Promise<boolean>
}

IpcExceptionHandler

IPC 에러 처리 인터페이스.

ts
interface IpcExceptionHandler {
  catch(error: unknown, ctx: IpcContext): unknown
}

OnInit

윈도우 생성 전 초기화 lifecycle.

ts
interface OnInit {
  onInit(): void
}

OnWindowAttach

윈도우 생성 후 lifecycle.

ts
interface OnWindowAttach {
  onWindowAttach(window: BrowserWindow): void
}

OnDispose

윈도우 종료 시 정리 lifecycle.

ts
interface OnDispose {
  onDispose(): void
}

타입

ModuleMetadata

@Module() 데코레이터에 전달하는 모듈 구성 정보.

ts
type ModuleMetadata = {
  providers: Constructor[]
  controllers: Constructor[]
}

HandleEntry

@Handle() 데코레이터가 생성하는 채널-메서드 매핑 정보.

ts
type HandleEntry = {
  channel: string
  methodKey: string
}

IpcHandler

IPC 핸들러 함수 타입.

ts
type IpcHandler = (...args: any[]) => unknown | Promise<unknown>

내부 유틸리티 함수

데코레이터 메타데이터를 조회하는 함수. 프레임워크 내부에서 사용하지만 export되어 있다.

isInjectable(cls)

클래스에 @Injectable() 데코레이터가 적용되었는지 확인한다.

ts
function isInjectable(cls: Constructor): boolean

getHandlers(cls)

@Controller() 클래스에 등록된 @Handle 메타데이터 목록을 반환한다.

ts
function getHandlers(cls: Constructor): HandleEntry[]

getModuleMetadata(cls)

@Module() 클래스의 메타데이터를 반환한다.

ts
function getModuleMetadata(cls: Constructor): ModuleMetadata | undefined