@slimlib/store 1.5.0 → 1.6.0

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
@@ -98,7 +98,7 @@ import { SlimlibStore } from '@slimlib/store/angular';
98
98
 
99
99
  // create store
100
100
  @Injectable()
101
- export class StoreName extends SlimlibStore {
101
+ export class StoreName extends SlimlibStore<State> {
102
102
  constructor() {
103
103
  super(/*Initial state*/{ field: 123 }});
104
104
  }
@@ -113,13 +113,30 @@ export class StoreName extends SlimlibStore {
113
113
  }
114
114
  ```
115
115
 
116
+ ### rxjs
117
+
118
+ ```javascript
119
+ import { createStore, toObservable } from '@slimlib/store/rxjs';
120
+
121
+ // create store
122
+ const [state, store] = createStore();
123
+
124
+ // action
125
+ export function doSomething() {
126
+ state.field = value;
127
+ }
128
+
129
+ // observable
130
+ export const state$ = toObservable(store);
131
+ ```
132
+
116
133
  ## API
117
134
 
118
135
  ### `main` and `core` exports
119
136
 
120
137
  #### `createStoreFactory(notifyAfterCreation: boolean)`
121
138
 
122
- The only exported function. It returns createStore factory (see next) which notifies immediately after creating store if `notifyAfterCreation` is truthy.
139
+ Returns createStore factory (see next) which notifies immediately after creating store if `notifyAfterCreation` is truthy.
123
140
 
124
141
  #### `createStore<T>(initialState: T): [T, Store<T>, () => void]`
125
142
 
@@ -175,6 +192,14 @@ Base class for store services.
175
192
  ##### `state: T` - store state (proxy object)
176
193
  ##### `select<R>(...signals: Signal[], projector: (state: T, ...signalValue: SignalValue<signals[index]>) => R): Signal<R>` - selector function that returns a signal
177
194
 
195
+ ### `rxjs` export
196
+
197
+ #### `createStore<T>(initialState: T): [T, Store<T>, () => void]`
198
+
199
+ Store factory created with `notifyAfterCreation` === `false`.
200
+
201
+ #### `toObservable<T>(store: Store<T>): Observable<T>` - converts store to observable
202
+
178
203
  ## Limitations
179
204
 
180
205
  `Map`, `Set`, `WeakMap`, `WeakSet` cannot be used as values in current implementation.
package/dist/rxjs.cjs ADDED
@@ -0,0 +1,18 @@
1
+ 'use strict';
2
+
3
+ var rxjs = require('rxjs');
4
+ var core = require('./core.cjs');
5
+
6
+ const createStore = core.createStoreFactory(false);
7
+ const toObservable = (store) => {
8
+ const state = new rxjs.BehaviorSubject(store());
9
+ state.subscribe({
10
+ complete: store((value) => {
11
+ state.next(value);
12
+ })
13
+ });
14
+ return state.asObservable();
15
+ };
16
+
17
+ exports.createStore = createStore;
18
+ exports.toObservable = toObservable;
package/dist/rxjs.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ import { Store } from './core';
2
+ export declare const createStore: <T extends object>(object?: T) => [T, Store<T>, () => void];
3
+ export declare const toObservable: <T>(store: Store<T>) => import("rxjs").Observable<Readonly<T>>;
package/dist/rxjs.mjs ADDED
@@ -0,0 +1,15 @@
1
+ import { BehaviorSubject } from 'rxjs';
2
+ import { createStoreFactory } from './core.mjs';
3
+
4
+ const createStore = createStoreFactory(false);
5
+ const toObservable = (store) => {
6
+ const state = new BehaviorSubject(store());
7
+ state.subscribe({
8
+ complete: store((value) => {
9
+ state.next(value);
10
+ })
11
+ });
12
+ return state.asObservable();
13
+ };
14
+
15
+ export { createStore, toObservable };
@@ -0,0 +1,2 @@
1
+ !function(e,o){"object"==typeof exports&&"undefined"!=typeof module?o(exports,require("rxjs"),require("./core")):"function"==typeof define&&define.amd?define(["exports","rxjs","./core"],o):o((e="undefined"!=typeof globalThis?globalThis:e||self).slimlibStoreRxjs={},e.rxjs,e.slimlibStoreCore)}(this,(function(e,o,t){"use strict";const n=t.createStoreFactory(!1);e.createStore=n,e.toObservable=e=>{const t=new o.BehaviorSubject(e());return t.subscribe({complete:e((e=>{t.next(e)}))}),t.asObservable()}}));
2
+ //# sourceMappingURL=rxjs.umd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rxjs.umd.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "type": "module",
3
- "version": "1.5.0",
3
+ "version": "1.6.0",
4
4
  "name": "@slimlib/store",
5
5
  "description": "Simple Proxy-based store for SPA",
6
6
  "license": "MIT",
@@ -33,6 +33,10 @@
33
33
  "require": "./dist/angular.cjs",
34
34
  "default": "./dist/angular.mjs"
35
35
  },
36
+ "./rxjs": {
37
+ "require": "./dist/rxjs.cjs",
38
+ "default": "./dist/rxjs.mjs"
39
+ },
36
40
  "./package.json": "./package.json"
37
41
  },
38
42
  "types": "./dist/index.d.ts",
@@ -42,7 +46,8 @@
42
46
  "preact",
43
47
  "core",
44
48
  "svelte",
45
- "angular"
49
+ "angular",
50
+ "rxjs"
46
51
  ],
47
52
  "repository": {
48
53
  "type": "git",
@@ -73,7 +78,8 @@
73
78
  "peerDependencies": {
74
79
  "preact": ">=10.0.0",
75
80
  "react": ">=17.0.0",
76
- "@angular/core": ">=16.0.0"
81
+ "@angular/core": ">=16.0.0",
82
+ "rxjs": ">=7.0.0"
77
83
  },
78
84
  "peerDependenciesMeta": {
79
85
  "react": {
@@ -84,10 +90,13 @@
84
90
  },
85
91
  "@angular/core": {
86
92
  "optional": true
93
+ },
94
+ "rxjs": {
95
+ "optional": true
87
96
  }
88
97
  },
89
98
  "scripts": {
90
- "build": "pkgbld-internal --umd=index,preact,react,svelte,angular",
99
+ "build": "pkgbld-internal --umd=index,preact,react,svelte,angular,rxjs",
91
100
  "test": "jest --collectCoverage",
92
101
  "lint": "eslint ./src"
93
102
  }
@@ -0,0 +1,5 @@
1
+ {
2
+ "type": "module",
3
+ "types": "../dist/rxjs.d.ts",
4
+ "main": "../dist/rxjs.mjs"
5
+ }