reactive-route 0.0.1-alpha.2 → 0.0.1-alpha.4

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/dist/cjs/index.js CHANGED
@@ -90,6 +90,37 @@ function getDynamicValues(params) {
90
90
  return dynamicParams;
91
91
  }
92
92
 
93
+ // packages/core/utils/findRouteByPathname.ts
94
+ function completeStaticMatch(pathname, path) {
95
+ return !path.includes(constants.dynamicSeparator) && (pathname === path || pathname === `${path}${constants.pathPartSeparator}`);
96
+ }
97
+ function findRouteByPathname({
98
+ pathname,
99
+ routes
100
+ }) {
101
+ let dynamicRouteMatch;
102
+ const pathnameArray = pathname.replace(/\?.+$/, "").split(constants.pathPartSeparator).filter(Boolean);
103
+ for (const routeName in routes) {
104
+ if (!Object.hasOwn(routes, routeName)) continue;
105
+ const route = routes[routeName];
106
+ if (completeStaticMatch(pathname, route.path)) return route;
107
+ if (dynamicRouteMatch) continue;
108
+ const routePathnameArray = route.path.split(constants.pathPartSeparator).filter(Boolean);
109
+ if (routePathnameArray.length !== pathnameArray.length) continue;
110
+ const someParamInvalid = routePathnameArray.some((paramName, i) => {
111
+ const paramFromUrl = pathnameArray[i];
112
+ if (!isDynamic(paramName)) return paramName !== paramFromUrl;
113
+ const validator = route.params?.[clearDynamic(paramName)];
114
+ if (typeof validator !== "function") {
115
+ throw new Error(`findRoute: missing validator for param "${paramName}"`);
116
+ }
117
+ return !validator(paramFromUrl);
118
+ });
119
+ if (!someParamInvalid) dynamicRouteMatch = route;
120
+ }
121
+ return dynamicRouteMatch;
122
+ }
123
+
93
124
  // packages/core/utils/getQueryValues.ts
94
125
  var import_query_string = __toESM(require("query-string"));
95
126
 
@@ -111,6 +142,16 @@ function getQueryValues(params) {
111
142
  return query;
112
143
  }
113
144
 
145
+ // packages/core/utils/getInitialRoute.ts
146
+ function getInitialRoute(params) {
147
+ const route = findRouteByPathname({ pathname: params.pathname, routes: params.routes }) || params.routes[params.fallback];
148
+ return {
149
+ route: route.name,
150
+ query: getQueryValues({ route, pathname: params.pathname }),
151
+ params: getDynamicValues({ route, pathname: params.pathname })
152
+ };
153
+ }
154
+
114
155
  // packages/core/utils/history.ts
115
156
  var import_history = require("history");
116
157
  var history = constants.isClient ? (0, import_history.createBrowserHistory)() : null;
