@faasjs/react 1.5.0 → 1.7.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
@@ -70,5 +70,6 @@ const client = FaasReactClient({
70
70
  - [faas](functions/faas.md)
71
71
  - [getClient](functions/getClient.md)
72
72
  - [signal](functions/signal.md)
73
+ - [useConstant](functions/useConstant.md)
73
74
  - [useFaas](functions/useFaas.md)
74
75
  - [useSignalState](functions/useSignalState.md)
package/dist/index.d.mts CHANGED
@@ -8,6 +8,11 @@ import * as _preact_signals_core from '@preact/signals-core';
8
8
  export { batch, computed, effect, signal as originSignal } from '@preact/signals-react';
9
9
  export { useSignal as originUseSignal, useComputed, useSignalEffect, useSignals } from '@preact/signals-react/runtime';
10
10
 
11
+ /**
12
+ * Returns a constant value that is created by the given function.
13
+ */
14
+ declare function useConstant<T>(fn: () => T): T;
15
+
11
16
  type FaasReactClientInstance = {
12
17
  id: string
13
18
  faas: <PathOrData extends FaasAction>(
@@ -35,7 +40,7 @@ type FaasDataInjection<Data = any> = {
35
40
  data: Data
36
41
  error: any
37
42
  promise: Promise<Response<Data>>
38
- reload(params?: Record<string, any>): Promise<Response<Data>>
43
+ reload(params?: Record<string, any>): void
39
44
  setData: React.Dispatch<React.SetStateAction<Data>>
40
45
  setLoading: React.Dispatch<React.SetStateAction<boolean>>
41
46
  setPromise: React.Dispatch<React.SetStateAction<Promise<Response<Data>>>>
@@ -149,6 +154,9 @@ declare function useFaas<PathOrData extends FaasAction$1>(action: string | PathO
149
154
  * ```
150
155
  */
151
156
  declare function FaasDataWrapper<PathOrData extends FaasAction$1>(props: FaasDataWrapperProps<PathOrData>): JSX.Element;
157
+ declare namespace FaasDataWrapper {
158
+ var whyDidYouRender: boolean;
159
+ }
152
160
 
153
161
  interface ErrorBoundaryProps {
154
162
  children?: ReactNode;
@@ -167,9 +175,10 @@ declare class ErrorBoundary extends Component<ErrorBoundaryProps, {
167
175
  componentStack?: string;
168
176
  };
169
177
  }> {
178
+ static whyDidYouRender: boolean;
170
179
  constructor(props: ErrorBoundaryProps);
171
180
  componentDidCatch(error: Error | null, info: any): void;
172
- render(): string | number | boolean | react_jsx_runtime.JSX.Element | Iterable<ReactNode>;
181
+ render(): string | number | boolean | Iterable<ReactNode> | react_jsx_runtime.JSX.Element;
173
182
  }
174
183
 
175
184
  type SignalOptions = {
@@ -212,4 +221,4 @@ declare function signal<T = any>(initialValue: any, options?: SignalOptions): _p
212
221
  */
213
222
  declare function useSignalState<T = any>(initialValue: T, options?: SignalOptions): readonly [T, (changes: SetStateAction<T>) => void];
214
223
 
215
- export { ErrorBoundary, type ErrorBoundaryProps, type ErrorChildrenProps, type FaasDataInjection, FaasDataWrapper, type FaasDataWrapperProps, FaasReactClient, type FaasReactClientInstance, type FaasReactClientOptions, type SignalOptions, faas, getClient, signal, useFaas, type useFaasOptions, useSignalState };
224
+ export { ErrorBoundary, type ErrorBoundaryProps, type ErrorChildrenProps, type FaasDataInjection, FaasDataWrapper, type FaasDataWrapperProps, FaasReactClient, type FaasReactClientInstance, type FaasReactClientOptions, type SignalOptions, faas, getClient, signal, useConstant, useFaas, type useFaasOptions, useSignalState };
package/dist/index.d.ts CHANGED
@@ -8,6 +8,11 @@ import * as _preact_signals_core from '@preact/signals-core';
8
8
  export { batch, computed, effect, signal as originSignal } from '@preact/signals-react';
9
9
  export { useSignal as originUseSignal, useComputed, useSignalEffect, useSignals } from '@preact/signals-react/runtime';
10
10
 
11
+ /**
12
+ * Returns a constant value that is created by the given function.
13
+ */
14
+ declare function useConstant<T>(fn: () => T): T;
15
+
11
16
  type FaasReactClientInstance = {
12
17
  id: string
13
18
  faas: <PathOrData extends FaasAction>(
@@ -35,7 +40,7 @@ type FaasDataInjection<Data = any> = {
35
40
  data: Data
36
41
  error: any
37
42
  promise: Promise<Response<Data>>
38
- reload(params?: Record<string, any>): Promise<Response<Data>>
43
+ reload(params?: Record<string, any>): void
39
44
  setData: React.Dispatch<React.SetStateAction<Data>>
40
45
  setLoading: React.Dispatch<React.SetStateAction<boolean>>
41
46
  setPromise: React.Dispatch<React.SetStateAction<Promise<Response<Data>>>>
@@ -149,6 +154,9 @@ declare function useFaas<PathOrData extends FaasAction$1>(action: string | PathO
149
154
  * ```
150
155
  */
151
156
  declare function FaasDataWrapper<PathOrData extends FaasAction$1>(props: FaasDataWrapperProps<PathOrData>): JSX.Element;
157
+ declare namespace FaasDataWrapper {
158
+ var whyDidYouRender: boolean;
159
+ }
152
160
 
153
161
  interface ErrorBoundaryProps {
154
162
  children?: ReactNode;
@@ -167,9 +175,10 @@ declare class ErrorBoundary extends Component<ErrorBoundaryProps, {
167
175
  componentStack?: string;
168
176
  };
169
177
  }> {
178
+ static whyDidYouRender: boolean;
170
179
  constructor(props: ErrorBoundaryProps);
171
180
  componentDidCatch(error: Error | null, info: any): void;
172
- render(): string | number | boolean | react_jsx_runtime.JSX.Element | Iterable<ReactNode>;
181
+ render(): string | number | boolean | Iterable<ReactNode> | react_jsx_runtime.JSX.Element;
173
182
  }
174
183
 
175
184
  type SignalOptions = {
@@ -212,4 +221,4 @@ declare function signal<T = any>(initialValue: any, options?: SignalOptions): _p
212
221
  */
213
222
  declare function useSignalState<T = any>(initialValue: T, options?: SignalOptions): readonly [T, (changes: SetStateAction<T>) => void];
214
223
 
215
- export { ErrorBoundary, type ErrorBoundaryProps, type ErrorChildrenProps, type FaasDataInjection, FaasDataWrapper, type FaasDataWrapperProps, FaasReactClient, type FaasReactClientInstance, type FaasReactClientOptions, type SignalOptions, faas, getClient, signal, useFaas, type useFaasOptions, useSignalState };
224
+ export { ErrorBoundary, type ErrorBoundaryProps, type ErrorChildrenProps, type FaasDataInjection, FaasDataWrapper, type FaasDataWrapperProps, FaasReactClient, type FaasReactClientInstance, type FaasReactClientOptions, type SignalOptions, faas, getClient, signal, useConstant, useFaas, type useFaasOptions, useSignalState };
package/dist/index.js CHANGED
@@ -6,7 +6,14 @@ var jsxRuntime = require('react/jsx-runtime');
6
6
  var signalsReact = require('@preact/signals-react');
7
7
  var runtime = require('@preact/signals-react/runtime');
8
8
 
9
- // src/client.tsx
9
+ // src/constant.ts
10
+ function useConstant(fn) {
11
+ const ref = react.useRef();
12
+ if (!ref.current) {
13
+ ref.current = { v: fn() };
14
+ }
15
+ return ref.current.v;
16
+ }
10
17
  var clients = {};
11
18
  function FaasReactClient({
12
19
  domain,
@@ -96,6 +103,14 @@ function FaasReactClient({
96
103
  setLoading(false);
97
104
  };
98
105
  }, [action, JSON.stringify(options2.params || params), reloadTimes, skip]);
106
+ const reload = react.useCallback(
107
+ (params2) => {
108
+ if (params2)
109
+ setParams(params2);
110
+ setReloadTimes((prev) => prev + 1);
111
+ },
112
+ [params]
113
+ );
99
114
  return {
100
115
  action,
101
116
  params,
@@ -104,45 +119,38 @@ function FaasReactClient({
104
119
  reloadTimes,
105
120
  error,
106
121
  promise,
107
- async reload(params2) {
108
- if (params2)
109
- setParams(params2);
110
- setReloadTimes(reloadTimes + 1);
111
- return promise;
112
- },
122
+ reload,
113
123
  setData: (options2 == null ? void 0 : options2.setData) || setData,
114
124
  setLoading,
115
125
  setPromise,
116
126
  setError
117
127
  };
118
128
  }
119
- const reactClient = {
120
- id: client.id,
121
- faas: faas2,
122
- useFaas: useFaas2,
123
- FaasDataWrapper({
124
- action,
125
- params,
126
- fallback,
127
- render,
128
- children,
129
- onDataChange,
129
+ useFaas2.whyDidYouRender = true;
130
+ function FaasDataWrapper2({
131
+ action,
132
+ params,
133
+ fallback,
134
+ render,
135
+ children,
136
+ onDataChange,
137
+ data,
138
+ setData
139
+ }) {
140
+ const request = useFaas2(action, params, {
130
141
  data,
131
142
  setData
132
- }) {
133
- const request = useFaas2(action, params, {
134
- data,
135
- setData
136
- });
137
- const [loaded, setLoaded] = react.useState(false);
138
- react.useEffect(() => {
139
- if (!loaded && !request.loading)
140
- setLoaded(true);
141
- }, [request.loading]);
142
- react.useEffect(() => {
143
- if (onDataChange)
144
- onDataChange(request);
145
- }, [JSON.stringify(request.data)]);
143
+ });
144
+ const [loaded, setLoaded] = react.useState(false);
145
+ react.useEffect(() => {
146
+ if (!loaded && !request.loading)
147
+ setLoaded(true);
148
+ }, [request.loading]);
149
+ react.useEffect(() => {
150
+ if (onDataChange)
151
+ onDataChange(request);
152
+ }, [JSON.stringify(request.data)]);
153
+ const child = react.useMemo(() => {
146
154
  if (loaded) {
147
155
  if (children)
148
156
  return react.cloneElement(children, request);
@@ -150,7 +158,15 @@ function FaasReactClient({
150
158
  return render(request);
151
159
  }
152
160
  return fallback || null;
153
- }
161
+ }, [loaded, request.action, request.params, request.data, request.error]);
162
+ return child;
163
+ }
164
+ FaasDataWrapper2.whyDidYouRender = true;
165
+ const reactClient = {
166
+ id: client.id,
167
+ faas: faas2,
168
+ useFaas: useFaas2,
169
+ FaasDataWrapper: FaasDataWrapper2
154
170
  };
155
171
  clients[domain] = reactClient;
156
172
  return reactClient;
@@ -178,6 +194,7 @@ function FaasDataWrapper(props) {
178
194
  return props.fallback || null;
179
195
  return /* @__PURE__ */ jsxRuntime.jsx(client.FaasDataWrapper, { ...props });
180
196
  }
197
+ FaasDataWrapper.whyDidYouRender = true;
181
198
  var ErrorBoundary = class extends react.Component {
182
199
  constructor(props) {
183
200
  super(props);
@@ -214,6 +231,7 @@ var ErrorBoundary = class extends react.Component {
214
231
  return this.props.children;
215
232
  }
216
233
  };
234
+ ErrorBoundary.whyDidYouRender = true;
217
235
  function signal(initialValue, options = {}) {
218
236
  const state = signalsReact.signal(initialValue);
219
237
  if (options.debugName)
@@ -271,5 +289,6 @@ exports.FaasReactClient = FaasReactClient;
271
289
  exports.faas = faas;
272
290
  exports.getClient = getClient;
273
291
  exports.signal = signal;
292
+ exports.useConstant = useConstant;
274
293
  exports.useFaas = useFaas;
275
294
  exports.useSignalState = useSignalState;
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { useState, useEffect, cloneElement, Component } from 'react';
1
+ import { useRef, useState, useEffect, Component, cloneElement, useCallback, useMemo } from 'react';
2
2
  import { FaasBrowserClient } from '@faasjs/browser';
3
3
  import { jsx, jsxs } from 'react/jsx-runtime';
4
4
  import { signal as signal$1, effect } from '@preact/signals-react';
@@ -6,7 +6,14 @@ export { batch, computed, effect, signal as originSignal } from '@preact/signals
6
6
  import { useSignal, useSignalEffect } from '@preact/signals-react/runtime';
7
7
  export { useSignal as originUseSignal, useComputed, useSignalEffect, useSignals } from '@preact/signals-react/runtime';
8
8
 
9
- // src/client.tsx
9
+ // src/constant.ts
10
+ function useConstant(fn) {
11
+ const ref = useRef();
12
+ if (!ref.current) {
13
+ ref.current = { v: fn() };
14
+ }
15
+ return ref.current.v;
16
+ }
10
17
  var clients = {};
11
18
  function FaasReactClient({
12
19
  domain,
@@ -96,6 +103,14 @@ function FaasReactClient({
96
103
  setLoading(false);
97
104
  };
98
105
  }, [action, JSON.stringify(options2.params || params), reloadTimes, skip]);
106
+ const reload = useCallback(
107
+ (params2) => {
108
+ if (params2)
109
+ setParams(params2);
110
+ setReloadTimes((prev) => prev + 1);
111
+ },
112
+ [params]
113
+ );
99
114
  return {
100
115
  action,
101
116
  params,
@@ -104,45 +119,38 @@ function FaasReactClient({
104
119
  reloadTimes,
105
120
  error,
106
121
  promise,
107
- async reload(params2) {
108
- if (params2)
109
- setParams(params2);
110
- setReloadTimes(reloadTimes + 1);
111
- return promise;
112
- },
122
+ reload,
113
123
  setData: (options2 == null ? void 0 : options2.setData) || setData,
114
124
  setLoading,
115
125
  setPromise,
116
126
  setError
117
127
  };
118
128
  }
119
- const reactClient = {
120
- id: client.id,
121
- faas: faas2,
122
- useFaas: useFaas2,
123
- FaasDataWrapper({
124
- action,
125
- params,
126
- fallback,
127
- render,
128
- children,
129
- onDataChange,
129
+ useFaas2.whyDidYouRender = true;
130
+ function FaasDataWrapper2({
131
+ action,
132
+ params,
133
+ fallback,
134
+ render,
135
+ children,
136
+ onDataChange,
137
+ data,
138
+ setData
139
+ }) {
140
+ const request = useFaas2(action, params, {
130
141
  data,
131
142
  setData
132
- }) {
133
- const request = useFaas2(action, params, {
134
- data,
135
- setData
136
- });
137
- const [loaded, setLoaded] = useState(false);
138
- useEffect(() => {
139
- if (!loaded && !request.loading)
140
- setLoaded(true);
141
- }, [request.loading]);
142
- useEffect(() => {
143
- if (onDataChange)
144
- onDataChange(request);
145
- }, [JSON.stringify(request.data)]);
143
+ });
144
+ const [loaded, setLoaded] = useState(false);
145
+ useEffect(() => {
146
+ if (!loaded && !request.loading)
147
+ setLoaded(true);
148
+ }, [request.loading]);
149
+ useEffect(() => {
150
+ if (onDataChange)
151
+ onDataChange(request);
152
+ }, [JSON.stringify(request.data)]);
153
+ const child = useMemo(() => {
146
154
  if (loaded) {
147
155
  if (children)
148
156
  return cloneElement(children, request);
@@ -150,7 +158,15 @@ function FaasReactClient({
150
158
  return render(request);
151
159
  }
152
160
  return fallback || null;
153
- }
161
+ }, [loaded, request.action, request.params, request.data, request.error]);
162
+ return child;
163
+ }
164
+ FaasDataWrapper2.whyDidYouRender = true;
165
+ const reactClient = {
166
+ id: client.id,
167
+ faas: faas2,
168
+ useFaas: useFaas2,
169
+ FaasDataWrapper: FaasDataWrapper2
154
170
  };
155
171
  clients[domain] = reactClient;
156
172
  return reactClient;
@@ -178,6 +194,7 @@ function FaasDataWrapper(props) {
178
194
  return props.fallback || null;
179
195
  return /* @__PURE__ */ jsx(client.FaasDataWrapper, { ...props });
180
196
  }
197
+ FaasDataWrapper.whyDidYouRender = true;
181
198
  var ErrorBoundary = class extends Component {
182
199
  constructor(props) {
183
200
  super(props);
@@ -214,6 +231,7 @@ var ErrorBoundary = class extends Component {
214
231
  return this.props.children;
215
232
  }
216
233
  };
234
+ ErrorBoundary.whyDidYouRender = true;
217
235
  function signal(initialValue, options = {}) {
218
236
  const state = signal$1(initialValue);
219
237
  if (options.debugName)
@@ -233,4 +251,4 @@ function useSignalState(initialValue, options = {}) {
233
251
  ];
234
252
  }
235
253
 
236
- export { ErrorBoundary, FaasDataWrapper, FaasReactClient, faas, getClient, signal, useFaas, useSignalState };
254
+ export { ErrorBoundary, FaasDataWrapper, FaasReactClient, faas, getClient, signal, useConstant, useFaas, useSignalState };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@faasjs/react",
3
- "version": "1.5.0",
3
+ "version": "1.7.0",
4
4
  "license": "MIT",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
@@ -22,7 +22,7 @@
22
22
  "dist"
23
23
  ],
24
24
  "dependencies": {
25
- "@faasjs/browser": "1.5.0"
25
+ "@faasjs/browser": "1.7.0"
26
26
  },
27
27
  "peerDependencies": {
28
28
  "react": "*",