@vanyamate/sec 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -2,6 +2,10 @@
2
2
 
3
3
  Tiny state manager
4
4
 
5
+ ```
6
+ npm i @vanyamate/sec
7
+ ```
8
+
5
9
  ```typescript
6
10
  import { store, effect, combine } from './index';
7
11
 
package/index.d.ts CHANGED
@@ -8,15 +8,17 @@ export type Effect<Args extends any[], Result> = {
8
8
  onBefore: (callback: (...args: Args) => void) => void;
9
9
  };
10
10
  export type Listener<State> = (state: State) => void;
11
+ export type Payload<Result, Args> = {
12
+ result?: Result;
13
+ error?: unknown;
14
+ args: Args;
15
+ };
16
+ export type Handler<State, Args, Result> = (state: State, payload: Payload<Result, Args>) => State;
11
17
  export declare function effect<Args extends any[], Result>(fn: EffectFunction<Args, Result>): Effect<Args, Result>;
12
18
  export type Store<State> = {
13
19
  get: () => State;
14
20
  set: (newState: State) => void;
15
- on: <Args extends any[], Result>(effect: Effect<Args, Result>, event: EffectEvent, handler: (state: State, payload: {
16
- result?: Result;
17
- error?: unknown;
18
- args: Args;
19
- }) => State) => Store<State>;
21
+ on: <Args extends any[], Result>(effect: Effect<Args, Result>, event: EffectEvent, handler: Handler<State, Args, Result>) => Store<State>;
20
22
  subscribe: (listener: Listener<State>) => () => void;
21
23
  };
22
24
  export declare function store<State>(initialState: State): Store<State>;
package/index.ts CHANGED
@@ -10,6 +10,12 @@ export type Effect<Args extends any[], Result> = {
10
10
  };
11
11
 
12
12
  export type Listener<State> = (state: State) => void;
13
+ export type Payload<Result, Args> = {
14
+ result?: Result;
15
+ error?: unknown;
16
+ args: Args;
17
+ };
18
+ export type Handler<State, Args, Result> = (state: State, payload: Payload<Result, Args>) => State;
13
19
 
14
20
  export function effect<Args extends any[], Result> (fn: EffectFunction<Args, Result>): Effect<Args, Result> {
15
21
  let beforeListeners: ((...args: Args) => void)[] = [];
@@ -56,11 +62,7 @@ export type Store<State> = {
56
62
  on: <Args extends any[], Result>(
57
63
  effect: Effect<Args, Result>,
58
64
  event: EffectEvent,
59
- handler: (state: State, payload: {
60
- result?: Result;
61
- error?: unknown;
62
- args: Args
63
- }) => State,
65
+ handler: Handler<State, Args, Result>,
64
66
  ) => Store<State>;
65
67
  subscribe: (listener: Listener<State>) => () => void;
66
68
  };
@@ -78,17 +80,9 @@ export function store<State> (initialState: State): Store<State> {
78
80
  const on = <Args extends any[], Result> (
79
81
  effect: Effect<Args, Result>,
80
82
  event: EffectEvent,
81
- handler: (state: State, payload: {
82
- result?: Result;
83
- error?: unknown;
84
- args: Args
85
- }) => State,
83
+ handler: Handler<State, Args, Result>,
86
84
  ): Store<State> => {
87
- const callback = (payload: {
88
- result?: Result;
89
- error?: unknown;
90
- args: Args
91
- }) => set(handler(state, payload));
85
+ const callback = (payload: Payload<Result, Args>) => set(handler(state, payload));
92
86
 
93
87
  if (event === 'onBefore') {
94
88
  effect.onBefore((...args) => callback({ args }));
package/package.json CHANGED
@@ -1,12 +1,13 @@
1
1
  {
2
2
  "name": "@vanyamate/sec",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "description": "SEC. Store, Effect, Combine. Tiny state manager",
5
5
  "scripts": {
6
6
  "g:type": "tsc index.ts --declaration --emitDeclarationOnly"
7
7
  },
8
8
  "main": "./index.ts",
9
9
  "types": "./index.d.ts",
10
+ "type": "module",
10
11
  "repository": {
11
12
  "type": "git",
12
13
  "url": "git+https://github.com/VanyaMate/sec.git"