@protorians/signalable
Version:
Signal's Events Manager
156 lines (111 loc) • 2.93 kB
Markdown
# Protorians Signal
Protorians Signal est un gestionnaire d'évènement en Javascript.
Le but premier est d'avoir une liste de fonction typée avec le couple `nom : arguments`, le tout depuis un objet existant.
## Signal multiple
C'est un signal qui gère plusieurs types de signaux.
Le but est d'avoir un regroupement de signaux dans le cadre d'une utilisation plus globale.
### Cas d'usage
Il peut être mis en place dans le cadre d'un traitement à plusieurs niveaux.
Imaginons que nous avons une classe qui possède les méthodes suivantes :
```typescript
interface IGenV{
}
class Genv implements IGenV{
parse(){
//...
}
commit(){
//...
}
push(){
//...
}
}
```
Dans notre exemple, chaque méthode pourra appeler un type de signal.
### Comment ça fonctionne
- Pour commencer, il faudrait créer le typage du signal.
```typescript
type IMySignal = {
initialize: boolean;
parse: string[];
commit: string[];
push: boolean;
}
```
- Ensuite, construire son signal
```typescript
this.signal = new Signalables<IGenvable, IMySignal>(genvableInstance)
```
- Définir les écouteurs
```typescript
class Genv {
signal: ISignalable<IGenV, IMySignal>
files: string[]
validated: boolean = false
constructor(instance: IGenvable, files: string[]) {
this.files = files;
this.signal = new Signalables<IGenvable, IMySignal>(instance);
}
initialize() {
this.signal.listen('parse', context => console.log(context))
this.signal.listen('commit', context => console.log(context))
this.signal.listen('push', context => console.log(context))
}
run() {
this.initialize()
}
}
```
- Déclencher les écoutes
```typescript
class Genv {
//..
parse() {
this.signal.dispatch('parse', this.files)
}
commit() {
this.signal.dispatch('commit', this.files)
}
push() {
this.signal.dispatch('push', this.validated)
}
//..
}
```
## Signal autonome
C'est une unité de signal singulier qui se gère de manière autonome.
Le but est de gérer un seul type de signal isolé dans le cadre d'une utilisation très précise.
### Cas d'usage
Il peut être mis en place dans le cadre d'un traitement à un seul niveau.
Imaginons que nous avons une fonction faisant un seul traitement, mais qu'on a besoin de déclencher un signal quand le traitement est éffectué :
```typescript
type IGenV = {}
function genv(): IGenV {
}
```
### Comment ça fonctionne
- Pour commencer, il faudrait créer le typage du signal.
```typescript
type IMySignal = boolean
```
- Ensuite, construire son signal
```typescript
const signaler = new Signalables<IGenvable, IMySignal>(genvableInstance)
```
- Definir les écouteurs
```typescript
function genv(): IGenV {
// ...
signaler.listen(context => console.log(context))
// ...
}
```
- Déclencher les écoutes
```typescript
mySignal.dispatch(true)
```
# Protorians ;)