@empjs/bridge-react 0.0.3 → 4.0.0-alpha.1

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.
@@ -0,0 +1,16 @@
1
+ import { BridgeProvider, ComponentProvider, ReactOptions } from './types';
2
+ /**
3
+ * Create bridge component - for producer to wrap application-level export modules
4
+ */
5
+ export declare function createBridgeComponent(Component: any, options: ReactOptions): BridgeProvider;
6
+ /**
7
+ * Create remote app component - for consumer to load application-level modules
8
+ */
9
+ export declare function createRemoteAppComponent(component: ComponentProvider, reactOptions: ReactOptions, options?: {
10
+ onError?: (error: Error) => void;
11
+ }): any;
12
+ declare const _default: {
13
+ createBridgeComponent: typeof createBridgeComponent;
14
+ createRemoteAppComponent: typeof createRemoteAppComponent;
15
+ };
16
+ export default _default;
package/dist/index.cjs CHANGED
@@ -1,11 +1,15 @@
1
1
  "use strict";
2
2
  var __webpack_require__ = {};
3
3
  (()=>{
4
- __webpack_require__.d = (exports1, definition)=>{
5
- for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
6
- enumerable: true,
7
- get: definition[key]
8
- });
4
+ __webpack_require__.d = (exports1, getters, values)=>{
5
+ var define = (defs, kind)=>{
6
+ for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
7
+ enumerable: true,
8
+ [kind]: defs[key]
9
+ });
10
+ };
11
+ define(getters, "get");
12
+ define(values, "value");
9
13
  };
10
14
  })();
11
15
  (()=>{
@@ -13,7 +17,7 @@ var __webpack_require__ = {};
13
17
  })();
