request-iframe 0.0.1 → 0.0.3
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.CN.md +271 -12
- package/README.md +268 -11
- package/library/__tests__/channel.test.ts +420 -0
- package/library/__tests__/debug.test.ts +588 -0
- package/library/__tests__/dispatcher.test.ts +481 -0
- package/library/__tests__/interceptors.test.ts +22 -0
- package/library/__tests__/requestIframe.test.ts +2317 -99
- package/library/__tests__/server.test.ts +738 -0
- package/library/api/client.d.js +5 -0
- package/library/api/client.d.ts.map +1 -1
- package/library/api/client.js +11 -6
- package/library/api/server.d.js +5 -0
- package/library/api/server.d.ts +4 -3
- package/library/api/server.d.ts.map +1 -1
- package/library/api/server.js +25 -7
- package/library/constants/index.d.js +36 -0
- package/library/constants/index.d.ts +14 -4
- package/library/constants/index.d.ts.map +1 -1
- package/library/constants/index.js +15 -7
- package/library/constants/messages.d.js +5 -0
- package/library/constants/messages.d.ts +35 -0
- package/library/constants/messages.d.ts.map +1 -1
- package/library/constants/messages.js +36 -1
- package/library/core/client-server.d.ts +101 -0
- package/library/core/client-server.d.ts.map +1 -0
- package/library/core/client-server.js +266 -0
- package/library/core/client.d.js +5 -0
- package/library/core/client.d.ts +38 -6
- package/library/core/client.d.ts.map +1 -1
- package/library/core/client.js +198 -24
- package/library/core/request.d.js +5 -0
- package/library/core/response.d.js +5 -0
- package/library/core/response.d.ts +5 -1
- package/library/core/response.d.ts.map +1 -1
- package/library/core/response.js +85 -70
- package/library/core/server-client.d.js +5 -0
- package/library/core/server-client.d.ts +3 -1
- package/library/core/server-client.d.ts.map +1 -1
- package/library/core/server-client.js +19 -9
- package/library/core/server.d.js +5 -0
- package/library/core/server.d.ts +11 -3
- package/library/core/server.d.ts.map +1 -1
- package/library/core/server.js +112 -54
- package/library/index.d.ts +1 -1
- package/library/index.js +2 -2
- package/library/interceptors/index.d.js +5 -0
- package/library/interceptors/index.d.ts +4 -0
- package/library/interceptors/index.d.ts.map +1 -1
- package/library/interceptors/index.js +7 -0
- package/library/message/channel.d.js +5 -0
- package/library/message/channel.d.ts +3 -1
- package/library/message/channel.d.ts.map +1 -1
- package/library/message/dispatcher.d.js +5 -0
- package/library/message/dispatcher.d.ts +7 -2
- package/library/message/dispatcher.d.ts.map +1 -1
- package/library/message/dispatcher.js +47 -2
- package/library/message/index.d.js +25 -0
- package/library/stream/file-stream.d.js +4 -0
- package/library/stream/file-stream.d.ts +5 -0
- package/library/stream/file-stream.d.ts.map +1 -1
- package/library/stream/file-stream.js +41 -12
- package/library/stream/index.d.js +58 -0
- package/library/stream/readable-stream.d.js +5 -0
- package/library/stream/readable-stream.d.ts.map +1 -1
- package/library/stream/readable-stream.js +32 -30
- package/library/stream/types.d.js +5 -0
- package/library/stream/types.d.ts +18 -0
- package/library/stream/types.d.ts.map +1 -1
- package/library/stream/writable-stream.d.js +5 -0
- package/library/stream/writable-stream.d.ts +1 -0
- package/library/stream/writable-stream.d.ts.map +1 -1
- package/library/stream/writable-stream.js +7 -2
- package/library/types/index.d.js +5 -0
- package/library/types/index.d.ts +79 -19
- package/library/types/index.d.ts.map +1 -1
- package/library/utils/cache.d.js +5 -0
- package/library/utils/cache.d.ts +24 -0
- package/library/utils/cache.d.ts.map +1 -1
- package/library/utils/cache.js +76 -0
- package/library/utils/cookie.d.js +5 -0
- package/library/utils/debug.d.js +5 -0
- package/library/utils/debug.d.ts.map +1 -1
- package/library/utils/debug.js +382 -20
- package/library/utils/index.d.js +94 -0
- package/library/utils/index.d.ts +5 -0
- package/library/utils/index.d.ts.map +1 -1
- package/library/utils/index.js +14 -1
- package/library/utils/path-match.d.js +5 -0
- package/library/utils/protocol.d.js +5 -0
- package/package.json +16 -2
- package/react/library/__tests__/index.test.d.ts +2 -0
- package/react/library/__tests__/index.test.d.ts.map +1 -0
- package/react/library/__tests__/index.test.tsx +770 -0
- package/react/library/index.d.ts +118 -0
- package/react/library/index.d.ts.map +1 -0
- package/react/library/index.js +232 -0
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { type RefObject } from 'react';
|
|
2
|
+
import { type RequestIframeClient, type RequestIframeClientOptions, type RequestIframeServer, type RequestIframeServerOptions, type ServerHandler } from '../..';
|
|
3
|
+
/**
|
|
4
|
+
* React hook for using request-iframe client
|
|
5
|
+
*
|
|
6
|
+
* @param targetFnOrRef - function that returns iframe element or Window object, or a React ref object
|
|
7
|
+
* @param options - client options
|
|
8
|
+
* @param deps - dependency array (optional, for re-creating client when dependencies change)
|
|
9
|
+
* @returns client instance
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```tsx
|
|
13
|
+
* // Using function
|
|
14
|
+
* const MyComponent = () => {
|
|
15
|
+
* const iframeRef = useRef<HTMLIFrameElement>(null);
|
|
16
|
+
* const client = useClient(() => iframeRef.current, { secretKey: 'my-app' });
|
|
17
|
+
*
|
|
18
|
+
* const handleClick = async () => {
|
|
19
|
+
* if (client) {
|
|
20
|
+
* const response = await client.send('/api/data', { id: 1 });
|
|
21
|
+
* console.log(response.data);
|
|
22
|
+
* }
|
|
23
|
+
* };
|
|
24
|
+
*
|
|
25
|
+
* return (
|
|
26
|
+
* <div>
|
|
27
|
+
* <iframe ref={iframeRef} src="/iframe.html" />
|
|
28
|
+
* <button onClick={handleClick}>Send Request</button>
|
|
29
|
+
* </div>
|
|
30
|
+
* );
|
|
31
|
+
* };
|
|
32
|
+
*
|
|
33
|
+
* // Using ref directly
|
|
34
|
+
* const MyComponent2 = () => {
|
|
35
|
+
* const iframeRef = useRef<HTMLIFrameElement>(null);
|
|
36
|
+
* const client = useClient(iframeRef, { secretKey: 'my-app' });
|
|
37
|
+
* // ...
|
|
38
|
+
* };
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
export declare function useClient(targetFnOrRef: (() => HTMLIFrameElement | Window | null) | RefObject<HTMLIFrameElement | Window | null>, options?: RequestIframeClientOptions, deps?: readonly unknown[]): RequestIframeClient | null;
|
|
42
|
+
/**
|
|
43
|
+
* React hook for using request-iframe server
|
|
44
|
+
*
|
|
45
|
+
* @param options - server options
|
|
46
|
+
* @param deps - dependency array (optional, for re-creating server when dependencies change)
|
|
47
|
+
* @returns server instance
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* ```tsx
|
|
51
|
+
* const MyComponent = () => {
|
|
52
|
+
* const server = useServer({ secretKey: 'my-app' });
|
|
53
|
+
*
|
|
54
|
+
* useEffect(() => {
|
|
55
|
+
* const off = server.on('/api/data', (req, res) => {
|
|
56
|
+
* res.send({ data: 'Hello' });
|
|
57
|
+
* });
|
|
58
|
+
* return off;
|
|
59
|
+
* }, [server]);
|
|
60
|
+
*
|
|
61
|
+
* return <div>Server Component</div>;
|
|
62
|
+
* };
|
|
63
|
+
* ```
|
|
64
|
+
*/
|
|
65
|
+
export declare function useServer(options?: RequestIframeServerOptions, deps?: readonly unknown[]): RequestIframeServer | null;
|
|
66
|
+
/**
|
|
67
|
+
* React hook for registering server handlers
|
|
68
|
+
*
|
|
69
|
+
* @param server - server instance (from useServer)
|
|
70
|
+
* @param path - route path
|
|
71
|
+
* @param handler - handler function
|
|
72
|
+
* @param deps - dependency array (optional, for re-registering when dependencies change)
|
|
73
|
+
*
|
|
74
|
+
* @example
|
|
75
|
+
* ```tsx
|
|
76
|
+
* const MyComponent = () => {
|
|
77
|
+
* const server = useServer();
|
|
78
|
+
* const [userId, setUserId] = useState(1);
|
|
79
|
+
*
|
|
80
|
+
* // Register handler that depends on userId
|
|
81
|
+
* useServerHandler(server, '/api/user', (req, res) => {
|
|
82
|
+
* res.send({ userId, data: 'Hello' });
|
|
83
|
+
* }, [userId]);
|
|
84
|
+
*
|
|
85
|
+
* return <div>Server Component</div>;
|
|
86
|
+
* };
|
|
87
|
+
* ```
|
|
88
|
+
*/
|
|
89
|
+
export declare function useServerHandler(server: RequestIframeServer | null, path: string, handler: ServerHandler, deps: readonly unknown[]): void;
|
|
90
|
+
/**
|
|
91
|
+
* React hook for registering server handlers map
|
|
92
|
+
*
|
|
93
|
+
* @param server - server instance (from useServer)
|
|
94
|
+
* @param map - map of route paths and handler functions
|
|
95
|
+
* @param deps - dependency array (optional, for re-registering when dependencies change)
|
|
96
|
+
*
|
|
97
|
+
* @example
|
|
98
|
+
* ```tsx
|
|
99
|
+
* const MyComponent = () => {
|
|
100
|
+
* const server = useServer();
|
|
101
|
+
* const [userId, setUserId] = useState(1);
|
|
102
|
+
*
|
|
103
|
+
* // Register handlers using map
|
|
104
|
+
* useServerHandlerMap(server, {
|
|
105
|
+
* '/api/user': (req, res) => {
|
|
106
|
+
* res.send({ userId, data: 'Hello' });
|
|
107
|
+
* },
|
|
108
|
+
* '/api/user2': (req, res) => {
|
|
109
|
+
* res.send({ userId, data: 'Hello' });
|
|
110
|
+
* }
|
|
111
|
+
* }, [userId]);
|
|
112
|
+
*
|
|
113
|
+
* return <div>Server Component</div>;
|
|
114
|
+
* };
|
|
115
|
+
* ```
|
|
116
|
+
*/
|
|
117
|
+
export declare function useServerHandlerMap(server: RequestIframeServer | null, map: Record<string, ServerHandler>, deps: readonly unknown[]): void;
|
|
118
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqD,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAC1F,OAAO,EAGL,KAAK,mBAAmB,EACxB,KAAK,0BAA0B,EAC/B,KAAK,mBAAmB,EACxB,KAAK,0BAA0B,EAC/B,KAAK,aAAa,EACnB,MAAM,OAAO,CAAC;AAEf;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,wBAAgB,SAAS,CACvB,aAAa,EAAE,CAAC,MAAM,iBAAiB,GAAG,MAAM,GAAG,IAAI,CAAC,GAAG,SAAS,CAAC,iBAAiB,GAAG,MAAM,GAAG,IAAI,CAAC,EACvG,OAAO,CAAC,EAAE,0BAA0B,EACpC,IAAI,CAAC,EAAE,SAAS,OAAO,EAAE,GACxB,mBAAmB,GAAG,IAAI,CAkC5B;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,SAAS,CACvB,OAAO,CAAC,EAAE,0BAA0B,EACpC,IAAI,CAAC,EAAE,SAAS,OAAO,EAAE,GACxB,mBAAmB,GAAG,IAAI,CAkB5B;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,mBAAmB,GAAG,IAAI,EAClC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,aAAa,EACtB,IAAI,EAAE,SAAS,OAAO,EAAE,GACvB,IAAI,CAmBN;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,mBAAmB,GAAG,IAAI,EAClC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,EAClC,IAAI,EAAE,SAAS,OAAO,EAAE,GACvB,IAAI,CA2BN"}
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.useClient = useClient;
|
|
8
|
+
exports.useServer = useServer;
|
|
9
|
+
exports.useServerHandler = useServerHandler;
|
|
10
|
+
exports.useServerHandlerMap = useServerHandlerMap;
|
|
11
|
+
require("core-js/modules/es.array.iterator.js");
|
|
12
|
+
require("core-js/modules/es.array.map.js");
|
|
13
|
+
require("core-js/modules/es.array.reduce.js");
|
|
14
|
+
require("core-js/modules/es.array.sort.js");
|
|
15
|
+
require("core-js/modules/web.dom-collections.iterator.js");
|
|
16
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
17
|
+
var _react = require("react");
|
|
18
|
+
var _ = require("../..");
|
|
19
|
+
/**
|
|
20
|
+
* React hook for using request-iframe client
|
|
21
|
+
*
|
|
22
|
+
* @param targetFnOrRef - function that returns iframe element or Window object, or a React ref object
|
|
23
|
+
* @param options - client options
|
|
24
|
+
* @param deps - dependency array (optional, for re-creating client when dependencies change)
|
|
25
|
+
* @returns client instance
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* ```tsx
|
|
29
|
+
* // Using function
|
|
30
|
+
* const MyComponent = () => {
|
|
31
|
+
* const iframeRef = useRef<HTMLIFrameElement>(null);
|
|
32
|
+
* const client = useClient(() => iframeRef.current, { secretKey: 'my-app' });
|
|
33
|
+
*
|
|
34
|
+
* const handleClick = async () => {
|
|
35
|
+
* if (client) {
|
|
36
|
+
* const response = await client.send('/api/data', { id: 1 });
|
|
37
|
+
* console.log(response.data);
|
|
38
|
+
* }
|
|
39
|
+
* };
|
|
40
|
+
*
|
|
41
|
+
* return (
|
|
42
|
+
* <div>
|
|
43
|
+
* <iframe ref={iframeRef} src="/iframe.html" />
|
|
44
|
+
* <button onClick={handleClick}>Send Request</button>
|
|
45
|
+
* </div>
|
|
46
|
+
* );
|
|
47
|
+
* };
|
|
48
|
+
*
|
|
49
|
+
* // Using ref directly
|
|
50
|
+
* const MyComponent2 = () => {
|
|
51
|
+
* const iframeRef = useRef<HTMLIFrameElement>(null);
|
|
52
|
+
* const client = useClient(iframeRef, { secretKey: 'my-app' });
|
|
53
|
+
* // ...
|
|
54
|
+
* };
|
|
55
|
+
* ```
|
|
56
|
+
*/
|
|
57
|
+
function useClient(targetFnOrRef, options, deps) {
|
|
58
|
+
var _useState = (0, _react.useState)(null),
|
|
59
|
+
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
60
|
+
client = _useState2[0],
|
|
61
|
+
setClient = _useState2[1];
|
|
62
|
+
(0, _react.useEffect)(() => {
|
|
63
|
+
// Get current target
|
|
64
|
+
var target = typeof targetFnOrRef === 'function' ? targetFnOrRef() : targetFnOrRef.current;
|
|
65
|
+
|
|
66
|
+
// Destroy existing client if it exists
|
|
67
|
+
if (client) {
|
|
68
|
+
client.destroy();
|
|
69
|
+
setClient(null);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// Only create client if target is available
|
|
73
|
+
if (!target) {
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// Create new client instance
|
|
78
|
+
var newClient = (0, _.requestIframeClient)(target, options);
|
|
79
|
+
setClient(newClient);
|
|
80
|
+
|
|
81
|
+
// Cleanup: destroy client on unmount
|
|
82
|
+
return () => {
|
|
83
|
+
if (newClient) {
|
|
84
|
+
newClient.destroy();
|
|
85
|
+
setClient(null);
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
}, deps !== undefined ? deps : []);
|
|
89
|
+
return client;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* React hook for using request-iframe server
|
|
94
|
+
*
|
|
95
|
+
* @param options - server options
|
|
96
|
+
* @param deps - dependency array (optional, for re-creating server when dependencies change)
|
|
97
|
+
* @returns server instance
|
|
98
|
+
*
|
|
99
|
+
* @example
|
|
100
|
+
* ```tsx
|
|
101
|
+
* const MyComponent = () => {
|
|
102
|
+
* const server = useServer({ secretKey: 'my-app' });
|
|
103
|
+
*
|
|
104
|
+
* useEffect(() => {
|
|
105
|
+
* const off = server.on('/api/data', (req, res) => {
|
|
106
|
+
* res.send({ data: 'Hello' });
|
|
107
|
+
* });
|
|
108
|
+
* return off;
|
|
109
|
+
* }, [server]);
|
|
110
|
+
*
|
|
111
|
+
* return <div>Server Component</div>;
|
|
112
|
+
* };
|
|
113
|
+
* ```
|
|
114
|
+
*/
|
|
115
|
+
function useServer(options, deps) {
|
|
116
|
+
var _useState3 = (0, _react.useState)(null),
|
|
117
|
+
_useState4 = (0, _slicedToArray2.default)(_useState3, 2),
|
|
118
|
+
server = _useState4[0],
|
|
119
|
+
setServer = _useState4[1];
|
|
120
|
+
(0, _react.useEffect)(() => {
|
|
121
|
+
// Create server instance
|
|
122
|
+
var newServer = (0, _.requestIframeServer)(options);
|
|
123
|
+
setServer(newServer);
|
|
124
|
+
|
|
125
|
+
// Cleanup: destroy server on unmount
|
|
126
|
+
return () => {
|
|
127
|
+
if (newServer) {
|
|
128
|
+
newServer.destroy();
|
|
129
|
+
setServer(null);
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
}, deps !== undefined ? deps : []); // Only create once on mount by default
|
|
133
|
+
|
|
134
|
+
return server;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* React hook for registering server handlers
|
|
139
|
+
*
|
|
140
|
+
* @param server - server instance (from useServer)
|
|
141
|
+
* @param path - route path
|
|
142
|
+
* @param handler - handler function
|
|
143
|
+
* @param deps - dependency array (optional, for re-registering when dependencies change)
|
|
144
|
+
*
|
|
145
|
+
* @example
|
|
146
|
+
* ```tsx
|
|
147
|
+
* const MyComponent = () => {
|
|
148
|
+
* const server = useServer();
|
|
149
|
+
* const [userId, setUserId] = useState(1);
|
|
150
|
+
*
|
|
151
|
+
* // Register handler that depends on userId
|
|
152
|
+
* useServerHandler(server, '/api/user', (req, res) => {
|
|
153
|
+
* res.send({ userId, data: 'Hello' });
|
|
154
|
+
* }, [userId]);
|
|
155
|
+
*
|
|
156
|
+
* return <div>Server Component</div>;
|
|
157
|
+
* };
|
|
158
|
+
* ```
|
|
159
|
+
*/
|
|
160
|
+
function useServerHandler(server, path, handler, deps) {
|
|
161
|
+
var handlerRef = (0, _react.useRef)(handler);
|
|
162
|
+
handlerRef.current = handler;
|
|
163
|
+
var handlerWrapper = (0, _react.useCallback)((req, res) => {
|
|
164
|
+
var _handlerRef$current;
|
|
165
|
+
return (_handlerRef$current = handlerRef.current) === null || _handlerRef$current === void 0 ? void 0 : _handlerRef$current.call(handlerRef, req, res);
|
|
166
|
+
}, []);
|
|
167
|
+
(0, _react.useEffect)(() => {
|
|
168
|
+
if (!server) {
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
// Register handler with stable wrapper
|
|
173
|
+
var off = server.on(path, handlerWrapper);
|
|
174
|
+
|
|
175
|
+
// Cleanup: unregister handler on unmount or when deps change
|
|
176
|
+
return off;
|
|
177
|
+
}, [server, path, handlerWrapper, ...(deps || [])]);
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* React hook for registering server handlers map
|
|
182
|
+
*
|
|
183
|
+
* @param server - server instance (from useServer)
|
|
184
|
+
* @param map - map of route paths and handler functions
|
|
185
|
+
* @param deps - dependency array (optional, for re-registering when dependencies change)
|
|
186
|
+
*
|
|
187
|
+
* @example
|
|
188
|
+
* ```tsx
|
|
189
|
+
* const MyComponent = () => {
|
|
190
|
+
* const server = useServer();
|
|
191
|
+
* const [userId, setUserId] = useState(1);
|
|
192
|
+
*
|
|
193
|
+
* // Register handlers using map
|
|
194
|
+
* useServerHandlerMap(server, {
|
|
195
|
+
* '/api/user': (req, res) => {
|
|
196
|
+
* res.send({ userId, data: 'Hello' });
|
|
197
|
+
* },
|
|
198
|
+
* '/api/user2': (req, res) => {
|
|
199
|
+
* res.send({ userId, data: 'Hello' });
|
|
200
|
+
* }
|
|
201
|
+
* }, [userId]);
|
|
202
|
+
*
|
|
203
|
+
* return <div>Server Component</div>;
|
|
204
|
+
* };
|
|
205
|
+
* ```
|
|
206
|
+
*/
|
|
207
|
+
function useServerHandlerMap(server, map, deps) {
|
|
208
|
+
var mapRef = (0, _react.useRef)(map);
|
|
209
|
+
mapRef.current = map;
|
|
210
|
+
var keys = (0, _react.useMemo)(() => {
|
|
211
|
+
return Object.keys(map).sort();
|
|
212
|
+
}, [map]);
|
|
213
|
+
var mapWrapper = (0, _react.useMemo)(() => {
|
|
214
|
+
return keys.reduce((acc, key) => {
|
|
215
|
+
acc[key] = function (req, res) {
|
|
216
|
+
var _mapRef$current;
|
|
217
|
+
return (_mapRef$current = mapRef.current) === null || _mapRef$current === void 0 || (_mapRef$current = _mapRef$current[key]) === null || _mapRef$current === void 0 ? void 0 : _mapRef$current.call(this, req, res);
|
|
218
|
+
};
|
|
219
|
+
return acc;
|
|
220
|
+
}, {});
|
|
221
|
+
}, [keys]);
|
|
222
|
+
(0, _react.useEffect)(() => {
|
|
223
|
+
if (!server) {
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
|
+
// Register handlers using map with stable wrappers
|
|
227
|
+
var off = server.map(mapWrapper);
|
|
228
|
+
|
|
229
|
+
// Cleanup: unregister all handlers on unmount or when deps change
|
|
230
|
+
return off;
|
|
231
|
+
}, [server, mapWrapper, ...(deps || [])]);
|
|
232
|
+
}
|