einf
TypeScript icon, indicating that this package has built-in type declarations

1.5.1 • Public • Published

Einf logo

A simple electron main process framework.

NPM Version NPM Downloads Workflow Status

Description

Einf is a simple electron main process framework, which provides some decorators and automatic dependency injection to help you simplify the main process code.

Features

  • 💉‍ Support dependency injection powered by Typescript decorators.

  • 🪟 Support custom items injection and window object injection.

  • 🔗 Automatic ipc channel binding to reduce duplication of code.

  • 📦 Tiny size, the whole framework is less than 10kb.

  • 💡 Simple to use, you can use it as a base framework to build your own framework.

Installation

npm i einf
# Or Yarn
yarn add einf
# Or PNPM
pnpm add einf

Usage

Entry point of your electron application like index.ts:

import { BrowserWindow, app } from 'electron'
import { createEinf } from 'einf'
import { AppController } from './app.controller'

async function bootstrap() {
  const window = new BrowserWindow()
  window.loadURL('https://github.com')

  await createEinf({
    // window to create
    window,
    // controllers will be automatically initialized
    controllers: [AppController],
    // custom items to inject
    injects: [{
      name: 'IS_DEV',
      inject: !app.isPackaged,
    }],
  })
}

bootstrap()

Provide at least one controller to start the application, app.controller.ts:

import type { BrowserWindow } from 'electron'
import { app } from 'electron'
import { Controller, Inject, IpcHandle, IpcSend, Window } from 'einf'
import { AppService } from './app.service'

@Controller()
export class AppController {
  constructor(
    private appService: AppService,
    @Inject('IS_DEV') private isDev: boolean,
    @Window() private win: BrowserWindow,
  ) {}

  @IpcSend('reply-msg')
  public replyMsg(msg: string) {
    return msg
  }

  @IpcHandle('send-msg')
  public sendMsg(msg: string) {
    console.log(msg)
    return 'Get msg'
  }

  @IpcHandle('exit')
  public exit() {
    app.quit()
  }
}

You can also inject service via @Injectable decorator, app.service.ts:

import { Injectable } from 'einf'

@Injectable()
export class AppService {
  public createMsg(msg: string): string {
    return `"${msg}" is created by app service`
  }
}

License

MIT License © 2022 Archer Gu

Package Sidebar

Install

npm i einf

Weekly Downloads

157

Version

1.5.1

License

MIT

Unpacked Size

16.3 kB

Total Files

5

Last publish

Collaborators

  • darkfly