@modern-js/server-core
Version:
A Progressive React Framework for modern web development.
93 lines (92 loc) • 3.25 kB
JavaScript
import { _ as _async_to_generator } from "@swc/helpers/_/_async_to_generator";
import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
import { MAIN_ENTRY_NAME } from "@modern-js/utils/universal/constants";
import { sortRoutes } from "../utils";
function injectRoute(route) {
return function() {
var _ref = _async_to_generator(function(c, next) {
return _ts_generator(this, function(_state) {
switch (_state.label) {
case 0:
if (route && !c.get("route")) {
c.set("route", route);
}
return [
4,
next()
];
case 1:
_state.sent();
return [
2
];
}
});
});
return function(c, next) {
return _ref.apply(this, arguments);
};
}();
}
function getPageRoutes(routes) {
return routes.filter(function(route) {
return route.entryName;
}).sort(sortRoutes);
}
var injectRoutePlugin = function() {
return {
name: "@modern-js/plugin-inject-route",
setup: function setup(api) {
return {
prepare: function prepare() {
return _async_to_generator(function() {
var _api_useAppContext, middlewares, routes, pageRoutes, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, route, originUrlPath, _route_entryName, entryName, urlPath;
return _ts_generator(this, function(_state) {
_api_useAppContext = api.useAppContext(), middlewares = _api_useAppContext.middlewares, routes = _api_useAppContext.routes;
if (!routes) {
return [
2
];
}
pageRoutes = getPageRoutes(routes);
_iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;
try {
for (_iterator = pageRoutes[Symbol.iterator](); !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
route = _step.value;
originUrlPath = route.urlPath, _route_entryName = route.entryName, entryName = _route_entryName === void 0 ? MAIN_ENTRY_NAME : _route_entryName;
urlPath = originUrlPath.endsWith("/") ? "".concat(originUrlPath, "*") : "".concat(originUrlPath, "/*");
middlewares.push({
name: "inject-route-info",
path: urlPath,
handler: injectRoute({
entryName
})
});
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return != null) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
return [
2
];
});
})();
}
};
}
};
};
export {
injectRoutePlugin
};