reactive-route 0.0.1-alpha.3 → 0.0.1-alpha.31
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/adapters/kr-observable-preact.cjs +39 -0
- package/adapters/kr-observable-preact.d.ts +3 -0
- package/adapters/kr-observable-preact.d.ts.map +1 -0
- package/adapters/kr-observable-preact.mjs +18 -0
- package/adapters/kr-observable-react.cjs +39 -0
- package/adapters/kr-observable-react.d.ts +3 -0
- package/adapters/kr-observable-react.d.ts.map +1 -0
- package/adapters/kr-observable-react.mjs +18 -0
- package/adapters/kr-observable-solid.cjs +37 -0
- package/adapters/kr-observable-solid.d.ts +3 -0
- package/adapters/kr-observable-solid.d.ts.map +1 -0
- package/adapters/kr-observable-solid.mjs +16 -0
- package/adapters/mobx-preact.cjs +43 -0
- package/adapters/mobx-preact.d.ts +3 -0
- package/adapters/mobx-preact.d.ts.map +1 -0
- package/adapters/mobx-preact.mjs +22 -0
- package/adapters/mobx-react.cjs +43 -0
- package/adapters/mobx-react.d.ts +3 -0
- package/adapters/mobx-react.d.ts.map +1 -0
- package/adapters/mobx-react.mjs +22 -0
- package/adapters/mobx-solid.cjs +42 -0
- package/adapters/mobx-solid.d.ts +3 -0
- package/adapters/mobx-solid.d.ts.map +1 -0
- package/adapters/mobx-solid.mjs +21 -0
- package/adapters/solid.cjs +45 -0
- package/adapters/solid.d.ts +3 -0
- package/adapters/solid.d.ts.map +1 -0
- package/adapters/solid.mjs +24 -0
- package/adapters/vue.cjs +40 -0
- package/adapters/vue.d.ts +3 -0
- package/adapters/vue.d.ts.map +1 -0
- package/adapters/vue.mjs +19 -0
- package/core/createRouter.d.ts +9 -0
- package/core/createRouter.d.ts.map +1 -0
- package/{dist/types/core/createRouterConfig.d.ts → core/createRoutes.d.ts} +4 -4
- package/core/createRoutes.d.ts.map +1 -0
- package/core/index.d.ts +14 -0
- package/core/index.d.ts.map +1 -0
- package/core/types/TypeAdapters.d.ts +9 -0
- package/core/types/TypeAdapters.d.ts.map +1 -0
- package/{dist/types/core → core}/types/TypeCurrentRoute.d.ts +1 -1
- package/core/types/TypeCurrentRoute.d.ts.map +1 -0
- package/{dist/types/core → core}/types/TypeLifecycleConfig.d.ts +2 -0
- package/core/types/TypeLifecycleConfig.d.ts.map +1 -0
- package/{dist/types/core → core}/types/TypePropsRouter.d.ts +2 -3
- package/core/types/TypePropsRouter.d.ts.map +1 -0
- package/{dist/types/core/types/TypeRedirectToParams.d.ts → core/types/TypeRedirectParams.d.ts} +6 -10
- package/core/types/TypeRedirectParams.d.ts.map +1 -0
- package/{dist/types/core → core}/types/TypeRoute.d.ts +0 -1
- package/core/types/TypeRoute.d.ts.map +1 -0
- package/{dist/types/core → core}/types/TypeRouteRaw.d.ts +1 -0
- package/core/types/TypeRouteRaw.d.ts.map +1 -0
- package/core/types/TypeRouter.d.ts +22 -0
- package/core/types/TypeRouter.d.ts.map +1 -0
- package/core/types/TypeValidator.d.ts.map +1 -0
- package/core/utils/PreventError.d.ts +4 -0
- package/core/utils/PreventError.d.ts.map +1 -0
- package/core/utils/RedirectError.d.ts +4 -0
- package/core/utils/RedirectError.d.ts.map +1 -0
- package/core/utils/addNames.d.ts.map +1 -0
- package/{dist/types/core → core}/utils/constants.d.ts +0 -2
- package/core/utils/constants.d.ts.map +1 -0
- package/core/utils/dynamic.d.ts.map +1 -0
- package/core/utils/findRouteByPathname.d.ts.map +1 -0
- package/core/utils/getDynamicValues.d.ts.map +1 -0
- package/core/utils/getInitialRoute.d.ts +7 -0
- package/core/utils/getInitialRoute.d.ts.map +1 -0
- package/core/utils/getQueryValues.d.ts.map +1 -0
- package/core/utils/getTypedEntries.d.ts.map +1 -0
- package/core/utils/history.d.ts.map +1 -0
- package/core/utils/loadComponentToConfig.d.ts.map +1 -0
- package/core/utils/queryString.d.ts +8 -0
- package/core/utils/queryString.d.ts.map +1 -0
- package/{dist/types/core → core}/utils/replaceDynamicValues.d.ts +1 -2
- package/core/utils/replaceDynamicValues.d.ts.map +1 -0
- package/core/utils/routerSetLoadedComponent.d.ts +7 -0
- package/core/utils/routerSetLoadedComponent.d.ts.map +1 -0
- package/index.cjs +406 -0
- package/index.mjs +383 -0
- package/package.json +67 -57
- package/preact/Router.d.ts +3 -0
- package/preact/Router.d.ts.map +1 -0
- package/preact/index.cjs +80 -0
- package/preact/index.d.ts.map +1 -0
- package/preact/index.mjs +57 -0
- package/react/Router.d.ts +5 -0
- package/react/Router.d.ts.map +1 -0
- package/react/index.cjs +79 -0
- package/react/index.d.ts.map +1 -0
- package/react/index.mjs +56 -0
- package/solid/Router.d.ts.map +1 -0
- package/solid/index.cjs +80 -0
- package/solid/index.d.ts +2 -0
- package/solid/index.d.ts.map +1 -0
- package/solid/index.mjs +57 -0
- package/vue/index.cjs +0 -0
- package/vue/index.d.ts +2 -0
- package/vue/index.d.ts.map +1 -0
- package/vue/index.mjs +0 -0
- package/LICENSE +0 -21
- package/README.md +0 -10
- package/dist/cjs/index.js +0 -381
- package/dist/cjs/package.json +0 -1
- package/dist/cjs/react/index.js +0 -149
- package/dist/cjs/react/package.json +0 -1
- package/dist/cjs/solid/index.js +0 -130
- package/dist/cjs/solid/package.json +0 -1
- package/dist/esm/index.js +0 -348
- package/dist/esm/package.json +0 -1
- package/dist/esm/react/index.js +0 -126
- package/dist/esm/react/package.json +0 -1
- package/dist/esm/solid/index.js +0 -107
- package/dist/esm/solid/package.json +0 -1
- package/dist/types/core/createRouterConfig.d.ts.map +0 -1
- package/dist/types/core/createRouterStore.d.ts +0 -4
- package/dist/types/core/createRouterStore.d.ts.map +0 -1
- package/dist/types/core/index.d.ts +0 -14
- package/dist/types/core/index.d.ts.map +0 -1
- package/dist/types/core/types/InterfaceRouterStore.d.ts +0 -24
- package/dist/types/core/types/InterfaceRouterStore.d.ts.map +0 -1
- package/dist/types/core/types/TypeCurrentRoute.d.ts.map +0 -1
- package/dist/types/core/types/TypeLifecycleConfig.d.ts.map +0 -1
- package/dist/types/core/types/TypePropsRouter.d.ts.map +0 -1
- package/dist/types/core/types/TypeRedirectToParams.d.ts.map +0 -1
- package/dist/types/core/types/TypeRoute.d.ts.map +0 -1
- package/dist/types/core/types/TypeRouteRaw.d.ts.map +0 -1
- package/dist/types/core/types/TypeRouteWithParams.d.ts +0 -6
- package/dist/types/core/types/TypeRouteWithParams.d.ts.map +0 -1
- package/dist/types/core/types/TypeValidator.d.ts.map +0 -1
- package/dist/types/core/utils/addNames.d.ts.map +0 -1
- package/dist/types/core/utils/constants.d.ts.map +0 -1
- package/dist/types/core/utils/dynamic.d.ts.map +0 -1
- package/dist/types/core/utils/findRouteByPathname.d.ts.map +0 -1
- package/dist/types/core/utils/getDynamicValues.d.ts.map +0 -1
- package/dist/types/core/utils/getInitialRoute.d.ts +0 -8
- package/dist/types/core/utils/getInitialRoute.d.ts.map +0 -1
- package/dist/types/core/utils/getQueryValues.d.ts.map +0 -1
- package/dist/types/core/utils/getTypedEntries.d.ts.map +0 -1
- package/dist/types/core/utils/history.d.ts.map +0 -1
- package/dist/types/core/utils/loadComponentToConfig.d.ts.map +0 -1
- package/dist/types/core/utils/replaceDynamicValues.d.ts.map +0 -1
- package/dist/types/react/Router.d.ts +0 -5
- package/dist/types/react/Router.d.ts.map +0 -1
- package/dist/types/react/index.d.ts.map +0 -1
- package/dist/types/react/useStore.d.ts +0 -8
- package/dist/types/react/useStore.d.ts.map +0 -1
- package/dist/types/solid/Router.d.ts.map +0 -1
- package/dist/types/solid/index.d.ts.map +0 -1
- package/dist/types/solid/useStore.d.ts +0 -7
- package/dist/types/solid/useStore.d.ts.map +0 -1
- package/dist/types/tsconfig.types.tsbuildinfo +0 -1
- /package/{dist/types/core → core}/types/TypeValidator.d.ts +0 -0
- /package/{dist/types/core → core}/utils/addNames.d.ts +0 -0
- /package/{dist/types/core → core}/utils/dynamic.d.ts +0 -0
- /package/{dist/types/core → core}/utils/findRouteByPathname.d.ts +0 -0
- /package/{dist/types/core → core}/utils/getDynamicValues.d.ts +0 -0
- /package/{dist/types/core → core}/utils/getQueryValues.d.ts +0 -0
- /package/{dist/types/core → core}/utils/getTypedEntries.d.ts +0 -0
- /package/{dist/types/core → core}/utils/history.d.ts +0 -0
- /package/{dist/types/core → core}/utils/loadComponentToConfig.d.ts +0 -0
- /package/{dist/types/react → preact}/index.d.ts +0 -0
- /package/{dist/types/solid → react}/index.d.ts +0 -0
- /package/{dist/types/solid → solid}/Router.d.ts +0 -0
package/dist/cjs/index.js
DELETED
|
@@ -1,381 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __create = Object.create;
|
|
3
|
-
var __defProp = Object.defineProperty;
|
|
4
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
-
var __export = (target, all) => {
|
|
9
|
-
for (var name in all)
|
|
10
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
-
};
|
|
12
|
-
var __copyProps = (to, from, except, desc) => {
|
|
13
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
-
for (let key of __getOwnPropNames(from))
|
|
15
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
-
}
|
|
18
|
-
return to;
|
|
19
|
-
};
|
|
20
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
-
mod
|
|
27
|
-
));
|
|
28
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
-
|
|
30
|
-
// packages/core/index.ts
|
|
31
|
-
var core_exports = {};
|
|
32
|
-
__export(core_exports, {
|
|
33
|
-
createRouterConfig: () => createRouterConfig,
|
|
34
|
-
createRouterStore: () => createRouterStore,
|
|
35
|
-
findRouteByPathname: () => findRouteByPathname,
|
|
36
|
-
getInitialRoute: () => getInitialRoute,
|
|
37
|
-
history: () => history,
|
|
38
|
-
isDynamicRoute: () => isDynamicRoute,
|
|
39
|
-
loadComponentToConfig: () => loadComponentToConfig,
|
|
40
|
-
replaceDynamicValues: () => replaceDynamicValues
|
|
41
|
-
});
|
|
42
|
-
module.exports = __toCommonJS(core_exports);
|
|
43
|
-
|
|
44
|
-
// packages/core/utils/addNames.ts
|
|
45
|
-
function addNames(obj) {
|
|
46
|
-
Object.entries(obj).forEach(([key, value]) => {
|
|
47
|
-
value.name = key;
|
|
48
|
-
});
|
|
49
|
-
return obj;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
// packages/core/createRouterConfig.ts
|
|
53
|
-
function createRouterConfig(config) {
|
|
54
|
-
return addNames(config);
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
// packages/core/createRouterStore.ts
|
|
58
|
-
var import_query_string2 = __toESM(require("query-string"));
|
|
59
|
-
|
|
60
|
-
// packages/core/utils/constants.ts
|
|
61
|
-
var constants = {
|
|
62
|
-
dynamicSeparator: ":",
|
|
63
|
-
pathPartSeparator: "/",
|
|
64
|
-
isClient: typeof window !== "undefined",
|
|
65
|
-
errorRedirect: "REDIRECT",
|
|
66
|
-
errorPrevent: "PREVENT_REDIRECT"
|
|
67
|
-
};
|
|
68
|
-
|
|
69
|
-
// packages/core/utils/dynamic.ts
|
|
70
|
-
function isDynamic(param) {
|
|
71
|
-
return param[0] === constants.dynamicSeparator;
|
|
72
|
-
}
|
|
73
|
-
function clearDynamic(param) {
|
|
74
|
-
return param.replace(new RegExp(`^${constants.dynamicSeparator}`), "");
|
|
75
|
-
}
|
|
76
|
-
function isDynamicRoute(route) {
|
|
77
|
-
return "params" in route;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
// packages/core/utils/getDynamicValues.ts
|
|
81
|
-
function getDynamicValues(params) {
|
|
82
|
-
const { route, pathname } = params;
|
|
83
|
-
const pathnameArray = pathname.replace(/\?.+$/, "").split(constants.pathPartSeparator).filter(Boolean).map((str) => decodeURIComponent(str));
|
|
84
|
-
const routePathnameArray = route.path.split(constants.pathPartSeparator).filter(Boolean);
|
|
85
|
-
const dynamicParams = {};
|
|
86
|
-
for (let i = 0; i < routePathnameArray.length; i++) {
|
|
87
|
-
const paramName = routePathnameArray[i];
|
|
88
|
-
if (isDynamic(paramName)) dynamicParams[clearDynamic(paramName)] = pathnameArray[i];
|
|
89
|
-
}
|
|
90
|
-
return dynamicParams;
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
// packages/core/utils/getQueryValues.ts
|
|
94
|
-
var import_query_string = __toESM(require("query-string"));
|
|
95
|
-
|
|
96
|
-
// packages/core/utils/getTypedEntries.ts
|
|
97
|
-
var getTypedEntries = Object.entries;
|
|
98
|
-
|
|
99
|
-
// packages/core/utils/getQueryValues.ts
|
|
100
|
-
function getQueryValues(params) {
|
|
101
|
-
const { route, pathname } = params;
|
|
102
|
-
const qs = import_query_string.default.extract(pathname);
|
|
103
|
-
if (!qs || !route.query) return {};
|
|
104
|
-
const query = import_query_string.default.parse(qs);
|
|
105
|
-
getTypedEntries(query).forEach(([key, value]) => {
|
|
106
|
-
const validator = route.query[key];
|
|
107
|
-
if (typeof validator !== "function" || !validator(value)) {
|
|
108
|
-
delete query[key];
|
|
109
|
-
}
|
|
110
|
-
});
|
|
111
|
-
return query;
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
// packages/core/utils/history.ts
|
|
115
|
-
var import_history = require("history");
|
|
116
|
-
var history = constants.isClient ? (0, import_history.createBrowserHistory)() : null;
|
|
117
|
-
|
|
118
|
-
// packages/core/utils/loadComponentToConfig.ts
|
|
119
|
-
function loadComponentToConfig(params) {
|
|
120
|
-
const { route } = params;
|
|
121
|
-
if (!route.component && route.loader) {
|
|
122
|
-
const loadingFn = route.loader;
|
|
123
|
-
return loadingFn().then((module2) => {
|
|
124
|
-
const { default: component, pageName, ...rest } = module2;
|
|
125
|
-
route.component = component;
|
|
126
|
-
route.otherExports = rest;
|
|
127
|
-
route.pageName = pageName;
|
|
128
|
-
});
|
|
129
|
-
}
|
|
130
|
-
return Promise.resolve();
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
// packages/core/utils/replaceDynamicValues.ts
|
|
134
|
-
var re = new RegExp(`[^${constants.pathPartSeparator}]+`, "g");
|
|
135
|
-
function replaceDynamicValues({
|
|
136
|
-
route,
|
|
137
|
-
params = {}
|
|
138
|
-
}) {
|
|
139
|
-
return route.path.replace(re, (paramName) => {
|
|
140
|
-
if (!isDynamic(paramName)) return paramName;
|
|
141
|
-
const value = params[clearDynamic(paramName)];
|
|
142
|
-
if (!value) {
|
|
143
|
-
throw new Error(
|
|
144
|
-
`replaceDynamicValues: no param "${paramName}" passed for route ${route.name}`
|
|
145
|
-
);
|
|
146
|
-
}
|
|
147
|
-
return encodeURIComponent(value);
|
|
148
|
-
});
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
// packages/core/createRouterStore.ts
|
|
152
|
-
function createRouterStore({
|
|
153
|
-
batch,
|
|
154
|
-
routes,
|
|
155
|
-
autorun,
|
|
156
|
-
replaceObject,
|
|
157
|
-
routeError500,
|
|
158
|
-
makeObservable,
|
|
159
|
-
lifecycleParams
|
|
160
|
-
}) {
|
|
161
|
-
const routerStore = makeObservable({
|
|
162
|
-
routesHistory: [],
|
|
163
|
-
currentRoute: {},
|
|
164
|
-
isRedirecting: false,
|
|
165
|
-
redirectTo: void 0,
|
|
166
|
-
restoreFromServer: void 0,
|
|
167
|
-
utils: {
|
|
168
|
-
batch,
|
|
169
|
-
autorun,
|
|
170
|
-
replaceObject,
|
|
171
|
-
makeObservable
|
|
172
|
-
}
|
|
173
|
-
});
|
|
174
|
-
routerStore.restoreFromServer = function restoreFromServer(obj) {
|
|
175
|
-
batch(() => {
|
|
176
|
-
routerStore.routesHistory.push(...obj.routesHistory || []);
|
|
177
|
-
Object.assign(routerStore.currentRoute, obj.currentRoute);
|
|
178
|
-
});
|
|
179
|
-
const preloadedRouteName = Object.keys(routes).find(
|
|
180
|
-
(routeName) => routerStore.currentRoute.name === routeName
|
|
181
|
-
);
|
|
182
|
-
return loadComponentToConfig({ route: routes[preloadedRouteName] });
|
|
183
|
-
};
|
|
184
|
-
routerStore.redirectTo = async function redirectTo(config) {
|
|
185
|
-
const { route: routeName, noHistoryPush, asClient } = config;
|
|
186
|
-
const isClient = typeof asClient === "boolean" ? asClient : constants.isClient;
|
|
187
|
-
let currentRoute;
|
|
188
|
-
let currentPathname;
|
|
189
|
-
let currentUrl;
|
|
190
|
-
let currentSearch;
|
|
191
|
-
let currentQuery;
|
|
192
|
-
if (routerStore.currentRoute?.name) {
|
|
193
|
-
currentRoute = routes[routerStore.currentRoute.name];
|
|
194
|
-
currentPathname = replaceDynamicValues({
|
|
195
|
-
route: currentRoute,
|
|
196
|
-
params: routerStore.currentRoute.params
|
|
197
|
-
});
|
|
198
|
-
currentUrl = import_query_string2.default.stringifyUrl({
|
|
199
|
-
url: currentPathname,
|
|
200
|
-
query: routerStore.currentRoute.query
|
|
201
|
-
});
|
|
202
|
-
currentQuery = routerStore.currentRoute.query;
|
|
203
|
-
currentSearch = import_query_string2.default.stringify(routerStore.currentRoute.query);
|
|
204
|
-
}
|
|
205
|
-
const nextRoute = routes[routeName];
|
|
206
|
-
const nextPathname = replaceDynamicValues({
|
|
207
|
-
route: nextRoute,
|
|
208
|
-
params: "params" in config ? config.params : void 0
|
|
209
|
-
});
|
|
210
|
-
let nextQuery;
|
|
211
|
-
let nextUrl = nextPathname;
|
|
212
|
-
let nextSearch;
|
|
213
|
-
if ("query" in config && config.query) {
|
|
214
|
-
const clearedQuery = getQueryValues({
|
|
215
|
-
route: nextRoute,
|
|
216
|
-
pathname: `${nextPathname}?${import_query_string2.default.stringify(config.query)}`
|
|
217
|
-
});
|
|
218
|
-
if (Object.keys(clearedQuery).length > 0) {
|
|
219
|
-
nextQuery = clearedQuery;
|
|
220
|
-
nextSearch = import_query_string2.default.stringify(clearedQuery);
|
|
221
|
-
nextUrl = import_query_string2.default.stringifyUrl({ url: nextPathname, query: clearedQuery });
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
if (currentUrl === nextUrl) return Promise.resolve();
|
|
225
|
-
if (currentPathname === nextPathname) {
|
|
226
|
-
if (currentSearch !== nextSearch) {
|
|
227
|
-
batch(() => {
|
|
228
|
-
replaceObject(routerStore.currentRoute.query, nextQuery || {});
|
|
229
|
-
routerStore.routesHistory.push(nextUrl);
|
|
230
|
-
});
|
|
231
|
-
if (history && !noHistoryPush) {
|
|
232
|
-
history.push({
|
|
233
|
-
hash: history.location.hash,
|
|
234
|
-
search: nextSearch,
|
|
235
|
-
pathname: nextPathname
|
|
236
|
-
});
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
return Promise.resolve();
|
|
240
|
-
}
|
|
241
|
-
batch(() => {
|
|
242
|
-
routerStore.isRedirecting = true;
|
|
243
|
-
});
|
|
244
|
-
try {
|
|
245
|
-
await currentRoute?.beforeLeave?.(
|
|
246
|
-
{
|
|
247
|
-
nextUrl,
|
|
248
|
-
nextRoute,
|
|
249
|
-
nextQuery,
|
|
250
|
-
nextSearch,
|
|
251
|
-
nextPathname,
|
|
252
|
-
currentUrl,
|
|
253
|
-
currentQuery,
|
|
254
|
-
currentRoute,
|
|
255
|
-
currentSearch,
|
|
256
|
-
currentPathname
|
|
257
|
-
},
|
|
258
|
-
...lifecycleParams || []
|
|
259
|
-
);
|
|
260
|
-
const redirectConfig = await nextRoute.beforeEnter?.(
|
|
261
|
-
{
|
|
262
|
-
nextUrl,
|
|
263
|
-
nextRoute,
|
|
264
|
-
nextQuery,
|
|
265
|
-
nextSearch,
|
|
266
|
-
nextPathname,
|
|
267
|
-
currentUrl,
|
|
268
|
-
currentQuery,
|
|
269
|
-
currentRoute,
|
|
270
|
-
currentSearch,
|
|
271
|
-
currentPathname
|
|
272
|
-
},
|
|
273
|
-
...lifecycleParams || []
|
|
274
|
-
);
|
|
275
|
-
if (typeof redirectConfig === "object") {
|
|
276
|
-
if (isClient) return redirectTo({ ...redirectConfig, asClient });
|
|
277
|
-
const redirectRoute = routes[redirectConfig.route];
|
|
278
|
-
const redirectParams = "params" in redirectConfig && redirectConfig.params ? redirectConfig.params : void 0;
|
|
279
|
-
let redirectUrl = replaceDynamicValues({
|
|
280
|
-
params: redirectParams,
|
|
281
|
-
route: redirectRoute
|
|
282
|
-
});
|
|
283
|
-
if ("query" in redirectConfig && redirectConfig.query) {
|
|
284
|
-
const clearedQuery = getQueryValues({
|
|
285
|
-
route: nextRoute,
|
|
286
|
-
pathname: `${nextPathname}?${import_query_string2.default.stringify(redirectConfig.query)}`
|
|
287
|
-
});
|
|
288
|
-
if (Object.keys(clearedQuery).length > 0) {
|
|
289
|
-
redirectUrl = import_query_string2.default.stringifyUrl({ url: redirectUrl, query: clearedQuery });
|
|
290
|
-
}
|
|
291
|
-
}
|
|
292
|
-
throw Object.assign(new Error(redirectUrl), { name: constants.errorRedirect });
|
|
293
|
-
}
|
|
294
|
-
await loadComponentToConfig({ route: routes[nextRoute.name] });
|
|
295
|
-
} catch (error) {
|
|
296
|
-
if (error?.name === constants.errorPrevent) return Promise.resolve();
|
|
297
|
-
if (error?.name === constants.errorRedirect) {
|
|
298
|
-
throw error;
|
|
299
|
-
}
|
|
300
|
-
console.error(error);
|
|
301
|
-
await loadComponentToConfig({ route: routeError500 });
|
|
302
|
-
batch(() => {
|
|
303
|
-
replaceObject(routerStore.currentRoute, {
|
|
304
|
-
name: routeError500.name,
|
|
305
|
-
path: routeError500.path,
|
|
306
|
-
props: routes[routeError500.name].props,
|
|
307
|
-
query: {},
|
|
308
|
-
params: {},
|
|
309
|
-
pageName: routes[routeError500.name].pageName
|
|
310
|
-
});
|
|
311
|
-
routerStore.isRedirecting = false;
|
|
312
|
-
});
|
|
313
|
-
return Promise.resolve();
|
|
314
|
-
}
|
|
315
|
-
batch(() => {
|
|
316
|
-
replaceObject(routerStore.currentRoute, {
|
|
317
|
-
name: nextRoute.name,
|
|
318
|
-
path: nextRoute.path,
|
|
319
|
-
props: routes[nextRoute.name].props,
|
|
320
|
-
query: getQueryValues({ route: nextRoute, pathname: nextUrl }),
|
|
321
|
-
params: getDynamicValues({ route: nextRoute, pathname: nextUrl }),
|
|
322
|
-
pageName: routes[nextRoute.name].pageName
|
|
323
|
-
});
|
|
324
|
-
const lastUrl = routerStore.routesHistory[routerStore.routesHistory.length - 1];
|
|
325
|
-
if (lastUrl !== nextUrl) {
|
|
326
|
-
routerStore.routesHistory.push(nextUrl);
|
|
327
|
-
}
|
|
328
|
-
if (history && !noHistoryPush) {
|
|
329
|
-
history.push({
|
|
330
|
-
hash: history.location.hash,
|
|
331
|
-
search: "query" in config ? `?${import_query_string2.default.stringify(config.query)}` : "",
|
|
332
|
-
pathname: nextPathname
|
|
333
|
-
});
|
|
334
|
-
}
|
|
335
|
-
routerStore.isRedirecting = false;
|
|
336
|
-
});
|
|
337
|
-
return Promise.resolve();
|
|
338
|
-
};
|
|
339
|
-
return routerStore;
|
|
340
|
-
}
|
|
341
|
-
|
|
342
|
-
// packages/core/utils/findRouteByPathname.ts
|
|
343
|
-
function completeStaticMatch(pathname, path) {
|
|
344
|
-
return !path.includes(constants.dynamicSeparator) && (pathname === path || pathname === `${path}${constants.pathPartSeparator}`);
|
|
345
|
-
}
|
|
346
|
-
function findRouteByPathname({
|
|
347
|
-
pathname,
|
|
348
|
-
routes
|
|
349
|
-
}) {
|
|
350
|
-
let dynamicRouteMatch;
|
|
351
|
-
const pathnameArray = pathname.replace(/\?.+$/, "").split(constants.pathPartSeparator).filter(Boolean);
|
|
352
|
-
for (const routeName in routes) {
|
|
353
|
-
if (!Object.hasOwn(routes, routeName)) continue;
|
|
354
|
-
const route = routes[routeName];
|
|
355
|
-
if (completeStaticMatch(pathname, route.path)) return route;
|
|
356
|
-
if (dynamicRouteMatch) continue;
|
|
357
|
-
const routePathnameArray = route.path.split(constants.pathPartSeparator).filter(Boolean);
|
|
358
|
-
if (routePathnameArray.length !== pathnameArray.length) continue;
|
|
359
|
-
const someParamInvalid = routePathnameArray.some((paramName, i) => {
|
|
360
|
-
const paramFromUrl = pathnameArray[i];
|
|
361
|
-
if (!isDynamic(paramName)) return paramName !== paramFromUrl;
|
|
362
|
-
const validator = route.params?.[clearDynamic(paramName)];
|
|
363
|
-
if (typeof validator !== "function") {
|
|
364
|
-
throw new Error(`findRoute: missing validator for param "${paramName}"`);
|
|
365
|
-
}
|
|
366
|
-
return !validator(paramFromUrl);
|
|
367
|
-
});
|
|
368
|
-
if (!someParamInvalid) dynamicRouteMatch = route;
|
|
369
|
-
}
|
|
370
|
-
return dynamicRouteMatch;
|
|
371
|
-
}
|
|
372
|
-
|
|
373
|
-
// packages/core/utils/getInitialRoute.ts
|
|
374
|
-
function getInitialRoute(params) {
|
|
375
|
-
const route = findRouteByPathname({ pathname: params.pathname, routes: params.routes }) || params.routes[params.fallback];
|
|
376
|
-
return {
|
|
377
|
-
route: route.name,
|
|
378
|
-
query: getQueryValues({ route, pathname: params.pathname }),
|
|
379
|
-
params: getDynamicValues({ route, pathname: params.pathname })
|
|
380
|
-
};
|
|
381
|
-
}
|
package/dist/cjs/package.json
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"type": "commonjs"}
|
package/dist/cjs/react/index.js
DELETED
|
@@ -1,149 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __defProp = Object.defineProperty;
|
|
3
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
-
var __export = (target, all) => {
|
|
7
|
-
for (var name in all)
|
|
8
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
-
};
|
|
10
|
-
var __copyProps = (to, from, except, desc) => {
|
|
11
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
-
for (let key of __getOwnPropNames(from))
|
|
13
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
-
}
|
|
16
|
-
return to;
|
|
17
|
-
};
|
|
18
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
-
|
|
20
|
-
// packages/react/index.ts
|
|
21
|
-
var react_exports = {};
|
|
22
|
-
__export(react_exports, {
|
|
23
|
-
Router: () => Router
|
|
24
|
-
});
|
|
25
|
-
module.exports = __toCommonJS(react_exports);
|
|
26
|
-
|
|
27
|
-
// packages/react/Router.tsx
|
|
28
|
-
var import_mobx2 = require("mobx");
|
|
29
|
-
var import_mobx_react_lite = require("mobx-react-lite");
|
|
30
|
-
var import_reactive_route = require("reactive-route");
|
|
31
|
-
|
|
32
|
-
// packages/react/useStore.ts
|
|
33
|
-
var import_mobx = require("mobx");
|
|
34
|
-
var import_react = require("react");
|
|
35
|
-
function useStore(ViewModel, props) {
|
|
36
|
-
const isFirstRenderRef = (0, import_react.useRef)(true);
|
|
37
|
-
const [vm] = (0, import_react.useState)(() => {
|
|
38
|
-
const instance = new ViewModel(props || {});
|
|
39
|
-
(0, import_mobx.runInAction)(() => {
|
|
40
|
-
instance.beforeMount?.();
|
|
41
|
-
});
|
|
42
|
-
return instance;
|
|
43
|
-
});
|
|
44
|
-
(0, import_react.useEffect)(() => {
|
|
45
|
-
if (isFirstRenderRef.current) {
|
|
46
|
-
isFirstRenderRef.current = false;
|
|
47
|
-
} else if (props) {
|
|
48
|
-
(0, import_mobx.runInAction)(() => {
|
|
49
|
-
vm.props = props || {};
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
}, [props]);
|
|
53
|
-
(0, import_react.useEffect)(() => {
|
|
54
|
-
vm.afterMount?.();
|
|
55
|
-
return () => {
|
|
56
|
-
vm.autorunDisposers?.forEach((disposer) => disposer());
|
|
57
|
-
};
|
|
58
|
-
}, []);
|
|
59
|
-
return vm;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
// packages/react/Router.tsx
|
|
63
|
-
var import_jsx_runtime = require("react/jsx-runtime");
|
|
64
|
-
var VM = class {
|
|
65
|
-
constructor(props) {
|
|
66
|
-
this.props = props;
|
|
67
|
-
(0, import_mobx2.makeAutoObservable)(
|
|
68
|
-
this,
|
|
69
|
-
{ loadedComponent: false, setLoadedComponent: false, props: false },
|
|
70
|
-
{ autoBind: true }
|
|
71
|
-
);
|
|
72
|
-
}
|
|
73
|
-
autorunDisposers = [];
|
|
74
|
-
loadedComponentName = void 0;
|
|
75
|
-
loadedComponentPage = void 0;
|
|
76
|
-
loadedComponent;
|
|
77
|
-
currentProps = {};
|
|
78
|
-
get utils() {
|
|
79
|
-
return this.props.routerStore.utils;
|
|
80
|
-
}
|
|
81
|
-
beforeMount() {
|
|
82
|
-
this.props.beforeMount?.();
|
|
83
|
-
this.redirectOnHistoryPop();
|
|
84
|
-
this.setLoadedComponent();
|
|
85
|
-
this.autorunDisposers.push(this.utils.autorun(this.setLoadedComponent));
|
|
86
|
-
}
|
|
87
|
-
redirectOnHistoryPop() {
|
|
88
|
-
if (!import_reactive_route.history) return;
|
|
89
|
-
import_reactive_route.history.listen((params) => {
|
|
90
|
-
if (params.action !== "POP") return;
|
|
91
|
-
const previousRoutePathname = this.props.routerStore.routesHistory[this.props.routerStore.routesHistory.length - 2];
|
|
92
|
-
if (previousRoutePathname === params.location.pathname) {
|
|
93
|
-
this.utils.batch(() => this.props.routerStore.routesHistory.pop());
|
|
94
|
-
}
|
|
95
|
-
void this.props.routerStore.redirectTo({
|
|
96
|
-
noHistoryPush: true,
|
|
97
|
-
...(0, import_reactive_route.getInitialRoute)({
|
|
98
|
-
routes: this.props.routes,
|
|
99
|
-
pathname: import_reactive_route.history.location.pathname,
|
|
100
|
-
fallback: "error404"
|
|
101
|
-
})
|
|
102
|
-
});
|
|
103
|
-
});
|
|
104
|
-
}
|
|
105
|
-
setLoadedComponent = () => {
|
|
106
|
-
const { loadedComponentName, loadedComponentPage } = this;
|
|
107
|
-
const { currentRoute, isRedirecting } = this.props.routerStore;
|
|
108
|
-
const currentRouteName = currentRoute.name;
|
|
109
|
-
const currentRoutePage = currentRoute.pageName;
|
|
110
|
-
let preventRedirect = false;
|
|
111
|
-
if (isRedirecting) preventRedirect = true;
|
|
112
|
-
else if (loadedComponentName === currentRouteName) preventRedirect = true;
|
|
113
|
-
else if (loadedComponentPage != null && currentRouteName != null) {
|
|
114
|
-
if (loadedComponentPage === currentRoutePage) {
|
|
115
|
-
const componentConfig = this.props.routes[currentRouteName];
|
|
116
|
-
this.utils.batch(() => {
|
|
117
|
-
this.currentProps = "props" in componentConfig ? componentConfig.props || {} : {};
|
|
118
|
-
});
|
|
119
|
-
preventRedirect = true;
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
if (preventRedirect) return;
|
|
123
|
-
this.utils.batch(() => {
|
|
124
|
-
if (!loadedComponentName) {
|
|
125
|
-
this.setComponent(currentRouteName);
|
|
126
|
-
} else {
|
|
127
|
-
this.props.beforeUpdatePageComponent?.();
|
|
128
|
-
this.setComponent(currentRouteName);
|
|
129
|
-
}
|
|
130
|
-
});
|
|
131
|
-
};
|
|
132
|
-
setComponent(currentRouteName) {
|
|
133
|
-
const componentConfig = this.props.routes[currentRouteName];
|
|
134
|
-
const RouteComponent = componentConfig.component;
|
|
135
|
-
this.props.beforeSetPageComponent?.(componentConfig);
|
|
136
|
-
this.currentProps = "props" in componentConfig ? componentConfig.props || {} : {};
|
|
137
|
-
this.loadedComponentName = currentRouteName;
|
|
138
|
-
this.loadedComponentPage = componentConfig.pageName;
|
|
139
|
-
this.loadedComponent = RouteComponent;
|
|
140
|
-
}
|
|
141
|
-
};
|
|
142
|
-
var Router = (0, import_mobx_react_lite.observer)(
|
|
143
|
-
(props) => {
|
|
144
|
-
const vm = useStore(VM, props);
|
|
145
|
-
const LoadedComponent = vm.loadedComponentName ? vm.loadedComponent : null;
|
|
146
|
-
if (LoadedComponent) return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(LoadedComponent, { ...vm.currentProps });
|
|
147
|
-
return null;
|
|
148
|
-
}
|
|
149
|
-
);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"type": "commonjs"}
|
package/dist/cjs/solid/index.js
DELETED
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __defProp = Object.defineProperty;
|
|
3
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
-
var __export = (target, all) => {
|
|
7
|
-
for (var name in all)
|
|
8
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
-
};
|
|
10
|
-
var __copyProps = (to, from, except, desc) => {
|
|
11
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
-
for (let key of __getOwnPropNames(from))
|
|
13
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
-
}
|
|
16
|
-
return to;
|
|
17
|
-
};
|
|
18
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
-
|
|
20
|
-
// packages/solid/index.ts
|
|
21
|
-
var solid_exports = {};
|
|
22
|
-
__export(solid_exports, {
|
|
23
|
-
Router: () => Router
|
|
24
|
-
});
|
|
25
|
-
module.exports = __toCommonJS(solid_exports);
|
|
26
|
-
|
|
27
|
-
// packages/solid/Router.tsx
|
|
28
|
-
var import_web = require("solid-js/web");
|
|
29
|
-
var import_web2 = require("solid-js/web");
|
|
30
|
-
var import_reactive_route = require("reactive-route");
|
|
31
|
-
var import_solid_js2 = require("solid-js");
|
|
32
|
-
var import_store = require("solid-js/store");
|
|
33
|
-
var import_web3 = require("solid-js/web");
|
|
34
|
-
|
|
35
|
-
// packages/solid/useStore.ts
|
|
36
|
-
var import_solid_js = require("solid-js");
|
|
37
|
-
function useStore(ViewModel, props) {
|
|
38
|
-
const vm = new ViewModel(props);
|
|
39
|
-
vm.beforeMount?.();
|
|
40
|
-
(0, import_solid_js.onMount)(() => {
|
|
41
|
-
vm.afterMount?.();
|
|
42
|
-
});
|
|
43
|
-
return vm;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
// packages/solid/Router.tsx
|
|
47
|
-
var VM = class {
|
|
48
|
-
constructor(props) {
|
|
49
|
-
this.props = props;
|
|
50
|
-
return (0, import_store.createMutable)(this);
|
|
51
|
-
}
|
|
52
|
-
loadedComponentName = void 0;
|
|
53
|
-
loadedComponentPage = void 0;
|
|
54
|
-
currentProps = {};
|
|
55
|
-
get utils() {
|
|
56
|
-
return this.props.routerStore.utils;
|
|
57
|
-
}
|
|
58
|
-
beforeMount() {
|
|
59
|
-
this.props.beforeMount?.();
|
|
60
|
-
this.redirectOnHistoryPop();
|
|
61
|
-
this.utils.autorun(() => this.setLoadedComponent());
|
|
62
|
-
}
|
|
63
|
-
redirectOnHistoryPop() {
|
|
64
|
-
if (!import_reactive_route.history) return;
|
|
65
|
-
import_reactive_route.history.listen((params) => {
|
|
66
|
-
if (params.action !== "POP") return;
|
|
67
|
-
const previousRoutePathname = this.props.routerStore.routesHistory[this.props.routerStore.routesHistory.length - 2];
|
|
68
|
-
if (previousRoutePathname === params.location.pathname) {
|
|
69
|
-
this.props.routerStore.routesHistory.pop();
|
|
70
|
-
}
|
|
71
|
-
void this.props.routerStore.redirectTo({
|
|
72
|
-
noHistoryPush: true,
|
|
73
|
-
...(0, import_reactive_route.getInitialRoute)({
|
|
74
|
-
routes: this.props.routes,
|
|
75
|
-
pathname: import_reactive_route.history.location.pathname,
|
|
76
|
-
fallback: "error404"
|
|
77
|
-
})
|
|
78
|
-
});
|
|
79
|
-
});
|
|
80
|
-
}
|
|
81
|
-
setLoadedComponent() {
|
|
82
|
-
const currentRouteName = this.props.routerStore.currentRoute.name;
|
|
83
|
-
const currentRoutePage = this.props.routerStore.currentRoute.pageName;
|
|
84
|
-
let preventRedirect = false;
|
|
85
|
-
if (this.props.routerStore.isRedirecting) preventRedirect = true;
|
|
86
|
-
else if (this.loadedComponentName === currentRouteName) {
|
|
87
|
-
preventRedirect = true;
|
|
88
|
-
} else if (this.loadedComponentPage != null && currentRouteName != null) {
|
|
89
|
-
if (this.loadedComponentPage === currentRoutePage) {
|
|
90
|
-
const componentConfig = this.props.routes[currentRouteName];
|
|
91
|
-
this.utils.replaceObject(this.currentProps, "props" in componentConfig ? componentConfig.props : {});
|
|
92
|
-
preventRedirect = true;
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
if (preventRedirect) return;
|
|
96
|
-
this.utils.batch(() => {
|
|
97
|
-
if (!this.loadedComponentName) {
|
|
98
|
-
this.setComponent();
|
|
99
|
-
} else {
|
|
100
|
-
this.props.beforeUpdatePageComponent?.();
|
|
101
|
-
this.setComponent();
|
|
102
|
-
}
|
|
103
|
-
});
|
|
104
|
-
}
|
|
105
|
-
setComponent() {
|
|
106
|
-
const currentRouteName = this.props.routerStore.currentRoute.name;
|
|
107
|
-
const componentConfig = this.props.routes[currentRouteName];
|
|
108
|
-
this.props.beforeSetPageComponent?.(componentConfig);
|
|
109
|
-
this.utils.batch(() => {
|
|
110
|
-
this.utils.replaceObject(this.currentProps, "props" in componentConfig ? componentConfig.props : {});
|
|
111
|
-
this.loadedComponentName = currentRouteName;
|
|
112
|
-
this.loadedComponentPage = componentConfig.pageName;
|
|
113
|
-
});
|
|
114
|
-
}
|
|
115
|
-
};
|
|
116
|
-
function Router(props) {
|
|
117
|
-
const vm = useStore(VM, props);
|
|
118
|
-
return (0, import_web.createComponent)(import_solid_js2.Show, {
|
|
119
|
-
get when() {
|
|
120
|
-
return vm.loadedComponentName;
|
|
121
|
-
},
|
|
122
|
-
get children() {
|
|
123
|
-
return (0, import_web.createComponent)(import_web3.Dynamic, (0, import_web2.mergeProps)({
|
|
124
|
-
get component() {
|
|
125
|
-
return props.routes[vm.loadedComponentName]?.component || void 0;
|
|
126
|
-
}
|
|
127
|
-
}, () => vm.currentProps));
|
|
128
|
-
}
|
|
129
|
-
});
|
|
130
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"type": "commonjs"}
|