@empjs/bridge-react 0.0.3 → 4.0.0-alpha.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/dist/classComponent.d.ts +16 -0
- package/dist/index.cjs +60 -26
- package/dist/index.d.ts +4 -24
- package/dist/index.js +47 -17
- package/dist/types.d.ts +19 -0
- package/dist/utils.d.ts +8 -0
- package/package.json +2 -2
|
@@ -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,
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
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 (
|
|
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: ()=>
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
121
|
+
handleError(error, 'Failed to render component');
|
|
107
122
|
}
|
|
108
123
|
}
|
|
109
124
|
unmountComponent() {
|
|
110
|
-
|
|
111
|
-
this.provider
|
|
112
|
-
|
|
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
|
-
|
|
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
|
-
|
|
127
|
-
|
|
128
|
-
|
|
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
|
|
158
|
+
return ReactRemoteAppComponent;
|
|
137
159
|
}
|
|
138
|
-
const
|
|
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
|
|
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(
|
|
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
|
-
|
|
2
|
-
|
|
3
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
92
|
+
handleError(error, 'Failed to render component');
|
|
77
93
|
}
|
|
78
94
|
}
|
|
79
95
|
unmountComponent() {
|
|
80
|
-
|
|
81
|
-
this.provider
|
|
82
|
-
|
|
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
|
-
|
|
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
|
-
|
|
97
|
-
|
|
98
|
-
|
|
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
|
|
129
|
+
return ReactRemoteAppComponent;
|
|
107
130
|
}
|
|
108
131
|
const src = {
|
|
109
|
-
createBridgeComponent,
|
|
110
|
-
createRemoteAppComponent
|
|
132
|
+
createBridgeComponent: createBridgeComponent,
|
|
133
|
+
createRemoteAppComponent: createRemoteAppComponent
|
|
111
134
|
};
|
|
112
|
-
|
|
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 };
|
package/dist/types.d.ts
ADDED
|
@@ -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
|
+
}
|
package/dist/utils.d.ts
ADDED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@empjs/bridge-react",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "4.0.0-alpha.2",
|
|
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": "
|
|
39
|
+
"node": "^20.19.0 || >=22.12.0"
|
|
40
40
|
},
|
|
41
41
|
"author": "Ken",
|
|
42
42
|
"dependencies": {},
|