From ffe1a66cf56178be1225c2c478e2f89d14c3a6eb Mon Sep 17 00:00:00 2001 From: ArcherGu <649601376@qq.com> Date: Tue, 16 Aug 2022 11:22:44 +0800 Subject: [PATCH] chore: update readme --- Einf.png | Bin 0 -> 32663 bytes README.md | 108 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 107 insertions(+), 1 deletion(-) create mode 100644 Einf.png diff --git a/Einf.png b/Einf.png new file mode 100644 index 0000000000000000000000000000000000000000..490dab8e2e0dd42cb06aee7ac73bb585d17b618d GIT binary patch literal 32663 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 z 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%0Dhb878xs(k&3AVT5jYU&>L*FFK3N)l702dhq< z4=~qh7kOS_)ud^Cr5c+rL#Bw|J9>4sEhZ$_2)W&Wr9yh>{Vrdp?jkJ5fux;(Zo%Wh zYI}@-ecLgY^{gs8-e!=BQR98)gK~96Yt8^SCGd29$ojX&Wi?PcYxu5t?#k~wZb7c^ zy3+EN4Uog-&hMeO+x3IuK+C>luJ3k{Fn)`-HS>Lrq3gz7c^p^w!i{MchH}*pbR9q0 z6$HM2eNoU3Yn<#uWG1*!Ze~vS=AOvy9A>^WyG*4Wx#Z@;b!=F(w44(Hd06OIl3iJ$ zl=XjPUQ|0Aiw*k~ay_ROP dsRR2DOdjBOW^~)5St!V#nv(YOGJw_l{|EjfudV<9 literal 0 HcmV?d00001 diff --git a/README.md b/README.md index 3157b8f..460a60a 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,115 @@ -# 🌌Einf +

+ Einf logo +

+ +

+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