Blame view

src/app/app.service.ts 831 Bytes
05b0b5d8   Yarik   first commit
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
  import { Injectable } from '@angular/core';
  
  export type InternalStateType = {
    [key: string]: any
  };
  
  @Injectable()
  export class AppState {
    _state: InternalStateType = {};
  
    constructor() {
    }
  
    // already return a clone of the current state
    get state() {
      return this._state = this._clone(this._state);
    }
  
    // never allow mutation
    set state(value) {
      throw new Error('do not mutate the `.state` directly');
    }
  
  
    get(prop?: any) {
      // use our state getter for the clone
      const state = this.state;
      return state.hasOwnProperty(prop) ? state[prop] : state;
    }
  
    set(prop: string, value: any) {
      // internally mutate our state
      return this._state[prop] = value;
    }
  
  
    private _clone(object: InternalStateType) {
      // simple object clone
      return JSON.parse(JSON.stringify(object));
    }
  }