diff --git a/Einf.png b/Einf.png new file mode 100644 index 0000000..490dab8 Binary files /dev/null and b/Einf.png differ diff --git a/README.md b/README.md index 3157b8f..460a60a 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,115 @@ -# πEinf +
+ +
+ ++A simple electron main process framework. +
## 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 event 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 + +```shell +npm i einf +# Or Yarn +yarn add einf +# Or PNPM +pnpm add einf +``` + +## Usage + +Entry point of your electron application like `index.ts`: + +```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`: + +```ts +import type { BrowserWindow } from 'electron' +import { app } from 'electron' +import { Controller, Inject, IpcInvoke, IpcOn, Window } from 'einf' +import type { AppService } from './app.service' + +@Controller() +export class AppController { + constructor( + private appService: AppService, + @Inject('IS_DEV') private isDev: boolean, + @Window() private win: BrowserWindow, + ) {} + + @IpcOn('reply-msg') + public replyMsg(msg: string) { + return msg + } + + @IpcInvoke('send-msg') + public sendMsg(msg: string) { + console.log(msg) + return 'Get msg' + } + + @IpcInvoke('exit') + public exit() { + app.quit() + } +} + +``` + +You can also inject service via `@Injectable` decorator, `app.service.ts`: + +```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](https://github.com/archergu) \ No newline at end of file