14
18
  (()=>{
15
19
  __webpack_require__.r = (exports1)=>{
16
- if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
20
+ if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
17
21
  value: 'Module'
18
22
  });
19
23
  Object.defineProperty(exports1, '__esModule', {
@@ -24,10 +28,22 @@ var __webpack_require__ = {};
24
28
  var __webpack_exports__ = {};
25
29
  __webpack_require__.r(__webpack_exports__);
26
30
  __webpack_require__.d(__webpack_exports__, {
31
+ AsyncBridgeProvider: ()=>types_namespaceObject.AsyncBridgeProvider,
32
+ BridgeProvider: ()=>types_namespaceObject.BridgeProvider,
33
+ BridgeProviderReturn: ()=>types_namespaceObject.BridgeProviderReturn,
34
+ ComponentProvider: ()=>types_namespaceObject.ComponentProvider,
35
+ ReactComponentOptions: ()=>types_namespaceObject.ReactOptions,
36
+ RemoteComponentOptions: ()=>types_namespaceObject.RemoteComponentOptions,
27
37
  createBridgeComponent: ()=>createBridgeComponent,
28
38
  createRemoteAppComponent: ()=>createRemoteAppComponent,
29
- default: ()=>__WEBPACK_DEFAULT_EXPORT__
39
+ default: ()=>src
30
40
  });
41
+ var types_namespaceObject = {};
42
+ __webpack_require__.r(types_namespaceObject);
43
+ function handleError(error, message, onError) {
44
+ console.error(`[EMP-ERROR] ${message}`, error);
45
+ if (onError) onError(error);
46
+ }
31
47
  function createBridgeComponent(Component, options) {
32
48
  const { React, ReactDOM, createRoot } = options;
33
49
  const hasCreateRoot = 'function' == typeof createRoot;
@@ -49,7 +65,7 @@ function createBridgeComponent(Component, options) {
49
65
  rootMap.set(dom, dom);
50
66
  }
51
67
  } catch (error) {
52
- console.error('[EMP-ERROR] Failed to render/update component', error);
68
+ handleError(error, 'Failed to render/update component');
53
69
  throw error;
54
70
  }
55
71
  };
@@ -61,7 +77,7 @@ function createBridgeComponent(Component, options) {
61
77
  else if (ReactDOM.unmountComponentAtNode) ReactDOM.unmountComponentAtNode(dom);
62
78
  rootMap.delete(dom);
63
79
  } catch (error) {
64
- console.error('[EMP-ERROR] Failed to unmount component', error);
80
+ handleError(error, 'Failed to unmount component');
65
81
  }
66
82
  };
67
83
  return {
@@ -73,7 +89,7 @@ function createBridgeComponent(Component, options) {
73
89
  function createRemoteAppComponent(component, reactOptions, options = {}) {
74
90
  if (!component) throw new Error('createRemoteAppComponent: component parameter cannot be empty');
75
91
  const { React } = reactOptions;
76
- class RemoteAppComponent extends React.Component {
92
+ class ReactRemoteAppComponent extends React.Component {
77
93
  containerRef = React.createRef();
78
94
  provider = null;
79
95
  providerInfo = null;
@@ -93,8 +109,7 @@ function createRemoteAppComponent(component, reactOptions, options = {}) {
93
109
  }
94
110
  if (this.isMounted && this.containerRef.current) this.renderComponent();
95
111
  } catch (error) {
96
- if (options.onError) options.onError(error);
97
- console.error('[EMP-ERROR] Failed to load component', error);
112
+ handleError(error, 'Failed to load component', options.onError);
98
113
  }
99
114
  }
100
115
  renderComponent() {
@@ -103,15 +118,21 @@ function createRemoteAppComponent(component, reactOptions, options = {}) {
103
118
  if (!this.provider) this.provider = this.providerInfo();
104
119
  this.provider.render(this.containerRef.current, this.props);
105
120
  } catch (error) {
106
- console.error('[EMP-ERROR] Failed to render component', error);
121
+ handleError(error, 'Failed to render component');
107
122
  }
108
123
  }
109
124
  unmountComponent() {
110
- if (this.provider && this.containerRef.current) try {
111
- this.provider.destroy(this.containerRef.current);
112
- this.provider = null;
125
+ try {
126
+ if (this.provider) {
127
+ if (this.containerRef && this.containerRef.current) try {
128
+ this.provider.destroy(this.containerRef.current);
129
+ } catch (destroyError) {
130
+ console.warn('[bridge-react] Error during provider unmount:', destroyError);
131
+ }
132
+ this.provider = null;
133
+ }
113
134
  } catch (error) {
114
- console.error('[EMP-ERROR] Failed to unmount component', error);
135
+ handleError(error, 'Failed to unmount component');
115
136
  }
116
137
  }
117
138
  componentDidMount() {
@@ -123,9 +144,10 @@ function createRemoteAppComponent(component, reactOptions, options = {}) {
123
144
  }
124
145
  componentWillUnmount() {
125
146
  this.isMounted = false;
126
- const cleanup = ()=>this.unmountComponent();
127
- if ('undefined' != typeof window && window.requestAnimationFrame) window.requestAnimationFrame(cleanup);
128
- else setTimeout(cleanup, 0);
147
+ if (reactOptions?.syncUnmount) this.unmountComponent();
148
+ else Promise.resolve().then(()=>{
149
+ if (this.containerRef && this.containerRef.current) this.unmountComponent();
150
+ });
129
151
  }
130
152
  render() {
131
153
  return React.createElement('div', {
@@ -133,20 +155,32 @@ function createRemoteAppComponent(component, reactOptions, options = {}) {
133
155
  });
134
156
  }
135
157
  }
136
- return RemoteAppComponent;
158
+ return ReactRemoteAppComponent;
137
159
  }
138
- const __WEBPACK_DEFAULT_EXPORT__ = {
139
- createBridgeComponent,
140
- createRemoteAppComponent
160
+ const src = {
161
+ createBridgeComponent: createBridgeComponent,
162
+ createRemoteAppComponent: createRemoteAppComponent
141
163
  };
164
+ exports.AsyncBridgeProvider = __webpack_exports__.AsyncBridgeProvider;
165
+ exports.BridgeProvider = __webpack_exports__.BridgeProvider;
166
+ exports.BridgeProviderReturn = __webpack_exports__.BridgeProviderReturn;
167
+ exports.ComponentProvider = __webpack_exports__.ComponentProvider;
168
+ exports.ReactComponentOptions = __webpack_exports__.ReactComponentOptions;
169
+ exports.RemoteComponentOptions = __webpack_exports__.RemoteComponentOptions;
142
170
  exports.createBridgeComponent = __webpack_exports__.createBridgeComponent;
143
171
  exports.createRemoteAppComponent = __webpack_exports__.createRemoteAppComponent;
144
172
  exports["default"] = __webpack_exports__["default"];
145
- for(var __webpack_i__ in __webpack_exports__)if (-1 === [
173
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
174
+ "AsyncBridgeProvider",
175
+ "BridgeProvider",
176
+ "BridgeProviderReturn",
177
+ "ComponentProvider",
178
+ "ReactComponentOptions",
179
+ "RemoteComponentOptions",
146
180
  "createBridgeComponent",
147
181
  "createRemoteAppComponent",
148
182
  "default"
149
- ].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
183
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
150
184
  Object.defineProperty(exports, '__esModule', {
151
185
  value: true
152
186
  });
package/dist/index.d.ts CHANGED
@@ -1,27 +1,7 @@
1
- export interface BridgeProviderReturn {
2
- render: (dom: HTMLElement, props?: Record<string, any>) => void;
3
- destroy: (dom: HTMLElement) => void;
4
- }
5
- export type BridgeProvider = () => BridgeProviderReturn;
6
- export type AsyncBridgeProvider = () => Promise<{
7
- default: BridgeProvider;
8
- }>;
9
- export type ComponentProvider = BridgeProvider | AsyncBridgeProvider;
10
- interface ReactOptions {
11
- React?: any;
12
- ReactDOM?: any;
13
- createRoot?: any;
14
- }
15
- /**
16
- * Create bridge component - for producer to wrap application-level export modules
17
- */
18
- export declare function createBridgeComponent(Component: any, options: ReactOptions): BridgeProvider;
19
- /**
20
- * Create remote app component - for consumer to load application-level modules
21
- */
22
- export declare function createRemoteAppComponent(component: ComponentProvider, reactOptions: ReactOptions, options?: {
23
- onError?: (error: Error) => void;
24
- }): any;
1
+ import { createBridgeComponent, createRemoteAppComponent } from './classComponent';
2
+ import { AsyncBridgeProvider, BridgeProvider, BridgeProviderReturn, ComponentProvider, ReactOptions as ReactComponentOptions, RemoteComponentOptions } from './types';
3
+ export { BridgeProviderReturn, BridgeProvider, AsyncBridgeProvider, ComponentProvider, ReactComponentOptions, RemoteComponentOptions, };
4
+ export { createBridgeComponent, createRemoteAppComponent };
25
5
  declare const _default: {
26
6
  createBridgeComponent: typeof createBridgeComponent;
27
7
  createRemoteAppComponent: typeof createRemoteAppComponent;
package/dist/index.js CHANGED
@@ -1,3 +1,20 @@
1
+ var __webpack_require__ = {};
2
+ (()=>{
3
+ __webpack_require__.r = (exports)=>{
4
+ if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports, Symbol.toStringTag, {
5
+ value: 'Module'
6
+ });
7
+ Object.defineProperty(exports, '__esModule', {
8
+ value: true
9
+ });
10
+ };
11
+ })();
12
+ var types_namespaceObject = {};
13
+ __webpack_require__.r(types_namespaceObject);
14
+ function handleError(error, message, onError) {
15
+ console.error(`[EMP-ERROR] ${message}`, error);
16
+ if (onError) onError(error);
17
+ }
1
18
  function createBridgeComponent(Component, options) {
2
19
  const { React, ReactDOM, createRoot } = options;
3
20
  const hasCreateRoot = 'function' == typeof createRoot;
@@ -19,7 +36,7 @@ function createBridgeComponent(Component, options) {
19
36
  rootMap.set(dom, dom);
20
37
  }
21
38
  } catch (error) {
22
- console.error('[EMP-ERROR] Failed to render/update component', error);
39
+ handleError(error, 'Failed to render/update component');
23
40
  throw error;
24
41
  }
25
42
  };
@@ -31,7 +48,7 @@ function createBridgeComponent(Component, options) {
31
48
  else if (ReactDOM.unmountComponentAtNode) ReactDOM.unmountComponentAtNode(dom);
32
49
  rootMap.delete(dom);
33
50
  } catch (error) {
34
- console.error('[EMP-ERROR] Failed to unmount component', error);
51
+ handleError(error, 'Failed to unmount component');
35
52
  }
36
53
  };
37
54
  return {
@@ -43,7 +60,7 @@ function createBridgeComponent(Component, options) {
43
60
  function createRemoteAppComponent(component, reactOptions, options = {}) {
44
61
  if (!component) throw new Error('createRemoteAppComponent: component parameter cannot be empty');
45
62
  const { React } = reactOptions;
46
- class RemoteAppComponent extends React.Component {
63
+ class ReactRemoteAppComponent extends React.Component {
47
64
  containerRef = React.createRef();
48
65
  provider = null;
49
66
  providerInfo = null;
@@ -63,8 +80,7 @@ function createRemoteAppComponent(component, reactOptions, options = {}) {
63
80
  }
64
81
  if (this.isMounted && this.containerRef.current) this.renderComponent();
65
82
  } catch (error) {
66
- if (options.onError) options.onError(error);
67
- console.error('[EMP-ERROR] Failed to load component', error);
83
+ handleError(error, 'Failed to load component', options.onError);
68
84
  }
69
85
  }
70
86
  renderComponent() {
@@ -73,15 +89,21 @@ function createRemoteAppComponent(component, reactOptions, options = {}) {
73
89
  if (!this.provider) this.provider = this.providerInfo();
74
90
  this.provider.render(this.containerRef.current, this.props);
75
91
  } catch (error) {
76
- console.error('[EMP-ERROR] Failed to render component', error);
92
+ handleError(error, 'Failed to render component');
77
93
  }
78
94
  }
79
95
  unmountComponent() {
80
- if (this.provider && this.containerRef.current) try {
81
- this.provider.destroy(this.containerRef.current);
82
- this.provider = null;
96
+ try {
97
+ if (this.provider) {
98
+ if (this.containerRef && this.containerRef.current) try {
99
+ this.provider.destroy(this.containerRef.current);
100
+ } catch (destroyError) {
101
+ console.warn('[bridge-react] Error during provider unmount:', destroyError);
102
+ }
103
+ this.provider = null;
104
+ }
83
105
  } catch (error) {
84
- console.error('[EMP-ERROR] Failed to unmount component', error);
106
+ handleError(error, 'Failed to unmount component');
85
107
  }
86
108
  }
87
109
  componentDidMount() {
@@ -93,9 +115,10 @@ function createRemoteAppComponent(component, reactOptions, options = {}) {
93
115
  }
94
116
  componentWillUnmount() {
95
117
  this.isMounted = false;
96
- const cleanup = ()=>this.unmountComponent();
97
- if ('undefined' != typeof window && window.requestAnimationFrame) window.requestAnimationFrame(cleanup);
98
- else setTimeout(cleanup, 0);
118
+ if (reactOptions?.syncUnmount) this.unmountComponent();
119
+ else Promise.resolve().then(()=>{
120
+ if (this.containerRef && this.containerRef.current) this.unmountComponent();
121
+ });
99
122
  }
100
123
  render() {
101
124
  return React.createElement('div', {
@@ -103,10 +126,17 @@ function createRemoteAppComponent(component, reactOptions, options = {}) {
103
126
  });
104
127
  }
105
128
  }
106
- return RemoteAppComponent;
129
+ return ReactRemoteAppComponent;
107
130
  }
108
131
  const src = {
109
- createBridgeComponent,
110
- createRemoteAppComponent
132
+ createBridgeComponent: createBridgeComponent,
133
+ createRemoteAppComponent: createRemoteAppComponent
111
134
  };
112
- export { createBridgeComponent, createRemoteAppComponent, src as default };
135
+ var AsyncBridgeProvider = types_namespaceObject.AsyncBridgeProvider;
136
+ var BridgeProvider = types_namespaceObject.BridgeProvider;
137
+ var BridgeProviderReturn = types_namespaceObject.BridgeProviderReturn;
138
+ var ComponentProvider = types_namespaceObject.ComponentProvider;
139
+ var ReactComponentOptions = types_namespaceObject.ReactOptions;
140
+ var RemoteComponentOptions = types_namespaceObject.RemoteComponentOptions;
141
+ export default src;
142
+ export { AsyncBridgeProvider, BridgeProvider, BridgeProviderReturn, ComponentProvider, ReactComponentOptions, RemoteComponentOptions, createBridgeComponent, createRemoteAppComponent };
@@ -0,0 +1,19 @@
1
+ export interface BridgeProviderReturn {
2
+ render: (dom: HTMLElement, props?: Record<string, any>) => void;
3
+ destroy: (dom: HTMLElement) => void;
4
+ }
5
+ export type BridgeProvider = () => BridgeProviderReturn;
6
+ export type AsyncBridgeProvider = () => Promise<{
7
+ default: BridgeProvider;
8
+ }>;
9
+ export type ComponentProvider = BridgeProvider | AsyncBridgeProvider;
10
+ export interface ReactOptions {
11
+ React: any;
12
+ ReactDOM?: any;
13
+ createRoot?: any;
14
+ syncUnmount?: boolean;
15
+ errorBoundary?: boolean;
16
+ }
17
+ export interface RemoteComponentOptions {
18
+ onError?: (error: Error) => void;
19
+ }
@@ -0,0 +1,8 @@
1
+ /**
2
+ * 获取 React 版本号
3
+ */
4
+ export declare function getReactVersion(React: any): number;
5
+ /**
6
+ * 统一错误处理
7
+ */
8
+ export declare function handleError(error: Error, message: string, onError?: (error: Error) => void): void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@empjs/bridge-react",
3
- "version": "0.0.3",
3
+ "version": "4.0.0-alpha.1",
4
4
  "description": "Emp Bridge React",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -36,7 +36,7 @@
36
36
  }
37
37
  },
38
38
  "engines": {
39
- "node": ">=16.0.0"
39
+ "node": "^20.19.0 || >=22.12.0"
40
40
  },
41
41
  "author": "Ken",
42
42
  "dependencies": {},