request-iframe 0.0.3 → 0.0.4
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/QUICKSTART.CN.md +35 -8
- package/QUICKSTART.md +35 -8
- package/README.CN.md +170 -24
- package/README.md +230 -19
- package/library/__tests__/coverage-branches.test.ts +356 -0
- package/library/__tests__/requestIframe.test.ts +1008 -58
- package/library/__tests__/stream.test.ts +46 -15
- package/library/api/client.d.ts.map +1 -1
- package/library/api/client.js +1 -0
- package/library/constants/messages.d.ts +2 -0
- package/library/constants/messages.d.ts.map +1 -1
- package/library/constants/messages.js +2 -0
- package/library/core/client-server.d.ts +4 -0
- package/library/core/client-server.d.ts.map +1 -1
- package/library/core/client-server.js +45 -22
- package/library/core/client.d.ts +31 -4
- package/library/core/client.d.ts.map +1 -1
- package/library/core/client.js +471 -284
- package/library/core/request.d.ts +3 -1
- package/library/core/request.d.ts.map +1 -1
- package/library/core/request.js +2 -1
- package/library/core/response.d.ts +26 -4
- package/library/core/response.d.ts.map +1 -1
- package/library/core/response.js +142 -81
- package/library/core/server.d.ts +13 -0
- package/library/core/server.d.ts.map +1 -1
- package/library/core/server.js +211 -6
- package/library/index.d.ts +2 -1
- package/library/index.d.ts.map +1 -1
- package/library/index.js +32 -3
- package/library/message/dispatcher.d.ts.map +1 -1
- package/library/message/dispatcher.js +4 -3
- package/library/stream/index.d.ts +11 -1
- package/library/stream/index.d.ts.map +1 -1
- package/library/stream/index.js +21 -3
- package/library/stream/types.d.ts +2 -2
- package/library/stream/types.d.ts.map +1 -1
- package/library/stream/writable-stream.d.ts +1 -1
- package/library/stream/writable-stream.d.ts.map +1 -1
- package/library/stream/writable-stream.js +8 -10
- package/library/types/index.d.ts +26 -4
- package/library/types/index.d.ts.map +1 -1
- package/library/utils/index.d.ts +14 -0
- package/library/utils/index.d.ts.map +1 -1
- package/library/utils/index.js +99 -1
- package/library/utils/path-match.d.ts +16 -0
- package/library/utils/path-match.d.ts.map +1 -1
- package/library/utils/path-match.js +65 -0
- package/package.json +2 -1
- package/react/library/__tests__/index.test.tsx +44 -22
- package/react/library/index.d.ts.map +1 -1
- package/react/library/index.js +81 -23
- package/react/package.json +7 -0
package/react/library/index.js
CHANGED
|
@@ -55,37 +55,73 @@ var _ = require("../..");
|
|
|
55
55
|
* ```
|
|
56
56
|
*/
|
|
57
57
|
function useClient(targetFnOrRef, options, deps) {
|
|
58
|
+
var clientRef = (0, _react.useRef)(null);
|
|
58
59
|
var _useState = (0, _react.useState)(null),
|
|
59
60
|
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
60
61
|
client = _useState2[0],
|
|
61
62
|
setClient = _useState2[1];
|
|
62
|
-
(0, _react.
|
|
63
|
-
|
|
64
|
-
|
|
63
|
+
var lastTargetRef = (0, _react.useRef)(null);
|
|
64
|
+
var targetFnOrRefRef = (0, _react.useRef)(targetFnOrRef);
|
|
65
|
+
var optionsRef = (0, _react.useRef)(options);
|
|
65
66
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
67
|
+
/** Keep latest inputs without re-creating effect deps */
|
|
68
|
+
targetFnOrRefRef.current = targetFnOrRef;
|
|
69
|
+
optionsRef.current = options;
|
|
70
|
+
var getTarget = (0, _react.useCallback)(() => {
|
|
71
|
+
return typeof targetFnOrRefRef.current === 'function' ? targetFnOrRefRef.current() : targetFnOrRefRef.current.current;
|
|
72
|
+
}, []);
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Snapshot the current target during render (pure read).
|
|
76
|
+
* We use this value as an effect dependency so the effect only runs when
|
|
77
|
+
* the target actually changes (avoids StrictMode update-depth loops).
|
|
78
|
+
*/
|
|
79
|
+
var target = getTarget();
|
|
80
|
+
var destroy = (0, _react.useCallback)(() => {
|
|
81
|
+
if (clientRef.current) {
|
|
82
|
+
clientRef.current.destroy();
|
|
83
|
+
clientRef.current = null;
|
|
70
84
|
}
|
|
85
|
+
lastTargetRef.current = null;
|
|
86
|
+
}, []);
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Create/destroy client in effect to be compatible with React 18 StrictMode
|
|
90
|
+
* and concurrent rendering (avoid render-phase side effects).
|
|
91
|
+
*/
|
|
92
|
+
(0, _react.useEffect)(() => {
|
|
93
|
+
/** If target unchanged, keep current client */
|
|
94
|
+
if (target === lastTargetRef.current) return;
|
|
71
95
|
|
|
72
|
-
|
|
96
|
+
/** Target changed: destroy old client and maybe create a new one */
|
|
97
|
+
if (clientRef.current) {
|
|
98
|
+
clientRef.current.destroy();
|
|
99
|
+
clientRef.current = null;
|
|
100
|
+
}
|
|
101
|
+
lastTargetRef.current = target;
|
|
73
102
|
if (!target) {
|
|
103
|
+
setClient(null);
|
|
74
104
|
return;
|
|
75
105
|
}
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
var newClient = (0, _.requestIframeClient)(target, options);
|
|
106
|
+
var newClient = (0, _.requestIframeClient)(target, optionsRef.current);
|
|
107
|
+
clientRef.current = newClient;
|
|
79
108
|
setClient(newClient);
|
|
80
|
-
|
|
81
|
-
// Cleanup: destroy client on unmount
|
|
82
109
|
return () => {
|
|
83
|
-
if
|
|
110
|
+
/** Cleanup only if it's still the current client */
|
|
111
|
+
if (clientRef.current === newClient) {
|
|
84
112
|
newClient.destroy();
|
|
85
|
-
|
|
113
|
+
clientRef.current = null;
|
|
114
|
+
lastTargetRef.current = null;
|
|
86
115
|
}
|
|
87
116
|
};
|
|
88
|
-
}, deps
|
|
117
|
+
}, deps ? [...deps, target] : [target]);
|
|
118
|
+
|
|
119
|
+
// Cleanup on unmount
|
|
120
|
+
(0, _react.useEffect)(() => {
|
|
121
|
+
return () => {
|
|
122
|
+
destroy();
|
|
123
|
+
};
|
|
124
|
+
}, []);
|
|
89
125
|
return client;
|
|
90
126
|
}
|
|
91
127
|
|
|
@@ -113,24 +149,46 @@ function useClient(targetFnOrRef, options, deps) {
|
|
|
113
149
|
* ```
|
|
114
150
|
*/
|
|
115
151
|
function useServer(options, deps) {
|
|
152
|
+
var serverRef = (0, _react.useRef)(null);
|
|
116
153
|
var _useState3 = (0, _react.useState)(null),
|
|
117
154
|
_useState4 = (0, _slicedToArray2.default)(_useState3, 2),
|
|
118
155
|
server = _useState4[0],
|
|
119
156
|
setServer = _useState4[1];
|
|
157
|
+
var optionsRef = (0, _react.useRef)(options);
|
|
158
|
+
optionsRef.current = options;
|
|
159
|
+
var destroy = (0, _react.useCallback)(() => {
|
|
160
|
+
if (serverRef.current) {
|
|
161
|
+
serverRef.current.destroy();
|
|
162
|
+
serverRef.current = null;
|
|
163
|
+
}
|
|
164
|
+
}, []);
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* Create/destroy server in effect to be compatible with React 18 StrictMode
|
|
168
|
+
* and concurrent rendering (avoid render-phase side effects).
|
|
169
|
+
*/
|
|
120
170
|
(0, _react.useEffect)(() => {
|
|
121
|
-
|
|
122
|
-
|
|
171
|
+
if (serverRef.current) {
|
|
172
|
+
serverRef.current.destroy();
|
|
173
|
+
serverRef.current = null;
|
|
174
|
+
}
|
|
175
|
+
var newServer = (0, _.requestIframeServer)(optionsRef.current);
|
|
176
|
+
serverRef.current = newServer;
|
|
123
177
|
setServer(newServer);
|
|
124
|
-
|
|
125
|
-
// Cleanup: destroy server on unmount
|
|
126
178
|
return () => {
|
|
127
|
-
if (newServer) {
|
|
179
|
+
if (serverRef.current === newServer) {
|
|
128
180
|
newServer.destroy();
|
|
129
|
-
|
|
181
|
+
serverRef.current = null;
|
|
130
182
|
}
|
|
131
183
|
};
|
|
132
|
-
}, deps !==
|
|
184
|
+
}, deps !== null && deps !== void 0 ? deps : []);
|
|
133
185
|
|
|
186
|
+
// Cleanup on unmount
|
|
187
|
+
(0, _react.useEffect)(() => {
|
|
188
|
+
return () => {
|
|
189
|
+
destroy();
|
|
190
|
+
};
|
|
191
|
+
}, []);
|
|
134
192
|
return server;
|
|
135
193
|
}
|
|
136
194
|
|