@modern-js/runtime-utils
Version:
A Progressive React Framework for modern web development.
142 lines (141 loc) • 6.6 kB
JavaScript
;
var __webpack_require__ = {};
(()=>{
__webpack_require__.d = (exports1, definition)=>{
for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
enumerable: true,
get: definition[key]
});
};
})();
(()=>{
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
})();
(()=>{
__webpack_require__.r = (exports1)=>{
if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
value: 'Module'
});
Object.defineProperty(exports1, '__esModule', {
value: true
});
};
})();
var __webpack_exports__ = {};
__webpack_require__.r(__webpack_exports__);
__webpack_require__.d(__webpack_exports__, {
transformNestedRoutes: ()=>transformNestedRoutes,
renderNestedRoute: ()=>renderNestedRoute
});
const jsx_runtime_namespaceObject = require("react/jsx-runtime");
const constants_namespaceObject = require("@modern-js/utils/universal/constants");
const external_react_namespaceObject = require("react");
const external_react_router_namespaceObject = require("react-router");
const external_time_js_namespaceObject = require("../time.js");
const async_storage_js_namespaceObject = require("../universal/async_storage.js");
const external_deferreds_js_namespaceObject = require("./deferreds.js");
const privateDefer = (data)=>new external_deferreds_js_namespaceObject.DeferredData(data);
const transformNestedRoutes = (routes)=>{
const routeElements = [];
for (const route of routes){
const routeElement = renderNestedRoute(route);
routeElements.push(routeElement);
}
return (0, external_react_router_namespaceObject.createRoutesFromElements)(routeElements);
};
const renderNestedRoute = (nestedRoute, options = {})=>{
const { children, index, id, component, isRoot, lazyImport, config, handle } = nestedRoute;
const Component = component;
const { parent, props = {} } = options;
const routeProps = {
caseSensitive: nestedRoute.caseSensitive,
path: nestedRoute.path,
id: nestedRoute.id,
loader: createLoader(nestedRoute),
action: nestedRoute.action,
hasErrorBoundary: nestedRoute.hasErrorBoundary,
shouldRevalidate: nestedRoute.shouldRevalidate,
handle: {
...handle,
...'object' == typeof config ? config?.handle : {}
},
index: nestedRoute.index,
element: nestedRoute.element,
errorElement: nestedRoute.errorElement
};
if (nestedRoute.error) {
const errorElement = /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(nestedRoute.error, {});
routeProps.errorElement = errorElement;
}
let element;
if (Component) if (parent?.loading && lazyImport) {
const Loading = parent.loading;
element = isLoadableComponent(Component) ? /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(Component, {
fallback: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(Loading, {})
}) : /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_react_namespaceObject.Suspense, {
fallback: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(Loading, {}),
children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(Component, {})
});
} else element = isLoadableComponent(Component) && lazyImport ? /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(Component, {}) : isRoot ? /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(Component, {
...props
}) : lazyImport ? /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_react_namespaceObject.Suspense, {
fallback: null,
children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(Component, {})
}) : /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(Component, {});
else {
nestedRoute.loading = parent?.loading;
routeProps.element = /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_react_router_namespaceObject.Outlet, {});
}
if (element) routeProps.element = element;
const childElements = children?.map((childRoute)=>renderNestedRoute(childRoute, {
parent: nestedRoute
}));
const routeElement = index ? /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_react_router_namespaceObject.Route, {
...routeProps,
index: true
}, id) : /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_react_router_namespaceObject.Route, {
...routeProps,
index: false,
children: childElements
}, id);
return routeElement;
};
function isPlainObject(value) {
return null != value && 'object' == typeof value && Object.getPrototypeOf(value) === Object.prototype;
}
function createLoader(route) {
const { loader } = route;
if (loader) return async (args)=>{
if ('function' == typeof route.lazyImport) route.lazyImport();
const end = (0, external_time_js_namespaceObject.time)();
const res = await loader(args);
let activeDeferreds = null;
activeDeferreds = "u" < typeof document ? (await (0, async_storage_js_namespaceObject.getAsyncLocalStorage)())?.useContext()?.activeDeferreds : external_deferreds_js_namespaceObject.activeDeferreds;
if (isPlainObject(res)) {
const deferredData = privateDefer(res);
activeDeferreds.set(route.id, deferredData);
}
const cost = end();
if ("u" < typeof document) {
const storage = await (0, async_storage_js_namespaceObject.getAsyncLocalStorage)();
storage?.useContext().monitors?.timing(`${constants_namespaceObject.LOADER_REPORTER_NAME}-${route.id?.replace(/\//g, '_')}`, cost);
}
return res;
};
return ()=>{
if ('function' == typeof route.lazyImport) route.lazyImport();
return null;
};
}
function isLoadableComponent(component) {
return component && 'Loadable' === component.displayName && component.preload && 'function' == typeof component.preload;
}
exports.renderNestedRoute = __webpack_exports__.renderNestedRoute;
exports.transformNestedRoutes = __webpack_exports__.transformNestedRoutes;
for(var __rspack_i in __webpack_exports__)if (-1 === [
"renderNestedRoute",
"transformNestedRoutes"
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
Object.defineProperty(exports, '__esModule', {
value: true
});