@xfe-repo/web-micro 1.6.0 → 1.7.0
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/index.d.mts +6 -1
- package/dist/index.d.ts +6 -1
- package/dist/index.js +75 -4
- package/dist/index.mjs +68 -5
- package/package.json +3 -3
package/dist/index.d.mts
CHANGED
|
@@ -14,6 +14,7 @@ type MicroAppProps = {
|
|
|
14
14
|
loadingFallback?: React.ReactNode;
|
|
15
15
|
errorFallback?: React.ReactNode;
|
|
16
16
|
aHrefResolver?: (hrefValue: string) => string;
|
|
17
|
+
onChunkLoadError?: (error: unknown, appName: string) => void;
|
|
17
18
|
};
|
|
18
19
|
declare const MicroAppRoute: React.MemoExoticComponent<(props: MicroAppProps) => react_jsx_runtime.JSX.Element>;
|
|
19
20
|
|
|
@@ -28,6 +29,10 @@ type NavigateToWithMicroAppOptions = {
|
|
|
28
29
|
};
|
|
29
30
|
declare const navigateToWithMicroApp: (to: string, options?: NavigateToWithMicroAppOptions) => void;
|
|
30
31
|
|
|
32
|
+
declare function isChunkLoadError(error: unknown): boolean;
|
|
33
|
+
type ChunkLoadErrorHandler = (error: unknown) => void;
|
|
34
|
+
declare function subscribeChunkLoadError(handler: ChunkLoadErrorHandler): () => void;
|
|
35
|
+
|
|
31
36
|
declare enum MicroAppEventEnum {
|
|
32
37
|
DISPATCH_ACTION = "dispatchAction"
|
|
33
38
|
}
|
|
@@ -66,4 +71,4 @@ declare const aHrefResolverCollector: Record<string, AHrefResolverType>;
|
|
|
66
71
|
|
|
67
72
|
declare const microApp: _micro_zoe_micro_app.MicroApp;
|
|
68
73
|
|
|
69
|
-
export { type MicroAppActionMetaType, type MicroAppActionType, type MicroAppDispatchListener, MicroAppEventCenter, type MicroAppEventCenterConfig, MicroAppEventEnum, type MicroAppGlobalDataType, MicroAppLink, type MicroAppProps, MicroAppRoute, type NavigateToWithMicroAppOptions, aHrefResolverCollector, microApp, navigateToWithMicroApp };
|
|
74
|
+
export { type ChunkLoadErrorHandler, type MicroAppActionMetaType, type MicroAppActionType, type MicroAppDispatchListener, MicroAppEventCenter, type MicroAppEventCenterConfig, MicroAppEventEnum, type MicroAppGlobalDataType, MicroAppLink, type MicroAppProps, MicroAppRoute, type NavigateToWithMicroAppOptions, aHrefResolverCollector, isChunkLoadError, microApp, navigateToWithMicroApp, subscribeChunkLoadError };
|
package/dist/index.d.ts
CHANGED
|
@@ -14,6 +14,7 @@ type MicroAppProps = {
|
|
|
14
14
|
loadingFallback?: React.ReactNode;
|
|
15
15
|
errorFallback?: React.ReactNode;
|
|
16
16
|
aHrefResolver?: (hrefValue: string) => string;
|
|
17
|
+
onChunkLoadError?: (error: unknown, appName: string) => void;
|
|
17
18
|
};
|
|
18
19
|
declare const MicroAppRoute: React.MemoExoticComponent<(props: MicroAppProps) => react_jsx_runtime.JSX.Element>;
|
|
19
20
|
|
|
@@ -28,6 +29,10 @@ type NavigateToWithMicroAppOptions = {
|
|
|
28
29
|
};
|
|
29
30
|
declare const navigateToWithMicroApp: (to: string, options?: NavigateToWithMicroAppOptions) => void;
|
|
30
31
|
|
|
32
|
+
declare function isChunkLoadError(error: unknown): boolean;
|
|
33
|
+
type ChunkLoadErrorHandler = (error: unknown) => void;
|
|
34
|
+
declare function subscribeChunkLoadError(handler: ChunkLoadErrorHandler): () => void;
|
|
35
|
+
|
|
31
36
|
declare enum MicroAppEventEnum {
|
|
32
37
|
DISPATCH_ACTION = "dispatchAction"
|
|
33
38
|
}
|
|
@@ -66,4 +71,4 @@ declare const aHrefResolverCollector: Record<string, AHrefResolverType>;
|
|
|
66
71
|
|
|
67
72
|
declare const microApp: _micro_zoe_micro_app.MicroApp;
|
|
68
73
|
|
|
69
|
-
export { type MicroAppActionMetaType, type MicroAppActionType, type MicroAppDispatchListener, MicroAppEventCenter, type MicroAppEventCenterConfig, MicroAppEventEnum, type MicroAppGlobalDataType, MicroAppLink, type MicroAppProps, MicroAppRoute, type NavigateToWithMicroAppOptions, aHrefResolverCollector, microApp, navigateToWithMicroApp };
|
|
74
|
+
export { type ChunkLoadErrorHandler, type MicroAppActionMetaType, type MicroAppActionType, type MicroAppDispatchListener, MicroAppEventCenter, type MicroAppEventCenterConfig, MicroAppEventEnum, type MicroAppGlobalDataType, MicroAppLink, type MicroAppProps, MicroAppRoute, type NavigateToWithMicroAppOptions, aHrefResolverCollector, isChunkLoadError, microApp, navigateToWithMicroApp, subscribeChunkLoadError };
|
package/dist/index.js
CHANGED
|
@@ -68,6 +68,14 @@ function _define_property(obj, key, value) {
|
|
|
68
68
|
}
|
|
69
69
|
return obj;
|
|
70
70
|
}
|
|
71
|
+
function _instanceof(left, right) {
|
|
72
|
+
"@swc/helpers - instanceof";
|
|
73
|
+
if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {
|
|
74
|
+
return !!right[Symbol.hasInstance](left);
|
|
75
|
+
} else {
|
|
76
|
+
return left instanceof right;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
71
79
|
function _iterable_to_array_limit(arr, i) {
|
|
72
80
|
var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
|
|
73
81
|
if (_i == null) return;
|
|
@@ -303,11 +311,17 @@ __export(index_exports, {
|
|
|
303
311
|
aHrefResolverCollector: function aHrefResolverCollector1() {
|
|
304
312
|
return aHrefResolverCollector;
|
|
305
313
|
},
|
|
314
|
+
isChunkLoadError: function isChunkLoadError1() {
|
|
315
|
+
return isChunkLoadError;
|
|
316
|
+
},
|
|
306
317
|
microApp: function microApp1() {
|
|
307
318
|
return microApp;
|
|
308
319
|
},
|
|
309
320
|
navigateToWithMicroApp: function navigateToWithMicroApp1() {
|
|
310
321
|
return navigateToWithMicroApp;
|
|
322
|
+
},
|
|
323
|
+
subscribeChunkLoadError: function subscribeChunkLoadError1() {
|
|
324
|
+
return subscribeChunkLoadError;
|
|
311
325
|
}
|
|
312
326
|
});
|
|
313
327
|
module.exports = __toCommonJS(index_exports);
|
|
@@ -318,12 +332,63 @@ __reExport(index_exports, require("@micro-zoe/micro-app"), module.exports);
|
|
|
318
332
|
// src/MicroAppRoute.tsx
|
|
319
333
|
var import_react = require("react");
|
|
320
334
|
var import_web_router = require("@xfe-repo/web-router");
|
|
335
|
+
// src/chunkLoadError.ts
|
|
336
|
+
var CHUNK_ERROR_PATTERNS = [
|
|
337
|
+
/Loading chunk \S+ failed/i,
|
|
338
|
+
/Loading CSS chunk \S+ failed/i,
|
|
339
|
+
/ChunkLoadError/i
|
|
340
|
+
];
|
|
341
|
+
function isChunkLoadError(error) {
|
|
342
|
+
if (!error) return false;
|
|
343
|
+
if (typeof error === "string") return CHUNK_ERROR_PATTERNS.some(function(p) {
|
|
344
|
+
return p.test(error);
|
|
345
|
+
});
|
|
346
|
+
if (_instanceof(error, Error)) {
|
|
347
|
+
if (error.name === "ChunkLoadError") return true;
|
|
348
|
+
return CHUNK_ERROR_PATTERNS.some(function(p) {
|
|
349
|
+
return p.test(error.message);
|
|
350
|
+
});
|
|
351
|
+
}
|
|
352
|
+
var anyError = error;
|
|
353
|
+
if (anyError.message) return isChunkLoadError(anyError.message);
|
|
354
|
+
if (anyError.detail) return isChunkLoadError(anyError.detail);
|
|
355
|
+
if (anyError.reason) return isChunkLoadError(anyError.reason);
|
|
356
|
+
return false;
|
|
357
|
+
}
|
|
358
|
+
function subscribeChunkLoadError(handler) {
|
|
359
|
+
var onError = function onError(event) {
|
|
360
|
+
var target = event.error || event.message;
|
|
361
|
+
if (isChunkLoadError(target)) handler(target);
|
|
362
|
+
};
|
|
363
|
+
var onRejection = function onRejection(event) {
|
|
364
|
+
if (isChunkLoadError(event.reason)) handler(event.reason);
|
|
365
|
+
};
|
|
366
|
+
window.addEventListener("error", onError, true);
|
|
367
|
+
window.addEventListener("unhandledrejection", onRejection);
|
|
368
|
+
return function() {
|
|
369
|
+
window.removeEventListener("error", onError, true);
|
|
370
|
+
window.removeEventListener("unhandledrejection", onRejection);
|
|
371
|
+
};
|
|
372
|
+
}
|
|
373
|
+
// src/MicroAppRoute.tsx
|
|
321
374
|
var import_jsx_custom_event = __toESM(require("@micro-zoe/micro-app/polyfill/jsx-custom-event.js"));
|
|
322
375
|
var MicroAppRoute = (0, import_react.memo)(function(props) {
|
|
323
|
-
var name = props.name, baseRoute = props.baseRoute, url = props.url, keepAlive = props.keepAlive, className = props.className, data = props.data, loadingFallback = props.loadingFallback, errorFallback = props.errorFallback, aHrefResolver = props.aHrefResolver;
|
|
376
|
+
var name = props.name, baseRoute = props.baseRoute, url = props.url, keepAlive = props.keepAlive, className = props.className, data = props.data, loadingFallback = props.loadingFallback, errorFallback = props.errorFallback, aHrefResolver = props.aHrefResolver, onChunkLoadError = props.onChunkLoadError;
|
|
324
377
|
if (aHrefResolver) aHrefResolverCollector[name] = aHrefResolver;
|
|
325
378
|
var _ref = _sliced_to_array((0, import_react.useState)(false), 2), microAppIsShow = _ref[0], setMicroAppIsShow = _ref[1];
|
|
326
379
|
var _ref1 = _sliced_to_array((0, import_react.useState)(false), 2), microAppIsError = _ref1[0], setMicroAppIsError = _ref1[1];
|
|
380
|
+
var onChunkLoadErrorRef = (0, import_react.useRef)(onChunkLoadError);
|
|
381
|
+
onChunkLoadErrorRef.current = onChunkLoadError;
|
|
382
|
+
(0, import_react.useEffect)(function() {
|
|
383
|
+
if (!onChunkLoadError) return;
|
|
384
|
+
return subscribeChunkLoadError(function(error) {
|
|
385
|
+
var _onChunkLoadErrorRef_current;
|
|
386
|
+
(_onChunkLoadErrorRef_current = onChunkLoadErrorRef.current) === null || _onChunkLoadErrorRef_current === void 0 ? void 0 : _onChunkLoadErrorRef_current.call(onChunkLoadErrorRef, error, name);
|
|
387
|
+
});
|
|
388
|
+
}, [
|
|
389
|
+
name,
|
|
390
|
+
onChunkLoadError
|
|
391
|
+
]);
|
|
327
392
|
var handleMicroAppMounted = (0, import_react.useCallback)(function() {
|
|
328
393
|
var navigator = (0, import_web_router.getClientNavigator)();
|
|
329
394
|
navigator.replace(location.pathname + location.search, history.state);
|
|
@@ -340,9 +405,13 @@ var MicroAppRoute = (0, import_react.memo)(function(props) {
|
|
|
340
405
|
});
|
|
341
406
|
setMicroAppIsShow(true);
|
|
342
407
|
}, []);
|
|
343
|
-
var handleMicroAppError = (0, import_react.useCallback)(function() {
|
|
408
|
+
var handleMicroAppError = (0, import_react.useCallback)(function(event) {
|
|
409
|
+
var _onChunkLoadErrorRef_current;
|
|
344
410
|
setMicroAppIsError(true);
|
|
345
|
-
|
|
411
|
+
if (isChunkLoadError(event)) (_onChunkLoadErrorRef_current = onChunkLoadErrorRef.current) === null || _onChunkLoadErrorRef_current === void 0 ? void 0 : _onChunkLoadErrorRef_current.call(onChunkLoadErrorRef, event, name);
|
|
412
|
+
}, [
|
|
413
|
+
name
|
|
414
|
+
]);
|
|
346
415
|
return /* @__PURE__ */ (0, import_jsx_custom_event.default)("div", {
|
|
347
416
|
className: className
|
|
348
417
|
}, microAppIsError && errorFallback, !microAppIsShow && !microAppIsError && loadingFallback, /* @__PURE__ */ (0, import_jsx_custom_event.default)("micro-app", {
|
|
@@ -590,6 +659,8 @@ var microApp = import_micro_app.default;
|
|
|
590
659
|
MicroAppLink: MicroAppLink,
|
|
591
660
|
MicroAppRoute: MicroAppRoute,
|
|
592
661
|
aHrefResolverCollector: aHrefResolverCollector,
|
|
662
|
+
isChunkLoadError: isChunkLoadError,
|
|
593
663
|
microApp: microApp,
|
|
594
|
-
navigateToWithMicroApp: navigateToWithMicroApp
|
|
664
|
+
navigateToWithMicroApp: navigateToWithMicroApp,
|
|
665
|
+
subscribeChunkLoadError: subscribeChunkLoadError
|
|
595
666
|
}, require("@micro-zoe/micro-app")));
|
package/dist/index.mjs
CHANGED
|
@@ -67,6 +67,14 @@ function _define_property(obj, key, value) {
|
|
|
67
67
|
}
|
|
68
68
|
return obj;
|
|
69
69
|
}
|
|
70
|
+
function _instanceof(left, right) {
|
|
71
|
+
"@swc/helpers - instanceof";
|
|
72
|
+
if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {
|
|
73
|
+
return !!right[Symbol.hasInstance](left);
|
|
74
|
+
} else {
|
|
75
|
+
return left instanceof right;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
70
78
|
function _iterable_to_array_limit(arr, i) {
|
|
71
79
|
var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
|
|
72
80
|
if (_i == null) return;
|
|
@@ -225,14 +233,65 @@ import { uuid } from "@xfe-repo/web-utils/tools";
|
|
|
225
233
|
import originMicroApp, { EventCenterForMicroApp } from "@micro-zoe/micro-app";
|
|
226
234
|
export * from "@micro-zoe/micro-app";
|
|
227
235
|
// src/MicroAppRoute.tsx
|
|
228
|
-
import { memo, useCallback, useState } from "react";
|
|
236
|
+
import { memo, useCallback, useEffect, useRef, useState } from "react";
|
|
229
237
|
import { getClientNavigator } from "@xfe-repo/web-router";
|
|
238
|
+
// src/chunkLoadError.ts
|
|
239
|
+
var CHUNK_ERROR_PATTERNS = [
|
|
240
|
+
/Loading chunk \S+ failed/i,
|
|
241
|
+
/Loading CSS chunk \S+ failed/i,
|
|
242
|
+
/ChunkLoadError/i
|
|
243
|
+
];
|
|
244
|
+
function isChunkLoadError(error) {
|
|
245
|
+
if (!error) return false;
|
|
246
|
+
if (typeof error === "string") return CHUNK_ERROR_PATTERNS.some(function(p) {
|
|
247
|
+
return p.test(error);
|
|
248
|
+
});
|
|
249
|
+
if (_instanceof(error, Error)) {
|
|
250
|
+
if (error.name === "ChunkLoadError") return true;
|
|
251
|
+
return CHUNK_ERROR_PATTERNS.some(function(p) {
|
|
252
|
+
return p.test(error.message);
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
var anyError = error;
|
|
256
|
+
if (anyError.message) return isChunkLoadError(anyError.message);
|
|
257
|
+
if (anyError.detail) return isChunkLoadError(anyError.detail);
|
|
258
|
+
if (anyError.reason) return isChunkLoadError(anyError.reason);
|
|
259
|
+
return false;
|
|
260
|
+
}
|
|
261
|
+
function subscribeChunkLoadError(handler) {
|
|
262
|
+
var onError = function onError(event) {
|
|
263
|
+
var target = event.error || event.message;
|
|
264
|
+
if (isChunkLoadError(target)) handler(target);
|
|
265
|
+
};
|
|
266
|
+
var onRejection = function onRejection(event) {
|
|
267
|
+
if (isChunkLoadError(event.reason)) handler(event.reason);
|
|
268
|
+
};
|
|
269
|
+
window.addEventListener("error", onError, true);
|
|
270
|
+
window.addEventListener("unhandledrejection", onRejection);
|
|
271
|
+
return function() {
|
|
272
|
+
window.removeEventListener("error", onError, true);
|
|
273
|
+
window.removeEventListener("unhandledrejection", onRejection);
|
|
274
|
+
};
|
|
275
|
+
}
|
|
276
|
+
// src/MicroAppRoute.tsx
|
|
230
277
|
import jsxCustomEvent from "@micro-zoe/micro-app/polyfill/jsx-custom-event.js";
|
|
231
278
|
var MicroAppRoute = memo(function(props) {
|
|
232
|
-
var name = props.name, baseRoute = props.baseRoute, url = props.url, keepAlive = props.keepAlive, className = props.className, data = props.data, loadingFallback = props.loadingFallback, errorFallback = props.errorFallback, aHrefResolver = props.aHrefResolver;
|
|
279
|
+
var name = props.name, baseRoute = props.baseRoute, url = props.url, keepAlive = props.keepAlive, className = props.className, data = props.data, loadingFallback = props.loadingFallback, errorFallback = props.errorFallback, aHrefResolver = props.aHrefResolver, onChunkLoadError = props.onChunkLoadError;
|
|
233
280
|
if (aHrefResolver) aHrefResolverCollector[name] = aHrefResolver;
|
|
234
281
|
var _useState = _sliced_to_array(useState(false), 2), microAppIsShow = _useState[0], setMicroAppIsShow = _useState[1];
|
|
235
282
|
var _useState1 = _sliced_to_array(useState(false), 2), microAppIsError = _useState1[0], setMicroAppIsError = _useState1[1];
|
|
283
|
+
var onChunkLoadErrorRef = useRef(onChunkLoadError);
|
|
284
|
+
onChunkLoadErrorRef.current = onChunkLoadError;
|
|
285
|
+
useEffect(function() {
|
|
286
|
+
if (!onChunkLoadError) return;
|
|
287
|
+
return subscribeChunkLoadError(function(error) {
|
|
288
|
+
var _onChunkLoadErrorRef_current;
|
|
289
|
+
(_onChunkLoadErrorRef_current = onChunkLoadErrorRef.current) === null || _onChunkLoadErrorRef_current === void 0 ? void 0 : _onChunkLoadErrorRef_current.call(onChunkLoadErrorRef, error, name);
|
|
290
|
+
});
|
|
291
|
+
}, [
|
|
292
|
+
name,
|
|
293
|
+
onChunkLoadError
|
|
294
|
+
]);
|
|
236
295
|
var handleMicroAppMounted = useCallback(function() {
|
|
237
296
|
var navigator = getClientNavigator();
|
|
238
297
|
navigator.replace(location.pathname + location.search, history.state);
|
|
@@ -249,9 +308,13 @@ var MicroAppRoute = memo(function(props) {
|
|
|
249
308
|
});
|
|
250
309
|
setMicroAppIsShow(true);
|
|
251
310
|
}, []);
|
|
252
|
-
var handleMicroAppError = useCallback(function() {
|
|
311
|
+
var handleMicroAppError = useCallback(function(event) {
|
|
312
|
+
var _onChunkLoadErrorRef_current;
|
|
253
313
|
setMicroAppIsError(true);
|
|
254
|
-
|
|
314
|
+
if (isChunkLoadError(event)) (_onChunkLoadErrorRef_current = onChunkLoadErrorRef.current) === null || _onChunkLoadErrorRef_current === void 0 ? void 0 : _onChunkLoadErrorRef_current.call(onChunkLoadErrorRef, event, name);
|
|
315
|
+
}, [
|
|
316
|
+
name
|
|
317
|
+
]);
|
|
255
318
|
return /* @__PURE__ */ jsxCustomEvent("div", {
|
|
256
319
|
className: className
|
|
257
320
|
}, microAppIsError && errorFallback, !microAppIsShow && !microAppIsError && loadingFallback, /* @__PURE__ */ jsxCustomEvent("micro-app", {
|
|
@@ -493,4 +556,4 @@ originMicroApp.options.aHrefResolver = function(hrefValue, appName) {
|
|
|
493
556
|
return ((_aHrefResolverCollector_appName = aHrefResolverCollector[appName]) === null || _aHrefResolverCollector_appName === void 0 ? void 0 : _aHrefResolverCollector_appName.call(aHrefResolverCollector, hrefValue)) || hrefValue;
|
|
494
557
|
};
|
|
495
558
|
var microApp = originMicroApp;
|
|
496
|
-
export { MicroAppEventCenter, MicroAppEventEnum, MicroAppLink, MicroAppRoute, aHrefResolverCollector, microApp, navigateToWithMicroApp };
|
|
559
|
+
export { MicroAppEventCenter, MicroAppEventEnum, MicroAppLink, MicroAppRoute, aHrefResolverCollector, isChunkLoadError, microApp, navigateToWithMicroApp, subscribeChunkLoadError };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xfe-repo/web-micro",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.7.0",
|
|
4
4
|
"sideEffects": false,
|
|
5
5
|
"module": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -27,8 +27,8 @@
|
|
|
27
27
|
"@types/node": "^20.17.0",
|
|
28
28
|
"@types/react": "^18",
|
|
29
29
|
"eslint": "8.57.1",
|
|
30
|
-
"@xfe-repo/
|
|
31
|
-
"@xfe-repo/
|
|
30
|
+
"@xfe-repo/typescript-config": "1.6.1",
|
|
31
|
+
"@xfe-repo/eslint-config": "1.6.0"
|
|
32
32
|
},
|
|
33
33
|
"peerDependencies": {
|
|
34
34
|
"@xfe-repo/web-router": "1.6.0"
|