floppy-disk 1.0.0 → 1.1.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
@@ -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.3k (gzipped: 1.5k)
10
+ import { create } from 'zustand'; // 3.3 kB (gzipped: 1.5 kB)
11
11
 
12
- import { createStore } from 'floppy-disk'; // 1.1k (gzipped: 622) 🎉
12
+ import { createStore } from 'floppy-disk'; // 1.1 kB (gzipped: 622 B) 🎉
13
13
 
14
14
  import {
15
15
  QueryClient,
@@ -17,11 +17,16 @@ import {
17
17
  useQuery,
18
18
  useInfiniteQuery,
19
19
  useMutation,
20
- } from '@tanstack/react-query'; // 41k (gzipped: 11k)
20
+ } from '@tanstack/react-query'; // 41 kB (gzipped: 11 kB)
21
21
 
22
- import { createQuery, createMutation } from 'floppy-disk'; // 6.1k (gzipped: 2.2k) 🎉
22
+ import { createQuery, createMutation } from 'floppy-disk'; // 6.3 kB (gzipped: 2.3 kB) 🎉
23
23
  ```
24
24
 
25
+ - Using Zustand & React-Query: https://demo-zustand-react-query.vercel.app/
26
+ 👉 Total: **309.16 kB** ~ gzipped 97.66 kB
27
+ - Using Floppy Disk: https://demo-floppy-disk.vercel.app/
28
+ 👉 Total: **279.46 kB** ~ gzipped 89.33 kB
29
+
25
30
  ## Table of Contents
26
31
 
27
32
  - [Store](#store)
@@ -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.0",
3
+ "version": "1.1.0",
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
  }