reactish-state 0.6.0 → 0.7.1

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/dist/cjs/index.js CHANGED
@@ -4,8 +4,8 @@ var shim = require('use-sync-external-store/shim');
4
4
 
5
5
  var createState = function createState(_temp) {
6
6
  var _ref = _temp === void 0 ? {} : _temp,
7
- enhancer = _ref.enhancer;
8
- return function (initialValue, actionCreator) {
7
+ middleware = _ref.middleware;
8
+ return function (initialValue, actionCreator, context) {
9
9
  var value = initialValue;
10
10
  var listeners = new Set();
11
11
  var get = function get() {
@@ -20,7 +20,7 @@ var createState = function createState(_temp) {
20
20
  });
21
21
  }
22
22
  };
23
- if (enhancer) set = enhancer(set, get);
23
+ if (middleware) set = middleware(set, get, context);
24
24
  return {
25
25
  get: get,
26
26
  set: set,
@@ -1,7 +1,7 @@
1
1
  var createState = function createState(_temp) {
2
2
  var _ref = _temp === void 0 ? {} : _temp,
3
- enhancer = _ref.enhancer;
4
- return function (initialValue, actionCreator) {
3
+ middleware = _ref.middleware;
4
+ return function (initialValue, actionCreator, context) {
5
5
  var value = initialValue;
6
6
  var listeners = new Set();
7
7
  var get = function get() {
@@ -16,7 +16,7 @@ var createState = function createState(_temp) {
16
16
  });
17
17
  }
18
18
  };
19
- if (enhancer) set = enhancer(set, get);
19
+ if (middleware) set = middleware(set, get, context);
20
20
  return {
21
21
  get: get,
22
22
  set: set,
@@ -4,12 +4,59 @@ var applyMiddleware = function applyMiddleware() {
4
4
  for (var _len = arguments.length, middlewares = new Array(_len), _key = 0; _key < _len; _key++) {
5
5
  middlewares[_key] = arguments[_key];
6
6
  }
7
- return function (set, get) {
8
- middlewares.forEach(function (middleware) {
9
- return set = middleware(set, get);
7
+ return function (set, get, context) {
8
+ return middlewares.reduceRight(function (prev, curr) {
9
+ return curr(prev, get, context);
10
+ }, set);
11
+ };
12
+ };
13
+
14
+ var devtools = function devtools(set, get, context) {
15
+ if (typeof window === 'undefined') return set;
16
+ var devtoolsExtension = window.__REDUX_DEVTOOLS_EXTENSION__;
17
+ var extension = devtoolsExtension.connect({
18
+ name: context.key
19
+ });
20
+ extension.init(get());
21
+ return function (vaule) {
22
+ set(vaule);
23
+ extension.send({
24
+ type: 'anonymous',
25
+ vaule: vaule
26
+ }, get());
27
+ };
28
+ };
29
+
30
+ var persist = function persist(_temp) {
31
+ var _ref = _temp === void 0 ? {} : _temp,
32
+ prefix = _ref.prefix,
33
+ _ref$getStorage = _ref.getStorage,
34
+ getStorage = _ref$getStorage === void 0 ? function () {
35
+ return localStorage;
36
+ } : _ref$getStorage;
37
+ var states = [];
38
+ var middleware = function middleware(set, get, context) {
39
+ var key = context ? context.key : '';
40
+ if (!key) throw new Error('[reactish-state] state should be provided with a string `key` in the context object when the `persist` middleware is used.');
41
+ if (prefix) key = prefix + key;
42
+ states.push([key, set]);
43
+ return function (value) {
44
+ set(value);
45
+ getStorage().setItem(key, JSON.stringify(get()));
46
+ };
47
+ };
48
+ middleware.hydrate = function () {
49
+ states.forEach(function (_ref2) {
50
+ var key = _ref2[0],
51
+ set = _ref2[1];
52
+ var value = getStorage().getItem(key);
53
+ value && set(JSON.parse(value));
10
54
  });
11
- return set;
55
+ states.length = 0;
12
56
  };
57
+ return middleware;
13
58
  };
14
59
 
15
60
  exports.applyMiddleware = applyMiddleware;
61
+ exports.devtools = devtools;
62
+ exports.persist = persist;
@@ -2,11 +2,10 @@ var applyMiddleware = function applyMiddleware() {
2
2
  for (var _len = arguments.length, middlewares = new Array(_len), _key = 0; _key < _len; _key++) {
3
3
  middlewares[_key] = arguments[_key];
4
4
  }
5
- return function (set, get) {
6
- middlewares.forEach(function (middleware) {
7
- return set = middleware(set, get);
8
- });
9
- return set;
5
+ return function (set, get, context) {
6
+ return middlewares.reduceRight(function (prev, curr) {
7
+ return curr(prev, get, context);
8
+ }, set);
10
9
  };
11
10
  };
12
11
 
@@ -0,0 +1,17 @@
1
+ var devtools = function devtools(set, get, context) {
2
+ if (typeof window === 'undefined') return set;
3
+ var devtoolsExtension = window.__REDUX_DEVTOOLS_EXTENSION__;
4
+ var extension = devtoolsExtension.connect({
5
+ name: context.key
6
+ });
7
+ extension.init(get());
8
+ return function (vaule) {
9
+ set(vaule);
10
+ extension.send({
11
+ type: 'anonymous',
12
+ vaule: vaule
13
+ }, get());
14
+ };
15
+ };
16
+
17
+ export { devtools };
@@ -1 +1,3 @@
1
1
  export { applyMiddleware } from './applyMiddleware.js';
2
+ export { devtools } from './devtools.js';
3
+ export { persist } from './persist.js';
@@ -0,0 +1,10 @@
1
+ /* eslint-disable no-console */
2
+ var logger = function logger(set, get) {
3
+ return function (value) {
4
+ console.log('setting', value);
5
+ set(value);
6
+ console.log('next state', get());
7
+ };
8
+ };
9
+
10
+ export { logger };
@@ -0,0 +1,31 @@
1
+ var persist = function persist(_temp) {
2
+ var _ref = _temp === void 0 ? {} : _temp,
3
+ prefix = _ref.prefix,
4
+ _ref$getStorage = _ref.getStorage,
5
+ getStorage = _ref$getStorage === void 0 ? function () {
6
+ return localStorage;
7
+ } : _ref$getStorage;
8
+ var states = [];
9
+ var middleware = function middleware(set, get, context) {
10
+ var key = context ? context.key : '';
11
+ if (!key) throw new Error('[reactish-state] state should be provided with a string `key` in the context object when the `persist` middleware is used.');
12
+ if (prefix) key = prefix + key;
13
+ states.push([key, set]);
14
+ return function (value) {
15
+ set(value);
16
+ getStorage().setItem(key, JSON.stringify(get()));
17
+ };
18
+ };
19
+ middleware.hydrate = function () {
20
+ states.forEach(function (_ref2) {
21
+ var key = _ref2[0],
22
+ set = _ref2[1];
23
+ var value = getStorage().getItem(key);
24
+ value && set(JSON.parse(value));
25
+ });
26
+ states.length = 0;
27
+ };
28
+ return middleware;
29
+ };
30
+
31
+ export { persist };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "reactish-state",
3
- "version": "0.6.0",
3
+ "version": "0.7.1",
4
4
  "description": "",
5
5
  "author": "Zheng Song",
6
6
  "license": "MIT",
package/types/common.d.ts CHANGED
@@ -5,4 +5,6 @@ export interface Reactish<T> {
5
5
  get: Getter<T>;
6
6
  subscribe: (listener: Listener) => () => void;
7
7
  }
8
- export declare type Enhancer<T> = (set: Setter<T>, get: Getter<T>) => Setter<T>;
8
+ export interface Middleware {
9
+ <T, X>(set: Setter<T>, get: Getter<T>, context?: X): Setter<T>;
10
+ }
@@ -1,3 +1,3 @@
1
- import type { Enhancer } from '../common';
2
- declare const applyMiddleware: <T>(...middlewares: Enhancer<T>[]) => Enhancer<T>;
1
+ import type { Middleware } from '../common';
2
+ declare const applyMiddleware: (...middlewares: Middleware[]) => Middleware;
3
3
  export { applyMiddleware };
@@ -0,0 +1,3 @@
1
+ import type { Middleware } from '../common';
2
+ declare const devtools: Middleware;
3
+ export { devtools };
@@ -1 +1,3 @@
1
1
  export { applyMiddleware } from './applyMiddleware';
2
+ export { devtools } from './devtools';
3
+ export { persist } from './persist';
@@ -0,0 +1,3 @@
1
+ import type { Middleware } from '../common';
2
+ declare const logger: Middleware;
3
+ export { logger };
@@ -0,0 +1,10 @@
1
+ import type { Middleware } from '../common';
2
+ interface PersistMiddleware extends Middleware {
3
+ hydrate(): void;
4
+ }
5
+ declare type Persist = (options?: {
6
+ prefix?: string;
7
+ getStorage?: () => Pick<Storage, 'getItem' | 'setItem'>;
8
+ }) => PersistMiddleware;
9
+ declare const persist: Persist;
10
+ export { persist };
@@ -1,13 +1,13 @@
1
- import type { Setter, Reactish, Enhancer } from '../common';
2
- declare type ActionCreator<T, A> = ((set: Setter<T>, get: () => T) => A) | undefined;
1
+ import type { Setter, Reactish, Middleware } from '../common';
2
+ declare type ActionCreator<T, A> = ((set: Setter<T>, get: () => T) => A) | null | undefined;
3
3
  interface State<T, A = unknown, C extends ActionCreator<T, A> = undefined> extends Reactish<T> {
4
4
  set: Setter<T>;
5
5
  actions: C extends undefined ? never : A;
6
6
  }
7
- declare type StateCreator = <T, A>(initialValue: T, actionCreator?: ActionCreator<T, A>) => State<T, A, ActionCreator<T, A>>;
8
- declare const createState: <T, A>({ enhancer }?: {
9
- enhancer?: Enhancer<T> | undefined;
10
- }) => (initialValue: T, actionCreator?: ActionCreator<T, A>) => State<T, A, ActionCreator<T, A>>;
7
+ declare type StateCreator = <T, A, X>(initialValue: T, actionCreator?: ActionCreator<T, A>, context?: X) => State<T, A, ActionCreator<T, A>>;
8
+ declare const createState: <T, X>({ middleware }?: {
9
+ middleware?: Middleware | undefined;
10
+ }) => <A>(initialValue: T, actionCreator?: ActionCreator<T, A>, context?: X | undefined) => State<T, A, ActionCreator<T, A>>;
11
11
  declare const state: StateCreator;
12
12
  export type { StateCreator };
13
13
  export { state, createState };