@modern-js/plugin-router-v5 2.18.0 → 2.18.2-alpha.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/CHANGELOG.md +7 -0
- package/dist/cjs/runtime/hooks.js +10 -0
- package/dist/cjs/runtime/plugin.js +27 -13
- package/dist/esm/runtime/hooks.js +3 -0
- package/dist/esm/runtime/plugin.js +14 -2
- package/dist/esm-node/runtime/hooks.js +3 -0
- package/dist/esm-node/runtime/plugin.js +26 -12
- package/dist/js/modern/cli/index.js +128 -0
- package/dist/js/modern/cli/types.js +0 -0
- package/dist/js/modern/index.js +5 -0
- package/dist/js/modern/runtime/DefaultNotFound.js +14 -0
- package/dist/js/modern/runtime/index.js +7 -0
- package/dist/js/modern/runtime/plugin.js +106 -0
- package/dist/js/modern/runtime/utils.js +108 -0
- package/dist/js/node/cli/index.js +143 -0
- package/dist/js/node/cli/types.js +0 -0
- package/dist/js/node/index.js +33 -0
- package/dist/js/node/runtime/DefaultNotFound.js +37 -0
- package/dist/js/node/runtime/index.js +29 -0
- package/dist/js/node/runtime/plugin.js +125 -0
- package/dist/js/node/runtime/utils.js +132 -0
- package/dist/js/treeshaking/cli/index.js +151 -0
- package/dist/js/treeshaking/cli/types.js +1 -0
- package/dist/js/treeshaking/index.js +3 -0
- package/dist/js/treeshaking/runtime/DefaultNotFound.js +14 -0
- package/dist/js/treeshaking/runtime/index.js +5 -0
- package/dist/js/treeshaking/runtime/plugin.js +134 -0
- package/dist/js/treeshaking/runtime/utils.js +138 -0
- package/dist/types/runtime/hooks.d.ts +5 -0
- package/dist/types/runtime/plugin.d.ts +1 -1
- package/package.json +10 -9
@@ -0,0 +1,134 @@
|
|
1
|
+
function _defineProperty(obj, key, value) {
|
2
|
+
if (key in obj) {
|
3
|
+
Object.defineProperty(obj, key, {
|
4
|
+
value: value,
|
5
|
+
enumerable: true,
|
6
|
+
configurable: true,
|
7
|
+
writable: true
|
8
|
+
});
|
9
|
+
} else {
|
10
|
+
obj[key] = value;
|
11
|
+
}
|
12
|
+
return obj;
|
13
|
+
}
|
14
|
+
function _objectSpread(target) {
|
15
|
+
for(var i = 1; i < arguments.length; i++){
|
16
|
+
var source = arguments[i] != null ? arguments[i] : {};
|
17
|
+
var ownKeys = Object.keys(source);
|
18
|
+
if (typeof Object.getOwnPropertySymbols === "function") {
|
19
|
+
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
|
20
|
+
return Object.getOwnPropertyDescriptor(source, sym).enumerable;
|
21
|
+
}));
|
22
|
+
}
|
23
|
+
ownKeys.forEach(function(key) {
|
24
|
+
_defineProperty(target, key, source[key]);
|
25
|
+
});
|
26
|
+
}
|
27
|
+
return target;
|
28
|
+
}
|
29
|
+
function ownKeys(object, enumerableOnly) {
|
30
|
+
var keys = Object.keys(object);
|
31
|
+
if (Object.getOwnPropertySymbols) {
|
32
|
+
var symbols = Object.getOwnPropertySymbols(object);
|
33
|
+
if (enumerableOnly) {
|
34
|
+
symbols = symbols.filter(function(sym) {
|
35
|
+
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
|
36
|
+
});
|
37
|
+
}
|
38
|
+
keys.push.apply(keys, symbols);
|
39
|
+
}
|
40
|
+
return keys;
|
41
|
+
}
|
42
|
+
function _objectSpreadProps(target, source) {
|
43
|
+
source = source != null ? source : {};
|
44
|
+
if (Object.getOwnPropertyDescriptors) {
|
45
|
+
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
|
46
|
+
} else {
|
47
|
+
ownKeys(Object(source)).forEach(function(key) {
|
48
|
+
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
|
49
|
+
});
|
50
|
+
}
|
51
|
+
return target;
|
52
|
+
}
|
53
|
+
import { jsx } from "react/jsx-runtime";
|
54
|
+
import { useContext } from "react";
|
55
|
+
import { createBrowserHistory, createHashHistory } from "history";
|
56
|
+
import { Router, StaticRouter, useRouteMatch, useLocation } from "react-router-dom";
|
57
|
+
import hoistNonReactStatics from "hoist-non-react-statics";
|
58
|
+
import { RuntimeReactContext, isBrowser } from "@modern-js/runtime";
|
59
|
+
import { renderRoutes, getLocation, urlJoin } from "./utils";
|
60
|
+
var routerPlugin = function(param) {
|
61
|
+
var _serverBase = param.serverBase, serverBase = _serverBase === void 0 ? [] : _serverBase, customHistory = param.history, _supportHtml5History = param.supportHtml5History, supportHtml5History = _supportHtml5History === void 0 ? true : _supportHtml5History, routesConfig = param.routesConfig, _historyOptions = param.historyOptions, historyOptions = _historyOptions === void 0 ? {} : _historyOptions;
|
62
|
+
var isBrow = isBrowser();
|
63
|
+
var select = function(pathname) {
|
64
|
+
return serverBase.find(function(baseUrl) {
|
65
|
+
return pathname.search(baseUrl) === 0;
|
66
|
+
}) || "/";
|
67
|
+
};
|
68
|
+
return {
|
69
|
+
name: "@modern-js/plugin-router",
|
70
|
+
setup: function() {
|
71
|
+
return {
|
72
|
+
init: function init(param, next) {
|
73
|
+
var context = param.context;
|
74
|
+
context.router = {
|
75
|
+
useRouteMatch: useRouteMatch,
|
76
|
+
useLocation: useLocation
|
77
|
+
};
|
78
|
+
return next({
|
79
|
+
context: context
|
80
|
+
});
|
81
|
+
},
|
82
|
+
hoc: function(param, next) {
|
83
|
+
var App = param.App;
|
84
|
+
var getRouteApp = function() {
|
85
|
+
if (isBrow) {
|
86
|
+
var ref;
|
87
|
+
var baseUrl = ((ref = window._SERVER_DATA) === null || ref === void 0 ? void 0 : ref.router.baseUrl) || select(location.pathname);
|
88
|
+
historyOptions.basename = baseUrl === "/" ? urlJoin(baseUrl, historyOptions.basename) : baseUrl;
|
89
|
+
var history = customHistory || (supportHtml5History ? createBrowserHistory(historyOptions) : createHashHistory(historyOptions));
|
90
|
+
return function(props) {
|
91
|
+
return /* @__PURE__ */ jsx(Router, {
|
92
|
+
history: history,
|
93
|
+
children: /* @__PURE__ */ jsx(App, _objectSpreadProps(_objectSpread({}, props), {
|
94
|
+
children: routesConfig ? renderRoutes(routesConfig, props) : null
|
95
|
+
}))
|
96
|
+
});
|
97
|
+
};
|
98
|
+
}
|
99
|
+
return function(props) {
|
100
|
+
var runtimeContext = useContext(RuntimeReactContext);
|
101
|
+
var ssrContext = runtimeContext.ssrContext;
|
102
|
+
var location2 = getLocation(ssrContext);
|
103
|
+
var routerContext = (ssrContext === null || ssrContext === void 0 ? void 0 : ssrContext.redirection) || {};
|
104
|
+
var request = ssrContext === null || ssrContext === void 0 ? void 0 : ssrContext.request;
|
105
|
+
var baseUrl = request === null || request === void 0 ? void 0 : request.baseUrl;
|
106
|
+
var basename = baseUrl === "/" ? urlJoin(baseUrl, historyOptions.basename) : baseUrl;
|
107
|
+
return /* @__PURE__ */ jsx(StaticRouter, {
|
108
|
+
basename: basename === "/" ? "" : basename,
|
109
|
+
location: location2,
|
110
|
+
context: routerContext,
|
111
|
+
children: /* @__PURE__ */ jsx(App, _objectSpreadProps(_objectSpread({}, props), {
|
112
|
+
children: routesConfig ? renderRoutes(routesConfig, props) : null
|
113
|
+
}))
|
114
|
+
});
|
115
|
+
};
|
116
|
+
};
|
117
|
+
var RouteApp = getRouteApp();
|
118
|
+
if (App) {
|
119
|
+
RouteApp = hoistNonReactStatics(RouteApp, App);
|
120
|
+
}
|
121
|
+
if (routesConfig === null || routesConfig === void 0 ? void 0 : routesConfig.globalApp) {
|
122
|
+
return next({
|
123
|
+
App: hoistNonReactStatics(RouteApp, routesConfig.globalApp)
|
124
|
+
});
|
125
|
+
}
|
126
|
+
return next({
|
127
|
+
App: RouteApp
|
128
|
+
});
|
129
|
+
}
|
130
|
+
};
|
131
|
+
}
|
132
|
+
};
|
133
|
+
};
|
134
|
+
export { routerPlugin };
|
@@ -0,0 +1,138 @@
|
|
1
|
+
function _defineProperty(obj, key, value) {
|
2
|
+
if (key in obj) {
|
3
|
+
Object.defineProperty(obj, key, {
|
4
|
+
value: value,
|
5
|
+
enumerable: true,
|
6
|
+
configurable: true,
|
7
|
+
writable: true
|
8
|
+
});
|
9
|
+
} else {
|
10
|
+
obj[key] = value;
|
11
|
+
}
|
12
|
+
return obj;
|
13
|
+
}
|
14
|
+
function _objectSpread(target) {
|
15
|
+
for(var i = 1; i < arguments.length; i++){
|
16
|
+
var source = arguments[i] != null ? arguments[i] : {};
|
17
|
+
var ownKeys = Object.keys(source);
|
18
|
+
if (typeof Object.getOwnPropertySymbols === "function") {
|
19
|
+
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
|
20
|
+
return Object.getOwnPropertyDescriptor(source, sym).enumerable;
|
21
|
+
}));
|
22
|
+
}
|
23
|
+
ownKeys.forEach(function(key) {
|
24
|
+
_defineProperty(target, key, source[key]);
|
25
|
+
});
|
26
|
+
}
|
27
|
+
return target;
|
28
|
+
}
|
29
|
+
function _objectWithoutProperties(source, excluded) {
|
30
|
+
if (source == null) return {};
|
31
|
+
var target = _objectWithoutPropertiesLoose(source, excluded);
|
32
|
+
var key, i;
|
33
|
+
if (Object.getOwnPropertySymbols) {
|
34
|
+
var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
|
35
|
+
for(i = 0; i < sourceSymbolKeys.length; i++){
|
36
|
+
key = sourceSymbolKeys[i];
|
37
|
+
if (excluded.indexOf(key) >= 0) continue;
|
38
|
+
if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
|
39
|
+
target[key] = source[key];
|
40
|
+
}
|
41
|
+
}
|
42
|
+
return target;
|
43
|
+
}
|
44
|
+
function _objectWithoutPropertiesLoose(source, excluded) {
|
45
|
+
if (source == null) return {};
|
46
|
+
var target = {};
|
47
|
+
var sourceKeys = Object.keys(source);
|
48
|
+
var key, i;
|
49
|
+
for(i = 0; i < sourceKeys.length; i++){
|
50
|
+
key = sourceKeys[i];
|
51
|
+
if (excluded.indexOf(key) >= 0) continue;
|
52
|
+
target[key] = source[key];
|
53
|
+
}
|
54
|
+
return target;
|
55
|
+
}
|
56
|
+
import { jsx } from "react/jsx-runtime";
|
57
|
+
import { Route, matchPath } from "react-router-dom";
|
58
|
+
import { DefaultNotFound } from "./DefaultNotFound";
|
59
|
+
function renderRoutes(routesConfig) {
|
60
|
+
var extraProps = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
|
61
|
+
var Layout = function(_param) {
|
62
|
+
var Component = _param.Component, props = _objectWithoutProperties(_param, [
|
63
|
+
"Component"
|
64
|
+
]);
|
65
|
+
var GlobalLayout = routesConfig === null || routesConfig === void 0 ? void 0 : routesConfig.globalApp;
|
66
|
+
if (!GlobalLayout) {
|
67
|
+
return /* @__PURE__ */ jsx(Component, _objectSpread({}, props));
|
68
|
+
}
|
69
|
+
return /* @__PURE__ */ jsx(GlobalLayout, _objectSpread({
|
70
|
+
Component: Component
|
71
|
+
}, props));
|
72
|
+
};
|
73
|
+
var findMatchedRoute = function(pathname) {
|
74
|
+
var ref;
|
75
|
+
return routesConfig === null || routesConfig === void 0 ? void 0 : (ref = routesConfig.routes) === null || ref === void 0 ? void 0 : ref.find(function(route) {
|
76
|
+
var info = matchPath(pathname, {
|
77
|
+
path: route.path,
|
78
|
+
exact: route.exact,
|
79
|
+
sensitive: route.sensitive
|
80
|
+
});
|
81
|
+
return Boolean(info);
|
82
|
+
});
|
83
|
+
};
|
84
|
+
return /* @__PURE__ */ jsx(Route, {
|
85
|
+
path: "/",
|
86
|
+
render: function(props) {
|
87
|
+
var matchedRoute = findMatchedRoute(props.location.pathname);
|
88
|
+
if (!matchedRoute) {
|
89
|
+
return /* @__PURE__ */ jsx(DefaultNotFound, {});
|
90
|
+
}
|
91
|
+
return /* @__PURE__ */ jsx(Route, {
|
92
|
+
path: matchedRoute.path,
|
93
|
+
exact: matchedRoute.exact,
|
94
|
+
sensitive: matchedRoute.sensitive,
|
95
|
+
render: function(routeProps) {
|
96
|
+
return /* @__PURE__ */ jsx(Layout, _objectSpread({
|
97
|
+
Component: matchedRoute.component
|
98
|
+
}, routeProps, extraProps));
|
99
|
+
}
|
100
|
+
});
|
101
|
+
}
|
102
|
+
});
|
103
|
+
}
|
104
|
+
function getLocation(serverContext) {
|
105
|
+
var ref;
|
106
|
+
var ref1 = (serverContext === null || serverContext === void 0 ? void 0 : serverContext.request) || {}, pathname = ref1.pathname, url = ref1.url;
|
107
|
+
var cleanUrl = (ref = url === null || url === void 0 ? void 0 : url.replace("http://", "")) === null || ref === void 0 ? void 0 : ref.replace("https://", "");
|
108
|
+
var index = (cleanUrl || "").indexOf(pathname);
|
109
|
+
if (index === -1) {
|
110
|
+
return pathname;
|
111
|
+
}
|
112
|
+
return cleanUrl.substring(index);
|
113
|
+
}
|
114
|
+
var urlJoin = function() {
|
115
|
+
for(var _len = arguments.length, parts = new Array(_len), _key = 0; _key < _len; _key++){
|
116
|
+
parts[_key] = arguments[_key];
|
117
|
+
}
|
118
|
+
var separator = "/";
|
119
|
+
var replace = new RegExp("".concat(separator, "{1,}"), "g");
|
120
|
+
return standardSlash(parts.join(separator).replace(replace, separator));
|
121
|
+
};
|
122
|
+
function standardSlash(str) {
|
123
|
+
var addr = str;
|
124
|
+
if (!addr || typeof addr !== "string") {
|
125
|
+
return addr;
|
126
|
+
}
|
127
|
+
if (addr.startsWith(".")) {
|
128
|
+
addr = addr.slice(1);
|
129
|
+
}
|
130
|
+
if (!addr.startsWith("/")) {
|
131
|
+
addr = "/".concat(addr);
|
132
|
+
}
|
133
|
+
if (addr.endsWith("/") && addr !== "/") {
|
134
|
+
addr = addr.slice(0, addr.length - 1);
|
135
|
+
}
|
136
|
+
return addr;
|
137
|
+
}
|
138
|
+
export { getLocation, renderRoutes, standardSlash, urlJoin };
|
package/package.json
CHANGED
@@ -15,7 +15,7 @@
|
|
15
15
|
"modern",
|
16
16
|
"modern.js"
|
17
17
|
],
|
18
|
-
"version": "2.18.0",
|
18
|
+
"version": "2.18.2-alpha.0",
|
19
19
|
"jsnext:source": "./src/index.ts",
|
20
20
|
"types": "./dist/types/cli/index.d.ts",
|
21
21
|
"main": "./dist/cjs/cli/index.js",
|
@@ -59,8 +59,9 @@
|
|
59
59
|
"history": "^4.7.9",
|
60
60
|
"hoist-non-react-statics": "^3.3.2",
|
61
61
|
"react-router-dom": "^5.3.4",
|
62
|
-
"@modern-js/
|
63
|
-
"@modern-js/
|
62
|
+
"@modern-js/plugin": "2.18.1",
|
63
|
+
"@modern-js/types": "2.18.1",
|
64
|
+
"@modern-js/utils": "2.18.1"
|
64
65
|
},
|
65
66
|
"peerDependencies": {
|
66
67
|
"react": ">=17",
|
@@ -78,12 +79,12 @@
|
|
78
79
|
"react-dom": "^18",
|
79
80
|
"ts-jest": "^29.0.4",
|
80
81
|
"typescript": "^4",
|
81
|
-
"@modern-js/app-tools": "2.18.
|
82
|
-
"@modern-js/
|
83
|
-
"@modern-js/
|
84
|
-
"@
|
85
|
-
"@
|
86
|
-
"@scripts/jest-config": "2.18.
|
82
|
+
"@modern-js/app-tools": "2.18.1",
|
83
|
+
"@modern-js/runtime": "2.18.1",
|
84
|
+
"@modern-js/core": "2.18.1",
|
85
|
+
"@scripts/build": "2.18.1",
|
86
|
+
"@modern-js/utils": "2.18.1",
|
87
|
+
"@scripts/jest-config": "2.18.1"
|
87
88
|
},
|
88
89
|
"sideEffects": false,
|
89
90
|
"modernConfig": {},
|