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.
Files changed (68) hide show
  1. package/README.CN.md +2 -0
  2. package/README.md +2 -0
  3. package/library/__tests__/interceptors.test.ts +22 -0
  4. package/library/__tests__/requestIframe.test.ts +190 -0
  5. package/library/api/client.d.js +5 -0
  6. package/library/api/client.d.ts.map +1 -1
  7. package/library/api/server.d.js +5 -0
  8. package/library/api/server.d.ts.map +1 -1
  9. package/library/constants/index.d.js +36 -0
  10. package/library/constants/index.d.ts.map +1 -1
  11. package/library/constants/messages.d.js +5 -0
  12. package/library/constants/messages.d.ts.map +1 -1
  13. package/library/core/client.d.js +5 -0
  14. package/library/core/client.d.ts +16 -0
  15. package/library/core/client.d.ts.map +1 -1
  16. package/library/core/client.js +39 -0
  17. package/library/core/request.d.js +5 -0
  18. package/library/core/request.d.ts.map +1 -1
  19. package/library/core/response.d.js +5 -0
  20. package/library/core/response.d.ts.map +1 -1
  21. package/library/core/server-client.d.js +5 -0
  22. package/library/core/server-client.d.ts.map +1 -1
  23. package/library/core/server.d.js +5 -0
  24. package/library/core/server.d.ts +2 -2
  25. package/library/core/server.d.ts.map +1 -1
  26. package/library/core/server.js +16 -2
  27. package/library/interceptors/index.d.js +5 -0
  28. package/library/interceptors/index.d.ts +4 -0
  29. package/library/interceptors/index.d.ts.map +1 -1
  30. package/library/interceptors/index.js +7 -0
  31. package/library/message/channel.d.js +5 -0
  32. package/library/message/channel.d.ts.map +1 -1
  33. package/library/message/dispatcher.d.js +5 -0
  34. package/library/message/dispatcher.d.ts.map +1 -1
  35. package/library/message/index.d.js +25 -0
  36. package/library/message/index.d.ts.map +1 -1
  37. package/library/stream/file-stream.d.js +4 -0
  38. package/library/stream/file-stream.d.ts.map +1 -1
  39. package/library/stream/index.d.js +58 -0
  40. package/library/stream/index.d.ts.map +1 -1
  41. package/library/stream/readable-stream.d.js +5 -0
  42. package/library/stream/readable-stream.d.ts.map +1 -1
  43. package/library/stream/types.d.js +5 -0
  44. package/library/stream/types.d.ts.map +1 -1
  45. package/library/stream/writable-stream.d.js +5 -0
  46. package/library/stream/writable-stream.d.ts.map +1 -1
  47. package/library/types/index.d.js +5 -0
  48. package/library/types/index.d.ts +12 -4
  49. package/library/types/index.d.ts.map +1 -1
  50. package/library/utils/cache.d.js +5 -0
  51. package/library/utils/cache.d.ts.map +1 -1
  52. package/library/utils/cookie.d.js +5 -0
  53. package/library/utils/cookie.d.ts.map +1 -1
  54. package/library/utils/debug.d.js +5 -0
  55. package/library/utils/debug.d.ts.map +1 -1
  56. package/library/utils/index.d.js +94 -0
  57. package/library/utils/index.d.ts.map +1 -1
  58. package/library/utils/path-match.d.js +5 -0
  59. package/library/utils/path-match.d.ts.map +1 -1
  60. package/library/utils/protocol.d.js +5 -0
  61. package/library/utils/protocol.d.ts.map +1 -1
  62. package/package.json +14 -2
  63. package/react/library/__tests__/index.test.d.ts +2 -0
  64. package/react/library/__tests__/index.test.d.ts.map +1 -0
  65. package/react/library/__tests__/index.test.tsx +799 -0
  66. package/react/library/index.d.ts +117 -0
  67. package/react/library/index.d.ts.map +1 -0
  68. 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
+ }