UNPKG

@modern-js/runtime-utils

Version:

A Progressive React Framework for modern web development.

142 lines (141 loc) • 6.6 kB
"use strict"; 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 });