@@ -163,6 +204,8 @@ function createRouterStore({
163
204
  currentRoute: {},
164
205
  isRedirecting: false,
165
206
  redirectTo: void 0,
207
+ restoreFromURL: void 0,
208
+ restoreFromServer: void 0,
166
209
  utils: {
167
210
  batch,
168
211
  autorun,
@@ -170,6 +213,19 @@ function createRouterStore({
170
213
  makeObservable
171
214
  }
172
215
  });
216
+ routerStore.restoreFromServer = function restoreFromServer(obj) {
217
+ batch(() => {
218
+ routerStore.routesHistory.push(...obj.routesHistory || []);
219
+ Object.assign(routerStore.currentRoute, obj.currentRoute);
220
+ });
221
+ const preloadedRouteName = Object.keys(routes).find(
222
+ (routeName) => routerStore.currentRoute.name === routeName
223
+ );
224
+ return loadComponentToConfig({ route: routes[preloadedRouteName] });
225
+ };
226
+ routerStore.restoreFromURL = function restoreFromURL(params) {
227
+ return routerStore.redirectTo(getInitialRoute({ routes, ...params }));
228
+ };
173
229
  routerStore.redirectTo = async function redirectTo(config) {
174
230
  const { route: routeName, noHistoryPush, asClient } = config;
175
231
  const isClient = typeof asClient === "boolean" ? asClient : constants.isClient;
@@ -327,44 +383,3 @@ function createRouterStore({
327
383
  };
328
384
  return routerStore;
329
385
  }
330
-
331
- // packages/core/utils/findRouteByPathname.ts
332
- function completeStaticMatch(pathname, path) {
333
- return !path.includes(constants.dynamicSeparator) && (pathname === path || pathname === `${path}${constants.pathPartSeparator}`);
334
- }
335
- function findRouteByPathname({
336
- pathname,
337
- routes
338
- }) {
339
- let dynamicRouteMatch;
340
- const pathnameArray = pathname.replace(/\?.+$/, "").split(constants.pathPartSeparator).filter(Boolean);
341
- for (const routeName in routes) {
342
- if (!Object.hasOwn(routes, routeName)) continue;
343
- const route = routes[routeName];
344
- if (completeStaticMatch(pathname, route.path)) return route;
345
- if (dynamicRouteMatch) continue;
346
- const routePathnameArray = route.path.split(constants.pathPartSeparator).filter(Boolean);
347
- if (routePathnameArray.length !== pathnameArray.length) continue;
348
- const someParamInvalid = routePathnameArray.some((paramName, i) => {
349
- const paramFromUrl = pathnameArray[i];
350
- if (!isDynamic(paramName)) return paramName !== paramFromUrl;
351
- const validator = route.params?.[clearDynamic(paramName)];
352
- if (typeof validator !== "function") {
353
- throw new Error(`findRoute: missing validator for param "${paramName}"`);
354
- }
355
- return !validator(paramFromUrl);
356
- });
357
- if (!someParamInvalid) dynamicRouteMatch = route;
358
- }
359
- return dynamicRouteMatch;
360
- }
361
-
362
- // packages/core/utils/getInitialRoute.ts
363
- function getInitialRoute(params) {
364
- const route = findRouteByPathname({ pathname: params.pathname, routes: params.routes }) || params.routes[params.fallback];
365
- return {
366
- route: route.name,
367
- query: getQueryValues({ route, pathname: params.pathname }),
368
- params: getDynamicValues({ route, pathname: params.pathname })
369
- };
370
- }
package/dist/esm/index.js CHANGED
@@ -47,6 +47,37 @@ function getDynamicValues(params) {
47
47
  return dynamicParams;
48
48
  }
49
49
 
50
+ // packages/core/utils/findRouteByPathname.ts
51
+ function completeStaticMatch(pathname, path) {
52
+ return !path.includes(constants.dynamicSeparator) && (pathname === path || pathname === `${path}${constants.pathPartSeparator}`);
53
+ }
54
+ function findRouteByPathname({
55
+ pathname,
56
+ routes
57
+ }) {
58
+ let dynamicRouteMatch;
59
+ const pathnameArray = pathname.replace(/\?.+$/, "").split(constants.pathPartSeparator).filter(Boolean);
60
+ for (const routeName in routes) {
61
+ if (!Object.hasOwn(routes, routeName)) continue;
62
+ const route = routes[routeName];
63
+ if (completeStaticMatch(pathname, route.path)) return route;
64
+ if (dynamicRouteMatch) continue;
65
+ const routePathnameArray = route.path.split(constants.pathPartSeparator).filter(Boolean);
66
+ if (routePathnameArray.length !== pathnameArray.length) continue;
67
+ const someParamInvalid = routePathnameArray.some((paramName, i) => {
68
+ const paramFromUrl = pathnameArray[i];
69
+ if (!isDynamic(paramName)) return paramName !== paramFromUrl;
70
+ const validator = route.params?.[clearDynamic(paramName)];
71
+ if (typeof validator !== "function") {
72
+ throw new Error(`findRoute: missing validator for param "${paramName}"`);
73
+ }
74
+ return !validator(paramFromUrl);
75
+ });
76
+ if (!someParamInvalid) dynamicRouteMatch = route;
77
+ }
78
+ return dynamicRouteMatch;
79
+ }
80
+
50
81
  // packages/core/utils/getQueryValues.ts
51
82
  import queryString from "query-string";
52
83
 
@@ -68,6 +99,16 @@ function getQueryValues(params) {
68
99
  return query;
69
100
  }
70
101
 
102
+ // packages/core/utils/getInitialRoute.ts
103
+ function getInitialRoute(params) {
104
+ const route = findRouteByPathname({ pathname: params.pathname, routes: params.routes }) || params.routes[params.fallback];
105
+ return {
106
+ route: route.name,
107
+ query: getQueryValues({ route, pathname: params.pathname }),
108
+ params: getDynamicValues({ route, pathname: params.pathname })
109
+ };
110
+ }
111
+
71
112
  // packages/core/utils/history.ts
72
113
  import { createBrowserHistory } from "history";
73
114
  var history = constants.isClient ? createBrowserHistory() : null;
@@ -120,6 +161,8 @@ function createRouterStore({
120
161
  currentRoute: {},
121
162
  isRedirecting: false,
122
163
  redirectTo: void 0,
164
+ restoreFromURL: void 0,
165
+ restoreFromServer: void 0,
123
166
  utils: {
124
167
  batch,
125
168
  autorun,
@@ -127,6 +170,19 @@ function createRouterStore({
127
170
  makeObservable
128
171
  }
129
172
  });
173
+ routerStore.restoreFromServer = function restoreFromServer(obj) {
174
+ batch(() => {
175
+ routerStore.routesHistory.push(...obj.routesHistory || []);
176
+ Object.assign(routerStore.currentRoute, obj.currentRoute);
177
+ });
178
+ const preloadedRouteName = Object.keys(routes).find(
179
+ (routeName) => routerStore.currentRoute.name === routeName
180
+ );
181
+ return loadComponentToConfig({ route: routes[preloadedRouteName] });
182
+ };
183
+ routerStore.restoreFromURL = function restoreFromURL(params) {
184
+ return routerStore.redirectTo(getInitialRoute({ routes, ...params }));
185
+ };
130
186
  routerStore.redirectTo = async function redirectTo(config) {
131
187
  const { route: routeName, noHistoryPush, asClient } = config;
132
188
  const isClient = typeof asClient === "boolean" ? asClient : constants.isClient;
@@ -284,47 +340,6 @@ function createRouterStore({
284
340
  };
285
341
  return routerStore;
286
342
  }
287
-
288
- // packages/core/utils/findRouteByPathname.ts
289
- function completeStaticMatch(pathname, path) {
290
- return !path.includes(constants.dynamicSeparator) && (pathname === path || pathname === `${path}${constants.pathPartSeparator}`);
291
- }
292
- function findRouteByPathname({
293
- pathname,
294
- routes
295
- }) {
296
- let dynamicRouteMatch;
297
- const pathnameArray = pathname.replace(/\?.+$/, "").split(constants.pathPartSeparator).filter(Boolean);
298
- for (const routeName in routes) {
299
- if (!Object.hasOwn(routes, routeName)) continue;
300
- const route = routes[routeName];
301
- if (completeStaticMatch(pathname, route.path)) return route;
302
- if (dynamicRouteMatch) continue;
303
- const routePathnameArray = route.path.split(constants.pathPartSeparator).filter(Boolean);
304
- if (routePathnameArray.length !== pathnameArray.length) continue;
305
- const someParamInvalid = routePathnameArray.some((paramName, i) => {
306
- const paramFromUrl = pathnameArray[i];
307
- if (!isDynamic(paramName)) return paramName !== paramFromUrl;
308
- const validator = route.params?.[clearDynamic(paramName)];
309
- if (typeof validator !== "function") {
310
- throw new Error(`findRoute: missing validator for param "${paramName}"`);
311
- }
312
- return !validator(paramFromUrl);
313
- });
314
- if (!someParamInvalid) dynamicRouteMatch = route;
315
- }
316
- return dynamicRouteMatch;
317
- }
318
-
319
- // packages/core/utils/getInitialRoute.ts
320
- function getInitialRoute(params) {
321
- const route = findRouteByPathname({ pathname: params.pathname, routes: params.routes }) || params.routes[params.fallback];
322
- return {
323
- route: route.name,
324
- query: getQueryValues({ route, pathname: params.pathname }),
325
- params: getDynamicValues({ route, pathname: params.pathname })
326
- };
327
- }
328
343
  export {
329
344
  createRouterConfig,
330
345
  createRouterStore,
@@ -1 +1 @@
1
- {"version":3,"file":"createRouterStore.d.ts","sourceRoot":"","sources":["../../../packages/core/createRouterStore.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAE3F,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAQ9C,wBAAgB,iBAAiB,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,EAC3E,KAAK,EACL,MAAM,EACN,OAAO,EACP,aAAa,EACb,aAAa,EACb,cAAc,EACd,eAAe,GAChB,EAAE,qBAAqB,CAAC,OAAO,CAAC,GAAG,oBAAoB,CAAC,OAAO,CAAC,CA4OhE"}
1
+ {"version":3,"file":"createRouterStore.d.ts","sourceRoot":"","sources":["../../../packages/core/createRouterStore.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAE3F,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAS9C,wBAAgB,iBAAiB,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,EAC3E,KAAK,EACL,MAAM,EACN,OAAO,EACP,aAAa,EACb,aAAa,EACb,cAAc,EACd,eAAe,GAChB,EAAE,qBAAqB,CAAC,OAAO,CAAC,GAAG,oBAAoB,CAAC,OAAO,CAAC,CA+PhE"}
@@ -13,11 +13,16 @@ export type TypeCreateRouterStore<TRoutes extends Record<string, TypeRoute>> = T
13
13
  lifecycleParams?: Array<any>;
14
14
  };
15
15
  export type InterfaceRouterStore<TRoutes extends Record<string, TypeRoute>> = {
16
- routesHistory: Array<string>;
16
+ utils: TypeUtils;
17
17
  currentRoute: TypeCurrentRoute<TRoutes[keyof TRoutes]>;
18
+ routesHistory: Array<string>;
18
19
  isRedirecting: boolean;
19
20
  redirectTo<TRouteName extends keyof TRoutes>(config: TypeRedirectToParams<TRoutes, TRouteName>): Promise<void>;
20
- utils: TypeUtils;
21
+ restoreFromURL(params: {
22
+ pathname: string;
23
+ fallback: TRoutes[keyof TRoutes]['name'];
24
+ }): Promise<void>;
25
+ restoreFromServer(obj: InterfaceRouterStore<TRoutes>): Promise<void>;
21
26
  };
22
27
  export {};
23
28
  //# sourceMappingURL=InterfaceRouterStore.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"InterfaceRouterStore.d.ts","sourceRoot":"","sources":["../../../../packages/core/types/InterfaceRouterStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,KAAK,SAAS,GAAG;IACf,KAAK,EAAE,CAAC,EAAE,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;IAChC,OAAO,EAAE,CAAC,EAAE,EAAE,MAAM,IAAI,KAAK,GAAG,CAAC;IACjC,aAAa,EAAE,CAAC,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,KAAK,IAAI,CAAC;IACnF,cAAc,EAAE,CAAC,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,KAAK,IAAI,CAAC;CACvE,CAAC;AAEF,MAAM,MAAM,qBAAqB,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,SAAS,GAAG;IACzF,MAAM,EAAE,OAAO,CAAC;IAChB,aAAa,EAAE,OAAO,CAAC,MAAM,OAAO,CAAC,CAAC;IACtC,eAAe,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,oBAAoB,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI;IAC5E,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAC7B,YAAY,EAAE,gBAAgB,CAAC,OAAO,CAAC,MAAM,OAAO,CAAC,CAAC,CAAC;IACvD,aAAa,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,UAAU,SAAS,MAAM,OAAO,EACzC,MAAM,EAAE,oBAAoB,CAAC,OAAO,EAAE,UAAU,CAAC,GAChD,OAAO,CAAC,IAAI,CAAC,CAAC;IACjB,KAAK,EAAE,SAAS,CAAC;CAClB,CAAC"}
1
+ {"version":3,"file":"InterfaceRouterStore.d.ts","sourceRoot":"","sources":["../../../../packages/core/types/InterfaceRouterStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,KAAK,SAAS,GAAG;IACf,KAAK,EAAE,CAAC,EAAE,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;IAChC,OAAO,EAAE,CAAC,EAAE,EAAE,MAAM,IAAI,KAAK,GAAG,CAAC;IACjC,aAAa,EAAE,CAAC,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,KAAK,IAAI,CAAC;IACnF,cAAc,EAAE,CAAC,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,KAAK,IAAI,CAAC;CACvE,CAAC;AAEF,MAAM,MAAM,qBAAqB,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,SAAS,GAAG;IACzF,MAAM,EAAE,OAAO,CAAC;IAChB,aAAa,EAAE,OAAO,CAAC,MAAM,OAAO,CAAC,CAAC;IACtC,eAAe,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,oBAAoB,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI;IAC5E,KAAK,EAAE,SAAS,CAAC;IACjB,YAAY,EAAE,gBAAgB,CAAC,OAAO,CAAC,MAAM,OAAO,CAAC,CAAC,CAAC;IACvD,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAC7B,aAAa,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,UAAU,SAAS,MAAM,OAAO,EACzC,MAAM,EAAE,oBAAoB,CAAC,OAAO,EAAE,UAAU,CAAC,GAChD,OAAO,CAAC,IAAI,CAAC,CAAC;IACjB,cAAc,CAAC,MAAM,EAAE;QACrB,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,OAAO,CAAC,MAAM,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC;KAC1C,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClB,iBAAiB,CAAC,GAAG,EAAE,oBAAoB,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACtE,CAAC"}
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "reactive-route",
3
3
  "author": "Dmitry Kazakov",
4
4
  "license": "MIT",
5
- "version": "0.0.1-alpha.2",
5
+ "version": "0.0.1-alpha.4",
6
6
  "description": "Reactive Router for different frameworks",
7
7
  "repository": {
8
8
  "type": "git",