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