floppy-disk 1.0.0 → 1.1.0-beta.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/README.md +4 -4
- package/esm/react/create-query.d.ts +4 -0
- package/esm/react/create-query.js +19 -0
- package/lib/react/create-query.d.ts +4 -0
- package/lib/react/create-query.js +19 -0
- package/package.json +20 -2
package/README.md
CHANGED
|
@@ -7,9 +7,9 @@ This library was highly-inspired by [Zustand](https://www.npmjs.com/package/zust
|
|
|
7
7
|
**Bundle Size Comparison:**
|
|
8
8
|
|
|
9
9
|
```js
|
|
10
|
-
import { create } from 'zustand'; // 3.
|
|
10
|
+
import { create } from 'zustand'; // 3.3kB (gzipped: 1.5kB)
|
|
11
11
|
|
|
12
|
-
import { createStore } from 'floppy-disk'; // 1.
|
|
12
|
+
import { createStore } from 'floppy-disk'; // 1.1kB (gzipped: 622B) 🎉
|
|
13
13
|
|
|
14
14
|
import {
|
|
15
15
|
QueryClient,
|
|
@@ -17,9 +17,9 @@ import {
|
|
|
17
17
|
useQuery,
|
|
18
18
|
useInfiniteQuery,
|
|
19
19
|
useMutation,
|
|
20
|
-
} from '@tanstack/react-query'; //
|
|
20
|
+
} from '@tanstack/react-query'; // 41kB (gzipped: 11kB)
|
|
21
21
|
|
|
22
|
-
import { createQuery, createMutation } from 'floppy-disk'; // 6.
|
|
22
|
+
import { createQuery, createMutation } from 'floppy-disk'; // 6.1kB (gzipped: 2.2kB) 🎉
|
|
23
23
|
```
|
|
24
24
|
|
|
25
25
|
## Table of Contents
|
|
@@ -23,6 +23,10 @@ export declare type QueryState<TKey extends StoreKey = StoreKey, TResponse = any
|
|
|
23
23
|
fetchNextPage: () => void;
|
|
24
24
|
markAsStale: () => void;
|
|
25
25
|
reset: () => void;
|
|
26
|
+
/**
|
|
27
|
+
* Set query response & data.
|
|
28
|
+
*/
|
|
29
|
+
setResponse: (responseSetter: TResponse | ((state: QueryState<TKey, TResponse, TData, TError>) => TResponse)) => void;
|
|
26
30
|
helpers: {
|
|
27
31
|
/**
|
|
28
32
|
* Fetch all active queries.
|
|
@@ -142,6 +142,7 @@ export const createQuery = (queryFn, options = {}) => {
|
|
|
142
142
|
return forceFetch();
|
|
143
143
|
if (isWaitingNextPage || !hasNextPage)
|
|
144
144
|
return;
|
|
145
|
+
set({ isWaitingNextPage: true });
|
|
145
146
|
queryFn(key, { ...state, pageParam })
|
|
146
147
|
.then((response) => {
|
|
147
148
|
const newPageParam = getNextPageParam(response, pageParams.length);
|
|
@@ -164,6 +165,23 @@ export const createQuery = (queryFn, options = {}) => {
|
|
|
164
165
|
});
|
|
165
166
|
});
|
|
166
167
|
};
|
|
168
|
+
const setResponse = (responseSetter) => {
|
|
169
|
+
if (responseSetter === undefined)
|
|
170
|
+
return;
|
|
171
|
+
const store = useQuery.get(key);
|
|
172
|
+
const response = typeof responseSetter === 'function'
|
|
173
|
+
? responseSetter(store)
|
|
174
|
+
: responseSetter;
|
|
175
|
+
useQuery.set(key, {
|
|
176
|
+
status: 'success',
|
|
177
|
+
isLoading: false,
|
|
178
|
+
isSuccess: true,
|
|
179
|
+
isError: false,
|
|
180
|
+
response,
|
|
181
|
+
responseUpdatedAt: Date.now(),
|
|
182
|
+
data: select(response, { key, data: store.data }),
|
|
183
|
+
});
|
|
184
|
+
};
|
|
167
185
|
const fetchAllActiveQueries = () => {
|
|
168
186
|
useQuery.getAllWithSubscriber().forEach((state) => {
|
|
169
187
|
state.fetch();
|
|
@@ -187,6 +205,7 @@ export const createQuery = (queryFn, options = {}) => {
|
|
|
187
205
|
fetchNextPage,
|
|
188
206
|
markAsStale: () => set({ responseUpdatedAt: null }),
|
|
189
207
|
reset: () => set(INITIAL_QUERY_STATE),
|
|
208
|
+
setResponse,
|
|
190
209
|
helpers: {
|
|
191
210
|
fetchAllActiveQueries,
|
|
192
211
|
forceFetchAllActiveQueries,
|
|
@@ -23,6 +23,10 @@ export declare type QueryState<TKey extends StoreKey = StoreKey, TResponse = any
|
|
|
23
23
|
fetchNextPage: () => void;
|
|
24
24
|
markAsStale: () => void;
|
|
25
25
|
reset: () => void;
|
|
26
|
+
/**
|
|
27
|
+
* Set query response & data.
|
|
28
|
+
*/
|
|
29
|
+
setResponse: (responseSetter: TResponse | ((state: QueryState<TKey, TResponse, TData, TError>) => TResponse)) => void;
|
|
26
30
|
helpers: {
|
|
27
31
|
/**
|
|
28
32
|
* Fetch all active queries.
|
|
@@ -145,6 +145,7 @@ const createQuery = (queryFn, options = {}) => {
|
|
|
145
145
|
return forceFetch();
|
|
146
146
|
if (isWaitingNextPage || !hasNextPage)
|
|
147
147
|
return;
|
|
148
|
+
set({ isWaitingNextPage: true });
|
|
148
149
|
queryFn(key, { ...state, pageParam })
|
|
149
150
|
.then((response) => {
|
|
150
151
|
const newPageParam = getNextPageParam(response, pageParams.length);
|
|
@@ -167,6 +168,23 @@ const createQuery = (queryFn, options = {}) => {
|
|
|
167
168
|
});
|
|
168
169
|
});
|
|
169
170
|
};
|
|
171
|
+
const setResponse = (responseSetter) => {
|
|
172
|
+
if (responseSetter === undefined)
|
|
173
|
+
return;
|
|
174
|
+
const store = useQuery.get(key);
|
|
175
|
+
const response = typeof responseSetter === 'function'
|
|
176
|
+
? responseSetter(store)
|
|
177
|
+
: responseSetter;
|
|
178
|
+
useQuery.set(key, {
|
|
179
|
+
status: 'success',
|
|
180
|
+
isLoading: false,
|
|
181
|
+
isSuccess: true,
|
|
182
|
+
isError: false,
|
|
183
|
+
response,
|
|
184
|
+
responseUpdatedAt: Date.now(),
|
|
185
|
+
data: select(response, { key, data: store.data }),
|
|
186
|
+
});
|
|
187
|
+
};
|
|
170
188
|
const fetchAllActiveQueries = () => {
|
|
171
189
|
useQuery.getAllWithSubscriber().forEach((state) => {
|
|
172
190
|
state.fetch();
|
|
@@ -190,6 +208,7 @@ const createQuery = (queryFn, options = {}) => {
|
|
|
190
208
|
fetchNextPage,
|
|
191
209
|
markAsStale: () => set({ responseUpdatedAt: null }),
|
|
192
210
|
reset: () => set(INITIAL_QUERY_STATE),
|
|
211
|
+
setResponse,
|
|
193
212
|
helpers: {
|
|
194
213
|
fetchAllActiveQueries,
|
|
195
214
|
forceFetchAllActiveQueries,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "floppy-disk",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.1.0-beta.1",
|
|
4
4
|
"description": "FloppyDisk - lightweight, simple, and powerful state management library",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"state",
|
|
@@ -30,6 +30,9 @@
|
|
|
30
30
|
],
|
|
31
31
|
"types": "lib/index.d.ts",
|
|
32
32
|
"typings": "lib/index.d.ts",
|
|
33
|
+
"engines": {
|
|
34
|
+
"node": ">=18"
|
|
35
|
+
},
|
|
33
36
|
"scripts": {
|
|
34
37
|
"prepare": "husky install",
|
|
35
38
|
"build:cjs": "tsc",
|
|
@@ -40,7 +43,8 @@
|
|
|
40
43
|
"format:fix": "prettier --write .",
|
|
41
44
|
"lint": "eslint .",
|
|
42
45
|
"lint:fix": "eslint . --fix",
|
|
43
|
-
"lint:types": "tsc --noEmit"
|
|
46
|
+
"lint:types": "tsc --noEmit",
|
|
47
|
+
"semantic-release": "semantic-release"
|
|
44
48
|
},
|
|
45
49
|
"devDependencies": {
|
|
46
50
|
"@commitlint/cli": "^17.0.0",
|
|
@@ -57,10 +61,24 @@
|
|
|
57
61
|
"react": "^18.1.0",
|
|
58
62
|
"react-dom": "^18.1.0",
|
|
59
63
|
"rimraf": "^3.0.2",
|
|
64
|
+
"semantic-release": "^21.0.7",
|
|
60
65
|
"typescript": "^4.6.4"
|
|
61
66
|
},
|
|
62
67
|
"peerDependencies": {
|
|
63
68
|
"react": "^17.0.0 || ^18.0.0",
|
|
64
69
|
"react-dom": "^17.0.0 || ^18.0.0"
|
|
70
|
+
},
|
|
71
|
+
"release": {
|
|
72
|
+
"branches": [
|
|
73
|
+
"main",
|
|
74
|
+
{
|
|
75
|
+
"name": "alpha",
|
|
76
|
+
"prerelease": true
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"name": "beta",
|
|
80
|
+
"prerelease": true
|
|
81
|
+
}
|
|
82
|
+
]
|
|
65
83
|
}
|
|
66
84
|
}
|