@faasjs/react 0.0.3-beta.8 → 0.0.3-beta.81

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
@@ -10,7 +10,7 @@ React plugin for FaasJS.
10
10
 
11
11
  ## Install
12
12
 
13
- npm install @faasjs/react
13
+ npm install @faasjs/react react react-dom
14
14
 
15
15
  ## Modules
16
16
 
@@ -20,14 +20,17 @@ React plugin for FaasJS.
20
20
  - [Response](classes/Response.md)
21
21
  - [ResponseError](classes/ResponseError.md)
22
22
 
23
+ ### Interfaces
24
+
25
+ - [FaasDataInjection](interfaces/FaasDataInjection.md)
26
+ - [FaasDataWrapperProps](interfaces/FaasDataWrapperProps.md)
27
+ - [FaasReactClientInstance](interfaces/FaasReactClientInstance.md)
28
+
23
29
  ### Type Aliases
24
30
 
25
31
  - [FaasAction](#faasaction)
26
32
  - [FaasData](#faasdata)
27
- - [FaasDataInjection](#faasdatainjection)
28
- - [FaasDataWrapperProps](#faasdatawrapperprops)
29
33
  - [FaasParams](#faasparams)
30
- - [FaasReactClientInstance](#faasreactclientinstance)
31
34
  - [Options](#options)
32
35
  - [ResponseHeaders](#responseheaders)
33
36
 
@@ -59,60 +62,6 @@ ___
59
62
 
60
63
  ___
61
64
 
62
- ### FaasDataInjection
63
-
64
- Ƭ **FaasDataInjection**<`Data`\>: `Object`
65
-
66
- Injects FaasData props.
67
-
68
- #### Type parameters
69
-
70
- | Name | Type |
71
- | :------ | :------ |
72
- | `Data` | `any` |
73
-
74
- #### Type declaration
75
-
76
- | Name | Type |
77
- | :------ | :------ |
78
- | `action` | `string` \| `any` |
79
- | `data` | `Data` |
80
- | `error` | `any` |
81
- | `loading` | `boolean` |
82
- | `params` | `Record`<`string`, `any`\> |
83
- | `promise` | `Promise`<[`Response`](classes/Response.md)<`Data`\>\> |
84
- | `setData` | `React.Dispatch`<`React.SetStateAction`<`Data`\>\> |
85
- | `setError` | `React.Dispatch`<`React.SetStateAction`<`any`\>\> |
86
- | `setLoading` | `React.Dispatch`<`React.SetStateAction`<`boolean`\>\> |
87
- | `setPromise` | `React.Dispatch`<`React.SetStateAction`<`Promise`<[`Response`](classes/Response.md)<`Data`\>\>\>\> |
88
- | `reload` | (`params?`: `Record`<`string`, `any`\>) => `Promise`<[`Response`](classes/Response.md)<`Data`\>\> |
89
-
90
- ___
91
-
92
- ### FaasDataWrapperProps
93
-
94
- Ƭ **FaasDataWrapperProps**<`PathOrData`\>: `Object`
95
-
96
- #### Type parameters
97
-
98
- | Name | Type |
99
- | :------ | :------ |
100
- | `PathOrData` | extends [`FaasAction`](#faasaction) |
101
-
102
- #### Type declaration
103
-
104
- | Name | Type | Description |
105
- | :------ | :------ | :------ |
106
- | `action` | `string` | - |
107
- | `data?` | [`FaasData`](#faasdata)<`PathOrData`\> | use custom data, should work with setData |
108
- | `fallback?` | `JSX.Element` \| ``false`` | - |
109
- | `params?` | [`FaasParams`](#faasparams)<`PathOrData`\> | - |
110
- | `setData?` | `React.Dispatch`<`React.SetStateAction`<[`FaasData`](#faasdata)<`PathOrData`\>\>\> | use custom setData, should work with data |
111
- | `onDataChange?` | (`args`: [`FaasDataInjection`](#faasdatainjection)<[`FaasData`](#faasdata)<`PathOrData`\>\>) => `void` | - |
112
- | `render?` | (`args`: [`FaasDataInjection`](#faasdatainjection)<[`FaasData`](#faasdata)<`PathOrData`\>\>) => `Element` \| `Element`[] | - |
113
-
114
- ___
115
-
116
65
  ### FaasParams
117
66
 
118
67
  Ƭ **FaasParams**<`T`\>: `T` extends `FaasActionPaths` ? `FaasActions`[`T`][``"Params"``] : `any`
@@ -125,20 +74,6 @@ ___
125
74
 
126
75
  ___
127
76
 
128
- ### FaasReactClientInstance
129
-
130
- Ƭ **FaasReactClientInstance**: `Object`
131
-
132
- #### Type declaration
133
-
134
- | Name | Type |
135
- | :------ | :------ |
136
- | `faas` | <PathOrData\>(`action`: `string` \| `PathOrData`, `params`: [`FaasParams`](#faasparams)<`PathOrData`\>) => `Promise`<[`Response`](classes/Response.md)<[`FaasData`](#faasdata)<`PathOrData`\>\>\> |
137
- | `useFaas` | <PathOrData\>(`action`: `string` \| `PathOrData`, `defaultParams`: [`FaasParams`](#faasparams)<`PathOrData`\>) => [`FaasDataInjection`](#faasdatainjection)<[`FaasData`](#faasdata)<`PathOrData`\>\> |
138
- | `FaasDataWrapper` | <PathOrData\>(`props`: [`FaasDataWrapperProps`](#faasdatawrapperprops)<`PathOrData`\>) => `Element` |
139
-
140
- ___
141
-
142
77
  ### Options
143
78
 
144
79
  Ƭ **Options**: `RequestInit` & { `beforeRequest?`: (`{
@@ -173,7 +108,7 @@ A data wrapper for react components
173
108
 
174
109
  | Name | Type |
175
110
  | :------ | :------ |
176
- | `props` | [`FaasDataWrapperProps`](#faasdatawrapperprops)<`PathOrData`\> |
111
+ | `props` | [`FaasDataWrapperProps`](interfaces/FaasDataWrapperProps.md)<`PathOrData`\> |
177
112
 
178
113
  #### Returns
179
114
 
@@ -194,7 +129,7 @@ ___
194
129
 
195
130
  ### FaasReactClient
196
131
 
197
- ▸ **FaasReactClient**(`__namedParameters`): [`FaasReactClientInstance`](#faasreactclientinstance)
132
+ ▸ **FaasReactClient**(`«destructured»`): [`FaasReactClientInstance`](interfaces/FaasReactClientInstance.md)
198
133
 
199
134
  Before use faas, you should initialize a FaasReactClient.
200
135
 
@@ -202,14 +137,14 @@ Before use faas, you should initialize a FaasReactClient.
202
137
 
203
138
  | Name | Type |
204
139
  | :------ | :------ |
205
- | `__namedParameters` | `Object` |
206
- | `__namedParameters.domain` | `string` |
207
- | `__namedParameters.onError?` | (`action`: `string`, `params`: `Record`<`string`, `any`\>) => (`res`: [`ResponseError`](classes/ResponseError.md)) => `Promise`<`void`\> |
208
- | `__namedParameters.options?` | [`Options`](#options) |
140
+ | `«destructured»` | `Object` |
141
+ | › `domain` | `string` |
142
+ | › `onError?` | (`action`: `string`, `params`: `Record`<`string`, `any`\>) => (`res`: [`ResponseError`](classes/ResponseError.md)) => `Promise`<`void`\> |
143
+ | › `options?` | [`Options`](#options) |
209
144
 
210
145
  #### Returns
211
146
 
212
- [`FaasReactClientInstance`](#faasreactclientinstance)
147
+ [`FaasReactClientInstance`](interfaces/FaasReactClientInstance.md)
213
148
 
214
149
  ```ts
215
150
  const client = FaasReactClient({
@@ -252,7 +187,7 @@ ___
252
187
 
253
188
  ### getClient
254
189
 
255
- ▸ **getClient**(`domain?`): [`FaasReactClientInstance`](#faasreactclientinstance)
190
+ ▸ **getClient**(`domain?`): [`FaasReactClientInstance`](interfaces/FaasReactClientInstance.md)
256
191
 
257
192
  Get FaasReactClient instance
258
193
 
@@ -264,7 +199,7 @@ Get FaasReactClient instance
264
199
 
265
200
  #### Returns
266
201
 
267
- [`FaasReactClientInstance`](#faasreactclientinstance)
202
+ [`FaasReactClientInstance`](interfaces/FaasReactClientInstance.md)
268
203
 
269
204
  ```ts
270
205
  getClient()
@@ -276,7 +211,7 @@ ___
276
211
 
277
212
  ### useFaas
278
213
 
279
- ▸ **useFaas**<`PathOrData`\>(`action`, `defaultParams`): [`FaasDataInjection`](#faasdatainjection)<[`FaasData`](#faasdata)<`PathOrData`\>\>
214
+ ▸ **useFaas**<`PathOrData`\>(`action`, `defaultParams`, `options?`): [`FaasDataInjection`](interfaces/FaasDataInjection.md)<[`FaasData`](#faasdata)<`PathOrData`\>\>
280
215
 
281
216
  Request faas server with React hook
282
217
 
@@ -292,10 +227,14 @@ Request faas server with React hook
292
227
  | :------ | :------ | :------ |
293
228
  | `action` | `string` \| `PathOrData` | {string} action name |
294
229
  | `defaultParams` | [`FaasParams`](#faasparams)<`PathOrData`\> | {object} initial action params |
230
+ | `options?` | `Object` | - |
231
+ | `options.data?` | [`FaasData`](#faasdata)<`PathOrData`\> | - |
232
+ | `options.setData?` | `Dispatch`<`SetStateAction`<[`FaasData`](#faasdata)<`PathOrData`\>\>\> | - |
233
+ | `options.skip?` | `boolean` | - |
295
234
 
296
235
  #### Returns
297
236
 
298
- [`FaasDataInjection`](#faasdatainjection)<[`FaasData`](#faasdata)<`PathOrData`\>\>
237
+ [`FaasDataInjection`](interfaces/FaasDataInjection.md)<[`FaasData`](#faasdata)<`PathOrData`\>\>
299
238
 
300
239
  ```ts
301
240
  function Post ({ id }) {
package/dist/index.d.ts CHANGED
@@ -1,12 +1,17 @@
1
1
  import { Response, Options, ResponseError } from '@faasjs/browser';
2
2
  export { FaasBrowserClient, Options, Response, ResponseError, ResponseHeaders } from '@faasjs/browser';
3
- import { FaasAction, FaasData, FaasParams } from '@faasjs/types';
4
- export { FaasAction, FaasData, FaasParams } from '@faasjs/types';
3
+
4
+ interface FaasActions {
5
+ }
6
+ type FaasActionPaths = keyof FaasActions;
7
+ type FaasAction = FaasActionPaths | Record<string, any>;
8
+ type FaasParams<T = any> = T extends FaasActionPaths ? FaasActions[T]['Params'] : any;
9
+ type FaasData<T = any> = T extends FaasActionPaths ? FaasActions[T]['Data'] : T;
5
10
 
6
11
  /**
7
12
  * Injects FaasData props.
8
13
  */
9
- type FaasDataInjection<Data = any> = {
14
+ interface FaasDataInjection<Data = any> {
10
15
  action: string | any;
11
16
  params: Record<string, any>;
12
17
  loading: boolean;
@@ -18,9 +23,10 @@ type FaasDataInjection<Data = any> = {
18
23
  setLoading: React.Dispatch<React.SetStateAction<boolean>>;
19
24
  setPromise: React.Dispatch<React.SetStateAction<Promise<Response<Data>>>>;
20
25
  setError: React.Dispatch<React.SetStateAction<any>>;
21
- };
22
- type FaasDataWrapperProps<PathOrData extends FaasAction> = {
26
+ }
27
+ interface FaasDataWrapperProps<PathOrData extends FaasAction> {
23
28
  render?(args: FaasDataInjection<FaasData<PathOrData>>): JSX.Element | JSX.Element[];
29
+ children?: React.ReactElement<Partial<FaasDataInjection>>;
24
30
  fallback?: JSX.Element | false;
25
31
  action: string;
26
32
  params?: FaasParams<PathOrData>;
@@ -29,8 +35,8 @@ type FaasDataWrapperProps<PathOrData extends FaasAction> = {
29
35
  data?: FaasData<PathOrData>;
30
36
  /** use custom setData, should work with data */
31
37
  setData?: React.Dispatch<React.SetStateAction<FaasData<PathOrData>>>;
32
- };
33
- type FaasReactClientInstance = {
38
+ }
39
+ interface FaasReactClientInstance {
34
40
  faas: <PathOrData extends FaasAction>(action: string | PathOrData, params: FaasParams<PathOrData>) => Promise<Response<FaasData<PathOrData>>>;
35
41
  useFaas: <PathOrData extends FaasAction>(action: string | PathOrData, defaultParams: FaasParams<PathOrData>, options?: {
36
42
  data?: FaasData<PathOrData>;
@@ -38,7 +44,7 @@ type FaasReactClientInstance = {
38
44
  skip?: boolean;
39
45
  }) => FaasDataInjection<FaasData<PathOrData>>;
40
46
  FaasDataWrapper<PathOrData extends FaasAction>(props: FaasDataWrapperProps<PathOrData>): JSX.Element;
41
- };
47
+ }
42
48
  /**
43
49
  * Before use faas, you should initialize a FaasReactClient.
44
50
  *
@@ -118,4 +124,4 @@ declare function useFaas<PathOrData extends FaasAction>(action: string | PathOrD
118
124
  */
119
125
  declare function FaasDataWrapper<PathOrData extends FaasAction>(props: FaasDataWrapperProps<PathOrData>): JSX.Element;
120
126
 
121
- export { FaasDataInjection, FaasDataWrapper, FaasDataWrapperProps, FaasReactClient, FaasReactClientInstance, faas, getClient, useFaas };
127
+ export { FaasAction, FaasData, FaasDataInjection, FaasDataWrapper, FaasDataWrapperProps, FaasParams, FaasReactClient, FaasReactClientInstance, faas, getClient, useFaas };
package/dist/index.js CHANGED
@@ -20,6 +20,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
20
20
  // src/index.tsx
21
21
  var src_exports = {};
22
22
  __export(src_exports, {
23
+ FaasBrowserClient: () => import_browser.FaasBrowserClient,
23
24
  FaasDataWrapper: () => FaasDataWrapper,
24
25
  FaasReactClient: () => FaasReactClient,
25
26
  faas: () => faas,
@@ -53,34 +54,49 @@ function FaasReactClient({
53
54
  const [promise, setPromise] = (0, import_react.useState)();
54
55
  const [params, setParams] = (0, import_react.useState)(defaultParams);
55
56
  const [reloadTimes, setReloadTimes] = (0, import_react.useState)(0);
57
+ const [fails, setFails] = (0, import_react.useState)(0);
56
58
  (0, import_react.useEffect)(function() {
57
59
  if (JSON.stringify(defaultParams) !== JSON.stringify(params)) {
58
60
  setParams(defaultParams);
59
61
  }
60
62
  }, [JSON.stringify(defaultParams)]);
61
63
  (0, import_react.useEffect)(function() {
62
- if (options2 == null ? void 0 : options2.skip) {
64
+ if (!action || (options2 == null ? void 0 : options2.skip)) {
63
65
  setLoading(false);
64
66
  return;
65
67
  }
66
68
  setLoading(true);
67
- const request = client.action(action, params);
68
- setPromise(request);
69
- request.then((r) => (options2 == null ? void 0 : options2.setData) ? options2.setData(r.data) : setData(r.data)).catch(async (e) => {
70
- if (onError)
71
- try {
72
- await onError(action, params)(e);
73
- } catch (error2) {
74
- setError(error2);
69
+ const controller = new AbortController();
70
+ function send() {
71
+ const request = client.action(action, options2.params || params, { signal: controller.signal });
72
+ setPromise(request);
73
+ request.then((r) => (options2 == null ? void 0 : options2.setData) ? options2.setData(r.data) : setData(r.data)).catch(async (e) => {
74
+ if ((e == null ? void 0 : e.message) === "The user aborted a request.")
75
+ return;
76
+ if (!fails && typeof (e == null ? void 0 : e.message) === "string" && e.message.indexOf("Failed to fetch") >= 0) {
77
+ console.warn(`FaasReactClient: ${e.message} retry...`);
78
+ setFails(1);
79
+ return send();
75
80
  }
76
- else
77
- setError(e);
78
- return Promise.reject(e);
79
- }).finally(() => setLoading(false));
80
- return () => setLoading(false);
81
+ if (onError)
82
+ try {
83
+ await onError(action, params)(e);
84
+ } catch (error2) {
85
+ setError(error2);
86
+ }
87
+ else
88
+ setError(e);
89
+ return Promise.reject(e);
90
+ }).finally(() => setLoading(false));
91
+ }
92
+ send();
93
+ return () => {
94
+ controller.abort();
95
+ setLoading(false);
96
+ };
81
97
  }, [
82
98
  action,
83
- JSON.stringify(params),
99
+ JSON.stringify(options2.params || params),
84
100
  reloadTimes,
85
101
  options2.skip
86
102
  ]);
@@ -111,6 +127,7 @@ function FaasReactClient({
111
127
  params,
112
128
  fallback,
113
129
  render,
130
+ children,
114
131
  onDataChange,
115
132
  data,
116
133
  setData
@@ -128,8 +145,12 @@ function FaasReactClient({
128
145
  if (onDataChange)
129
146
  onDataChange(request);
130
147
  }, [JSON.stringify(request.data)]);
131
- if (loaded)
132
- return render(request);
148
+ if (loaded) {
149
+ if (children)
150
+ return (0, import_react.cloneElement)(children, request);
151
+ if (render)
152
+ return render(request);
153
+ }
133
154
  return fallback || null;
134
155
  }
135
156
  };
@@ -161,6 +182,7 @@ function FaasDataWrapper(props) {
161
182
  }
162
183
  // Annotate the CommonJS export names for ESM import in node:
163
184
  0 && (module.exports = {
185
+ FaasBrowserClient,
164
186
  FaasDataWrapper,
165
187
  FaasReactClient,
166
188
  faas,
package/dist/index.mjs CHANGED
@@ -5,7 +5,8 @@ import {
5
5
  import {
6
6
  useState,
7
7
  useEffect,
8
- createElement
8
+ createElement,
9
+ cloneElement
9
10
  } from "react";
10
11
  var clients = {};
11
12
  function FaasReactClient({
@@ -31,34 +32,49 @@ function FaasReactClient({
31
32
  const [promise, setPromise] = useState();
32
33
  const [params, setParams] = useState(defaultParams);
33
34
  const [reloadTimes, setReloadTimes] = useState(0);
35
+ const [fails, setFails] = useState(0);
34
36
  useEffect(function() {
35
37
  if (JSON.stringify(defaultParams) !== JSON.stringify(params)) {
36
38
  setParams(defaultParams);
37
39
  }
38
40
  }, [JSON.stringify(defaultParams)]);
39
41
  useEffect(function() {
40
- if (options2 == null ? void 0 : options2.skip) {
42
+ if (!action || (options2 == null ? void 0 : options2.skip)) {
41
43
  setLoading(false);
42
44
  return;
43
45
  }
44
46
  setLoading(true);
45
- const request = client.action(action, params);
46
- setPromise(request);
47
- request.then((r) => (options2 == null ? void 0 : options2.setData) ? options2.setData(r.data) : setData(r.data)).catch(async (e) => {
48
- if (onError)
49
- try {
50
- await onError(action, params)(e);
51
- } catch (error2) {
52
- setError(error2);
47
+ const controller = new AbortController();
48
+ function send() {
49
+ const request = client.action(action, options2.params || params, { signal: controller.signal });
50
+ setPromise(request);
51
+ request.then((r) => (options2 == null ? void 0 : options2.setData) ? options2.setData(r.data) : setData(r.data)).catch(async (e) => {
52
+ if ((e == null ? void 0 : e.message) === "The user aborted a request.")
53
+ return;
54
+ if (!fails && typeof (e == null ? void 0 : e.message) === "string" && e.message.indexOf("Failed to fetch") >= 0) {
55
+ console.warn(`FaasReactClient: ${e.message} retry...`);
56
+ setFails(1);
57
+ return send();
53
58
  }
54
- else
55
- setError(e);
56
- return Promise.reject(e);
57
- }).finally(() => setLoading(false));
58
- return () => setLoading(false);
59
+ if (onError)
60
+ try {
61
+ await onError(action, params)(e);
62
+ } catch (error2) {
63
+ setError(error2);
64
+ }
65
+ else
66
+ setError(e);
67
+ return Promise.reject(e);
68
+ }).finally(() => setLoading(false));
69
+ }
70
+ send();
71
+ return () => {
72
+ controller.abort();
73
+ setLoading(false);
74
+ };
59
75
  }, [
60
76
  action,
61
- JSON.stringify(params),
77
+ JSON.stringify(options2.params || params),
62
78
  reloadTimes,
63
79
  options2.skip
64
80
  ]);
@@ -89,6 +105,7 @@ function FaasReactClient({
89
105
  params,
90
106
  fallback,
91
107
  render,
108
+ children,
92
109
  onDataChange,
93
110
  data,
94
111
  setData
@@ -106,8 +123,12 @@ function FaasReactClient({
106
123
  if (onDataChange)
107
124
  onDataChange(request);
108
125
  }, [JSON.stringify(request.data)]);
109
- if (loaded)
110
- return render(request);
126
+ if (loaded) {
127
+ if (children)
128
+ return cloneElement(children, request);
129
+ if (render)
130
+ return render(request);
131
+ }
111
132
  return fallback || null;
112
133
  }
113
134
  };
@@ -138,6 +159,7 @@ function FaasDataWrapper(props) {
138
159
  return createElement(client.FaasDataWrapper, props);
139
160
  }
140
161
  export {
162
+ FaasBrowserClient,
141
163
  FaasDataWrapper,
142
164
  FaasReactClient,
143
165
  faas,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@faasjs/react",
3
- "version": "0.0.3-beta.8",
3
+ "version": "0.0.3-beta.81",
4
4
  "license": "MIT",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
@@ -16,15 +16,15 @@
16
16
  },
17
17
  "funding": "https://github.com/sponsors/faasjs",
18
18
  "scripts": {
19
- "build": "tsup src/index.tsx --format esm,cjs",
20
- "build:types": "tsup-node src/index.tsx --dts-only"
19
+ "build": "tsup src/index.tsx --format esm,cjs --dts --clean"
21
20
  },
22
21
  "files": [
23
22
  "dist"
24
23
  ],
25
24
  "dependencies": {
26
- "@faasjs/browser": "^0.0.3-beta.8",
27
- "@faasjs/types": "^0.0.3-beta.8",
25
+ "@faasjs/browser": "^0.0.3-beta.81"
26
+ },
27
+ "peerDependencies": {
28
28
  "react": "*"
29
29
  },
30
30
  "devDependencies": {