mobx-route 0.15.0 → 0.16.1

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.
Files changed (155) hide show
  1. package/README.md +5 -7
  2. package/core/config/config.cjs +43 -0
  3. package/core/config/config.d.cts +7 -0
  4. package/core/config/config.d.cts.map +1 -0
  5. package/core/config/config.d.ts +1 -1
  6. package/core/config/config.d.ts.map +1 -1
  7. package/core/config/config.types.cjs +2 -0
  8. package/core/config/config.types.d.cts +11 -0
  9. package/core/config/config.types.d.cts.map +1 -0
  10. package/core/config/config.types.d.ts +1 -1
  11. package/core/config/config.types.d.ts.map +1 -1
  12. package/core/config/index.cjs +18 -0
  13. package/core/config/index.d.cts +3 -0
  14. package/core/config/index.d.cts.map +1 -0
  15. package/core/config/index.d.ts +2 -2
  16. package/core/config/index.d.ts.map +1 -1
  17. package/core/config/index.js +2 -2
  18. package/core/index.cjs +21 -0
  19. package/core/index.d.cts +6 -0
  20. package/core/index.d.cts.map +1 -0
  21. package/core/index.d.ts +5 -5
  22. package/core/index.d.ts.map +1 -1
  23. package/core/index.js +5 -5
  24. package/core/route/index.cjs +18 -0
  25. package/core/route/index.d.cts +3 -0
  26. package/core/route/index.d.cts.map +1 -0
  27. package/core/route/index.d.ts +2 -2
  28. package/core/route/index.d.ts.map +1 -1
  29. package/core/route/index.js +2 -2
  30. package/core/route/route.cjs +296 -0
  31. package/core/route/route.d.cts +107 -0
  32. package/core/route/route.d.cts.map +1 -0
  33. package/core/route/route.d.ts +1 -1
  34. package/core/route/route.d.ts.map +1 -1
  35. package/core/route/route.js +1 -1
  36. package/core/route/route.types.cjs +2 -0
  37. package/core/route/route.types.d.cts +142 -0
  38. package/core/route/route.types.d.cts.map +1 -0
  39. package/core/route/route.types.d.ts +4 -4
  40. package/core/route/route.types.d.ts.map +1 -1
  41. package/core/route-group/index.cjs +18 -0
  42. package/core/route-group/index.d.cts +3 -0
  43. package/core/route-group/index.d.cts.map +1 -0
  44. package/core/route-group/index.d.ts +2 -2
  45. package/core/route-group/index.d.ts.map +1 -1
  46. package/core/route-group/index.js +2 -2
  47. package/core/route-group/route-group.cjs +67 -0
  48. package/core/route-group/route-group.d.cts +31 -0
  49. package/core/route-group/route-group.d.cts.map +1 -0
  50. package/core/route-group/route-group.d.ts +1 -1
  51. package/core/route-group/route-group.d.ts.map +1 -1
  52. package/core/route-group/route-group.types.cjs +2 -0
  53. package/core/route-group/route-group.types.d.cts +15 -0
  54. package/core/route-group/route-group.types.d.cts.map +1 -0
  55. package/core/route-group/route-group.types.d.ts +3 -3
  56. package/core/route-group/route-group.types.d.ts.map +1 -1
  57. package/core/router/index.cjs +18 -0
  58. package/core/router/index.d.cts +3 -0
  59. package/core/router/index.d.cts.map +1 -0
  60. package/core/router/index.d.ts +2 -2
  61. package/core/router/index.d.ts.map +1 -1
  62. package/core/router/index.js +2 -2
  63. package/core/router/router.cjs +42 -0
  64. package/core/router/router.d.cts +18 -0
  65. package/core/router/router.d.cts.map +1 -0
  66. package/core/router/router.d.ts +2 -2
  67. package/core/router/router.d.ts.map +1 -1
  68. package/core/router/router.js +1 -1
  69. package/core/router/router.types.cjs +2 -0
  70. package/core/router/router.types.d.cts +13 -0
  71. package/core/router/router.types.d.cts.map +1 -0
  72. package/core/router/router.types.d.ts +3 -3
  73. package/core/router/router.types.d.ts.map +1 -1
  74. package/core/utils/is-route-entity.cjs +5 -0
  75. package/core/utils/is-route-entity.d.cts +3 -0
  76. package/core/utils/is-route-entity.d.cts.map +1 -0
  77. package/core/utils/is-route-entity.d.ts +1 -1
  78. package/core/utils/is-route-entity.d.ts.map +1 -1
  79. package/core/virtual-route/index.cjs +18 -0
  80. package/core/virtual-route/index.d.cts +3 -0
  81. package/core/virtual-route/index.d.cts.map +1 -0
  82. package/core/virtual-route/index.d.ts +2 -2
  83. package/core/virtual-route/index.d.ts.map +1 -1
  84. package/core/virtual-route/index.js +2 -2
  85. package/core/virtual-route/virtual-route.cjs +133 -0
  86. package/core/virtual-route/virtual-route.d.cts +39 -0
  87. package/core/virtual-route/virtual-route.d.cts.map +1 -0
  88. package/core/virtual-route/virtual-route.d.ts +1 -1
  89. package/core/virtual-route/virtual-route.d.ts.map +1 -1
  90. package/core/virtual-route/virtual-route.js +1 -1
  91. package/core/virtual-route/virtual-route.types.cjs +2 -0
  92. package/core/virtual-route/virtual-route.types.d.cts +57 -0
  93. package/core/virtual-route/virtual-route.types.d.cts.map +1 -0
  94. package/core/virtual-route/virtual-route.types.d.ts +2 -2
  95. package/core/virtual-route/virtual-route.types.d.ts.map +1 -1
  96. package/index.cjs +18 -0
  97. package/index.d.cts +3 -0
  98. package/index.d.cts.map +1 -0
  99. package/index.d.ts +1 -1
  100. package/index.d.ts.map +1 -1
  101. package/index.js +1 -1
  102. package/package.json +29 -128
  103. package/react/components/index.cjs +21 -0
  104. package/react/components/index.d.cts +4 -0
  105. package/react/components/index.d.cts.map +1 -0
  106. package/react/components/index.d.ts +3 -3
  107. package/react/components/index.d.ts.map +1 -1
  108. package/react/components/index.js +3 -3
  109. package/react/components/link.cjs +79 -0
  110. package/react/components/link.d.cts +23 -0
  111. package/react/components/link.d.cts.map +1 -0
  112. package/react/components/link.d.ts +1 -1
  113. package/react/components/link.d.ts.map +1 -1
  114. package/react/components/link.js +2 -4
  115. package/react/components/route-view-group.cjs +57 -0
  116. package/react/components/route-view-group.d.cts +26 -0
  117. package/react/components/route-view-group.d.cts.map +1 -0
  118. package/react/components/route-view-group.d.ts +1 -1
  119. package/react/components/route-view-group.d.ts.map +1 -1
  120. package/react/components/route-view-group.js +3 -3
  121. package/react/components/route-view.cjs +43 -0
  122. package/react/components/route-view.d.cts +25 -0
  123. package/react/components/route-view.d.cts.map +1 -0
  124. package/react/components/route-view.d.ts +1 -1
  125. package/react/components/route-view.d.ts.map +1 -1
  126. package/react/index.cjs +17 -0
  127. package/react/index.d.cts +2 -0
  128. package/react/index.d.cts.map +1 -0
  129. package/react/index.d.ts +1 -1
  130. package/react/index.d.ts.map +1 -1
  131. package/react/index.js +1 -1
  132. package/view-model/index.cjs +17 -0
  133. package/view-model/index.d.cts +2 -0
  134. package/view-model/index.d.cts.map +1 -0
  135. package/view-model/index.d.ts +1 -1
  136. package/view-model/index.d.ts.map +1 -1
  137. package/view-model/index.js +1 -1
  138. package/view-model/route-view-model.cjs +37 -0
  139. package/view-model/route-view-model.d.cts +13 -0
  140. package/view-model/route-view-model.d.cts.map +1 -0
  141. package/view-model/route-view-model.d.ts +1 -1
  142. package/view-model/route-view-model.d.ts.map +1 -1
  143. package/view-model/route-view-model.js +1 -1
  144. package/assets/logo.png +0 -0
  145. package/assets/logo.pxz +0 -0
  146. package/assets/new-logo.pxz +0 -0
  147. package/core/route/route.test.d.ts +0 -19
  148. package/core/route/route.test.d.ts.map +0 -1
  149. package/core/route/route.test.js +0 -250
  150. package/core/utils/build-url.d.ts +0 -3
  151. package/core/utils/build-url.d.ts.map +0 -1
  152. package/core/utils/build-url.js +0 -12
  153. package/react/components/route-view-group.test.d.ts +0 -2
  154. package/react/components/route-view-group.test.d.ts.map +0 -1
  155. package/react/components/route-view-group.test.js +0 -101
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./components/index.cjs"), exports);
@@ -0,0 +1,2 @@
1
+ export * from "./components/index.cjs";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA,uCAAsC"}
package/react/index.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export * from './components/index.js';
1
+ export * from "./components/index.js";
2
2
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA,sCAAsC"}
package/react/index.js CHANGED
@@ -1 +1 @@
1
- export * from './components/index.js';
1
+ export * from "./components/index.js";
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./route-view-model.cjs"), exports);
@@ -0,0 +1,2 @@
1
+ export * from "./route-view-model.cjs";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/view-model/index.ts"],"names":[],"mappings":"AAAA,uCAAsC"}
@@ -1,2 +1,2 @@
1
- export * from './route-view-model.js';
1
+ export * from "./route-view-model.js";
2
2
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/view-model/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/view-model/index.ts"],"names":[],"mappings":"AAAA,sCAAsC"}
@@ -1 +1 @@
1
- export * from './route-view-model.js';
1
+ export * from "./route-view-model.js";
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RouteViewModel = void 0;
4
+ const mobx_1 = require("mobx");
5
+ const mobx_view_model_1 = require("mobx-view-model");
6
+ const index_js_1 = require("../core/index.cjs");
7
+ class RouteViewModel extends mobx_view_model_1.ViewModelBase {
8
+ constructor(params) {
9
+ super(params);
10
+ (0, mobx_view_model_1.applyObservable)(this, [
11
+ ['pathParams', mobx_1.computed.struct],
12
+ ['query', mobx_1.computed],
13
+ ], this.vmConfig.observable.viewModelStores);
14
+ }
15
+ get payload() {
16
+ if (this.route instanceof index_js_1.Route) {
17
+ return this.route.params || {};
18
+ }
19
+ if (this.route instanceof index_js_1.VirtualRoute) {
20
+ return this.route.params;
21
+ }
22
+ return {};
23
+ }
24
+ get query() {
25
+ if ('query' in this.route) {
26
+ return this.route.query;
27
+ }
28
+ return index_js_1.routeConfig.get().queryParams;
29
+ }
30
+ get pathParams() {
31
+ return this.payload;
32
+ }
33
+ get isMounted() {
34
+ return super.isMounted && this.route.isOpened;
35
+ }
36
+ }
37
+ exports.RouteViewModel = RouteViewModel;
@@ -0,0 +1,13 @@
1
+ import type { IQueryParams } from 'mobx-location-history';
2
+ import { ViewModelBase, type ViewModelParams } from 'mobx-view-model';
3
+ import type { EmptyObject } from 'yummies/utils/types';
4
+ import { type AnyAbstractRouteEntity, type RouteParams } from "../core/index.cjs";
5
+ export declare abstract class RouteViewModel<TRoute extends AnyAbstractRouteEntity = AnyAbstractRouteEntity> extends ViewModelBase<EmptyObject> {
6
+ abstract readonly route: TRoute;
7
+ constructor(params: ViewModelParams<EmptyObject, any>);
8
+ get payload(): RouteParams<TRoute>;
9
+ get query(): IQueryParams;
10
+ get pathParams(): RouteParams<TRoute>;
11
+ get isMounted(): boolean;
12
+ }
13
+ //# sourceMappingURL=route-view-model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route-view-model.d.ts","sourceRoot":"","sources":["../../src/view-model/route-view-model.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAEL,aAAa,EACb,KAAK,eAAe,EACrB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,EACL,KAAK,sBAAsB,EAE3B,KAAK,WAAW,EAGjB,0BAAyB;AAE1B,8BAAsB,cAAc,CAClC,MAAM,SAAS,sBAAsB,GAAG,sBAAsB,CAC9D,SAAQ,aAAa,CAAC,WAAW,CAAC;IAClC,QAAQ,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;gBAEpB,MAAM,EAAE,eAAe,CAAC,WAAW,EAAE,GAAG,CAAC;IAarD,IAAa,OAAO,IAAI,WAAW,CAAC,MAAM,CAAC,CAU1C;IAED,IAAI,KAAK,IAAI,YAAY,CAMxB;IAED,IAAI,UAAU,wBAEb;IAED,IAAI,SAAS,YAEZ;CACF"}
@@ -1,7 +1,7 @@
1
1
  import type { IQueryParams } from 'mobx-location-history';
2
2
  import { ViewModelBase, type ViewModelParams } from 'mobx-view-model';
3
3
  import type { EmptyObject } from 'yummies/utils/types';
4
- import { type AnyAbstractRouteEntity, type RouteParams } from '../core/index.js';
4
+ import { type AnyAbstractRouteEntity, type RouteParams } from "../core/index.js";
5
5
  export declare abstract class RouteViewModel<TRoute extends AnyAbstractRouteEntity = AnyAbstractRouteEntity> extends ViewModelBase<EmptyObject> {
6
6
  abstract readonly route: TRoute;
7
7
  constructor(params: ViewModelParams<EmptyObject, any>);
@@ -1 +1 @@
1
- {"version":3,"file":"route-view-model.d.ts","sourceRoot":"","sources":["../../src/view-model/route-view-model.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAEL,aAAa,EACb,KAAK,eAAe,EACrB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,EACL,KAAK,sBAAsB,EAE3B,KAAK,WAAW,EAGjB,MAAM,kBAAkB,CAAC;AAE1B,8BAAsB,cAAc,CAClC,MAAM,SAAS,sBAAsB,GAAG,sBAAsB,CAC9D,SAAQ,aAAa,CAAC,WAAW,CAAC;IAClC,QAAQ,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;gBAEpB,MAAM,EAAE,eAAe,CAAC,WAAW,EAAE,GAAG,CAAC;IAarD,IAAa,OAAO,IAAI,WAAW,CAAC,MAAM,CAAC,CAU1C;IAED,IAAI,KAAK,IAAI,YAAY,CAMxB;IAED,IAAI,UAAU,wBAEb;IAED,IAAI,SAAS,YAEZ;CACF"}
1
+ {"version":3,"file":"route-view-model.d.ts","sourceRoot":"","sources":["../../src/view-model/route-view-model.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAEL,aAAa,EACb,KAAK,eAAe,EACrB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,EACL,KAAK,sBAAsB,EAE3B,KAAK,WAAW,EAGjB,yBAAyB;AAE1B,8BAAsB,cAAc,CAClC,MAAM,SAAS,sBAAsB,GAAG,sBAAsB,CAC9D,SAAQ,aAAa,CAAC,WAAW,CAAC;IAClC,QAAQ,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;gBAEpB,MAAM,EAAE,eAAe,CAAC,WAAW,EAAE,GAAG,CAAC;IAarD,IAAa,OAAO,IAAI,WAAW,CAAC,MAAM,CAAC,CAU1C;IAED,IAAI,KAAK,IAAI,YAAY,CAMxB;IAED,IAAI,UAAU,wBAEb;IAED,IAAI,SAAS,YAEZ;CACF"}
@@ -1,6 +1,6 @@
1
1
  import { computed } from 'mobx';
2
2
  import { applyObservable, ViewModelBase, } from 'mobx-view-model';
3
- import { Route, routeConfig, VirtualRoute, } from '../core/index.js';
3
+ import { Route, routeConfig, VirtualRoute, } from "../core/index.js";
4
4
  export class RouteViewModel extends ViewModelBase {
5
5
  constructor(params) {
6
6
  super(params);
package/assets/logo.png DELETED
Binary file
package/assets/logo.pxz DELETED
Binary file
Binary file
@@ -1,19 +0,0 @@
1
- import { type History } from 'mobx-location-history';
2
- export declare const mockHistory: (history: History) => {
3
- spies: {
4
- push: import("vitest").MockInstance<(to: import("mobx-location-history").To, state?: any) => void>;
5
- replace: import("vitest").MockInstance<(to: import("mobx-location-history").To, state?: any) => void>;
6
- };
7
- clearMocks: () => void;
8
- action: import("mobx-location-history").Action;
9
- location: import("mobx-location-history").Location;
10
- createHref(to: import("mobx-location-history").To): string;
11
- push(to: import("mobx-location-history").To, state?: any): void;
12
- replace(to: import("mobx-location-history").To, state?: any): void;
13
- go(delta: number): void;
14
- back(): void;
15
- forward(): void;
16
- listen(listener: import("mobx-location-history").Listener): () => void;
17
- block(blocker: import("mobx-location-history").Blocker): () => void;
18
- };
19
- //# sourceMappingURL=route.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"route.test.d.ts","sourceRoot":"","sources":["../../../src/core/route/route.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,KAAK,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAS3E,eAAO,MAAM,WAAW,GAAI,SAAS,OAAO;;;;;;;;;;;;;;;;CAgB3C,CAAC"}
@@ -1,250 +0,0 @@
1
- import { createBrowserHistory } from 'mobx-location-history';
2
- import { beforeEach, describe, expect, expectTypeOf, it, vi } from 'vitest';
3
- import { routeConfig } from '../config/config.js';
4
- import { RouteGroup } from '../route-group/route-group.js';
5
- import { Route } from './route.js';
6
- export const mockHistory = (history) => {
7
- const spies = {
8
- push: vi.spyOn(history, 'push'),
9
- replace: vi.spyOn(history, 'replace'),
10
- };
11
- const clearMocks = () => {
12
- spies.push.mockClear();
13
- spies.replace.mockClear();
14
- };
15
- return {
16
- ...history,
17
- spies,
18
- clearMocks,
19
- };
20
- };
21
- describe('route', () => {
22
- const history = mockHistory(createBrowserHistory());
23
- routeConfig.update({
24
- history,
25
- });
26
- beforeEach(() => {
27
- history.clearMocks();
28
- });
29
- it('empty string', async () => {
30
- const route = new Route('');
31
- expect(route.isOpened).toBe(true);
32
- });
33
- it('/test', async () => {
34
- const route = new Route('/test');
35
- await route.open();
36
- expect(history.spies.push).toBeCalledWith('/test', null);
37
- });
38
- it('/test/:id/:bar{/:bar3}', async () => {
39
- const route = new Route('/test/:id/:bar{/:bar3}');
40
- await route.open({
41
- id: 1,
42
- bar: 'barg',
43
- });
44
- expect(history.spies.push).toBeCalledWith('/test/1/barg', null);
45
- expectTypeOf(route.open).toBeFunction();
46
- expectTypeOf(route.open).parameter(0).toEqualTypeOf();
47
- });
48
- it('/test/*splat', async () => {
49
- const route = new Route('/test/*splat');
50
- await route.open({
51
- splat: [1, 2, 3],
52
- });
53
- expect(history.spies.push).toBeCalledWith('/test/1/2/3', null);
54
- });
55
- it('/users{/:id}/delete', async () => {
56
- const route = new Route('/users{/:id}/delete');
57
- await route.open({
58
- id: 1,
59
- });
60
- expect(history.spies.push).toBeCalledWith('/users/1/delete', null);
61
- history.clearMocks();
62
- await route.open();
63
- expect(history.spies.push).toBeCalledWith('/users/delete', null);
64
- history.clearMocks();
65
- const childRoute = route.extend('/push/:id1{/:bar}');
66
- await childRoute.open({
67
- id1: 1,
68
- bar: 2,
69
- id: 3,
70
- });
71
- expect(history.spies.push).toBeCalledWith('/users/3/delete/push/1/2', null);
72
- });
73
- it('/posts{/:slug}/*rest', async () => {
74
- const route = new Route('/posts{/:slug}/*rest');
75
- await route.open({
76
- slug: true,
77
- rest: [1, 2, 3, 'bar'],
78
- });
79
- expect(history.spies.push).toBeCalledWith('/posts/true/1/2/3/bar', null);
80
- const otherRoute = new Route('/kek/pek');
81
- expect(otherRoute.isOpened).toBe(false);
82
- expect(route.isOpened).toBe(true);
83
- expect({
84
- path: route.currentPath,
85
- params: route.params,
86
- }).toEqual({
87
- path: '/posts/true/1/2/3/bar',
88
- params: {
89
- rest: ['1', '2', '3', 'bar'],
90
- slug: 'true',
91
- },
92
- });
93
- });
94
- it('/test/:id/:bar + baseUrl + query params', async () => {
95
- const route = new Route('/test/:id/:bar', { baseUrl: '/mobx-view-model' });
96
- await route.open({
97
- id: 1,
98
- bar: 'barg',
99
- }, {
100
- query: { a: 1 },
101
- });
102
- expect(history.spies.push).toBeCalledWith('/mobx-view-model/test/1/barg?a=1', null);
103
- expect(route.isOpened).toBe(true);
104
- });
105
- it('/test/:id/:bar + baseUrl + query params + (query params tests)', async () => {
106
- const route = new Route('/test/:id/:bar', { baseUrl: '/mobx-view-model' });
107
- await route.open({
108
- id: 1,
109
- bar: 'barg',
110
- }, {
111
- query: { a: 1 },
112
- });
113
- route.query.update({ a: 3, b: [1, 2, 3] });
114
- expect(location.search).toBe('?a=3&b=1%2C2%2C3');
115
- expect(route.query.data).toEqual({ a: '3', b: '1,2,3' });
116
- });
117
- it('hierarchy test', async () => {
118
- const routes = {
119
- private: new RouteGroup({
120
- index: new Route('/', { index: true }),
121
- techreview: new Route('/techreview'),
122
- techreviewTemplates: new Route('/techreview-templates'),
123
- employee: new Route('/employee'),
124
- matrices: new Route('/matrices'),
125
- orgstructure: new Route('/orgstructure'),
126
- roles: new RouteGroup({
127
- index: new Route('/roles', { index: true }),
128
- list: new Route('/roles/list'),
129
- create: new Route('/roles/create'),
130
- edit: new Route('/roles/edit/:id'),
131
- }),
132
- account: new Route('/account'),
133
- }),
134
- notFound: new Route('/not-found'),
135
- noAccess: new Route('/no-access'),
136
- login: new Route('/login'),
137
- };
138
- expect(routes.private.isOpened).toBe(false);
139
- expect(routes.private.routes.matrices.isOpened).toBe(false);
140
- history.push('/matrices', null);
141
- history.clearMocks();
142
- expect(routes.private.isOpened).toBe(true);
143
- expect(routes.private.routes.matrices.isOpened).toBe(true);
144
- expect(routes.private.routes.techreview.isOpened).toBe(false);
145
- await routes.private.routes.index.open();
146
- expect(routes.private.isOpened).toBe(true);
147
- expect(routes.private.routes.index.isOpened).toBe(true);
148
- expect(routes.private.routes.techreview.isOpened).toBe(false);
149
- expect(history.spies.push).toBeCalledWith('/', null);
150
- expect(location.href).toBe('http://localhost:3000/');
151
- history.clearMocks();
152
- });
153
- it('test with root paths (/, "")', async () => {
154
- const routes = {
155
- home: new Route('/'),
156
- root: new Route(''),
157
- projects: new RouteGroup({
158
- index: new Route('/projects', { index: true }),
159
- new: new Route('/projects/new'),
160
- details: new Route('/projects/:projectId'),
161
- }),
162
- };
163
- history.replace('/', null);
164
- expect(location.href).toBe('http://localhost:3000/');
165
- expect(routes.home.isOpened).toBe(true);
166
- expect(routes.root.isOpened).toBe(true);
167
- expect(routes.projects.routes.index.isOpened).toBe(false);
168
- });
169
- it('parent test', async () => {
170
- history.push('/a/b/c', null);
171
- const routeA = new Route('/a');
172
- const routeB = routeA.extend('/b');
173
- const routeC = routeB.extend('/c');
174
- expect(routeA.hasOpenedChildren).toBe(true);
175
- expect(routeB.hasOpenedChildren).toBe(true);
176
- expect(routeC.hasOpenedChildren).toBe(false);
177
- expect(routeA.isOpened).toBe(false);
178
- expect(routeB.isOpened).toBe(false);
179
- expect(routeC.isOpened).toBe(true);
180
- });
181
- it('test param typings (no options)', () => {
182
- const foo = new Route('/foo/:bar/:baz', {});
183
- expectTypeOf(foo.open).toBeFunction();
184
- expectTypeOf(foo.open)
185
- .parameter(0)
186
- .toEqualTypeOf();
187
- expectTypeOf(foo.params).toEqualTypeOf();
188
- expect(foo).toBeDefined();
189
- });
190
- it('test param typings (with options)', () => {
191
- const foo = new Route('/foo/:bar/:baz', {
192
- params: (_params) => {
193
- return {
194
- bad: 1,
195
- };
196
- },
197
- });
198
- expectTypeOf(foo.open).toBeFunction();
199
- expectTypeOf(foo.open)
200
- .parameter(0)
201
- .toEqualTypeOf();
202
- expectTypeOf(foo.params).toEqualTypeOf();
203
- expect(foo).toBeDefined();
204
- });
205
- it('test customized param typings', () => {
206
- const foo = new Route('/', {});
207
- expectTypeOf(foo.open).toBeFunction();
208
- expectTypeOf(foo.open)
209
- .parameter(0)
210
- .toEqualTypeOf();
211
- expectTypeOf(foo.params).toEqualTypeOf();
212
- expect(foo).toBeDefined();
213
- });
214
- it('test mergeQuery', async () => {
215
- const route = new Route('/foo/bar/baz');
216
- const route2 = new Route('/asdfdsafdsa');
217
- const route3 = new Route('/route3');
218
- await route.open(null, { query: { a: 1, b: 2, c: 3 } });
219
- expect(history.spies.push).toHaveBeenNthCalledWith(1, '/foo/bar/baz?a=1&b=2&c=3', null);
220
- expect(history.location.search).toBe('?a=1&b=2&c=3');
221
- await route2.open(null, {
222
- query: { c: 4, d: 4, e: 5, f: 6 },
223
- mergeQuery: true,
224
- });
225
- expect(history.spies.push).toHaveBeenNthCalledWith(2, '/asdfdsafdsa?a=1&b=2&c=4&d=4&e=5&f=6', null);
226
- expect(history.location.search).toBe('?a=1&b=2&c=4&d=4&e=5&f=6');
227
- expect(route2.query.data).toStrictEqual({
228
- a: '1',
229
- b: '2',
230
- c: '4',
231
- d: '4',
232
- e: '5',
233
- f: '6',
234
- });
235
- await route3.open(null, {
236
- mergeQuery: true,
237
- });
238
- expect(history.spies.push).toHaveBeenNthCalledWith(3, '/route3?a=1&b=2&c=4&d=4&e=5&f=6', null);
239
- expect(history.location.search).toBe('?a=1&b=2&c=4&d=4&e=5&f=6');
240
- expect(route3.query.data).toStrictEqual({
241
- a: '1',
242
- b: '2',
243
- c: '4',
244
- d: '4',
245
- e: '5',
246
- f: '6',
247
- });
248
- history.clearMocks();
249
- });
250
- });
@@ -1,3 +0,0 @@
1
- import type { RouteNavigateParams } from '../route/route.types.js';
2
- export declare const buildUrl: (url: string, navigateParams: RouteNavigateParams) => string;
3
- //# sourceMappingURL=build-url.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"build-url.d.ts","sourceRoot":"","sources":["../../../src/core/utils/build-url.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAEnE,eAAO,MAAM,QAAQ,GAAI,KAAK,MAAM,EAAE,gBAAgB,mBAAmB,WAYxE,CAAC"}
@@ -1,12 +0,0 @@
1
- import { buildSearchString } from 'mobx-location-history';
2
- import { routeConfig } from '../config/config.js';
3
- export const buildUrl = (url, navigateParams) => {
4
- const query = (navigateParams.mergeQuery ?? routeConfig.get().mergeQuery)
5
- ? {
6
- ...routeConfig.get().queryParams.data,
7
- ...navigateParams.query,
8
- }
9
- : (navigateParams.query ?? {});
10
- const [path] = url.split('?');
11
- return `${path}${buildSearchString(query)}`;
12
- };
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=route-view-group.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"route-view-group.test.d.ts","sourceRoot":"","sources":["../../../src/react/components/route-view-group.test.tsx"],"names":[],"mappings":""}
@@ -1,101 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { act, render } from '@testing-library/react';
3
- import { createBrowserHistory } from 'mobx-location-history';
4
- import { describe, expect, it } from 'vitest';
5
- import { Route, routeConfig } from '../../core/index.js';
6
- import { mockHistory } from '../../core/route/route.test.js';
7
- import { RouteView } from './route-view.js';
8
- import { RouteViewGroup } from './route-view-group.js';
9
- describe('<RouteViewGroup />', () => {
10
- it('Should render nothing when no one route is opened', async () => {
11
- const history = mockHistory(createBrowserHistory());
12
- routeConfig.update({
13
- history,
14
- });
15
- const route1 = new Route('/test1');
16
- const route2 = new Route('/test2');
17
- const route3 = new Route('/test3');
18
- const App = () => {
19
- return (_jsxs(RouteViewGroup, { children: [_jsx(RouteView, { route: route1, view: () => _jsx("div", { children: "route1" }) }), _jsx(RouteView, { route: route2, view: () => _jsx("div", { children: "route2" }) }), _jsx(RouteView, { route: route3, view: () => _jsx("div", { children: "route3" }) })] }));
20
- };
21
- const { container } = await act(async () => render(_jsx(App, {})));
22
- expect(container.firstChild).toBeNull();
23
- });
24
- it('Should render last non active element when no one route is opened', async () => {
25
- const history = mockHistory(createBrowserHistory());
26
- routeConfig.update({
27
- history,
28
- });
29
- const route1 = new Route('/test1');
30
- const route2 = new Route('/test2');
31
- const route3 = new Route('/test3');
32
- const App1 = () => {
33
- return (_jsxs(RouteViewGroup, { children: [_jsx(RouteView, { route: route1, view: () => _jsx("div", { children: "route1" }) }), _jsx(RouteView, { route: route2, view: () => _jsx("div", { children: "route2" }) }), _jsx(RouteView, { route: route3, view: () => _jsx("div", { children: "route3" }) }), _jsx("div", { children: "not_found1" })] }));
34
- };
35
- const screen1 = await act(async () => render(_jsx(App1, {})));
36
- expect(screen1.getByText('not_found1')).toBeDefined();
37
- });
38
- it('Should render active element when 1-order route is opened', async () => {
39
- const history = mockHistory(createBrowserHistory());
40
- routeConfig.update({
41
- history,
42
- });
43
- const route1 = new Route('/test1');
44
- const route2 = new Route('/test2');
45
- const route3 = new Route('/test3');
46
- const App1 = () => {
47
- return (_jsxs(RouteViewGroup, { children: [_jsx(RouteView, { route: route1, view: () => _jsx("div", { children: "route1" }) }), _jsx(RouteView, { route: route2, view: () => _jsx("div", { children: "route2" }) }), _jsx(RouteView, { route: route3, view: () => _jsx("div", { children: "route3" }) }), _jsx("div", { children: "not_found1" })] }));
48
- };
49
- await route1.open();
50
- const screen1 = await act(async () => render(_jsx(App1, {})));
51
- expect(screen1.getByText('route1')).toBeDefined();
52
- });
53
- it('Should render active element when 2-order route is opened', async () => {
54
- const history = mockHistory(createBrowserHistory());
55
- routeConfig.update({
56
- history,
57
- });
58
- const route1 = new Route('/test1');
59
- const route2 = new Route('/test2');
60
- const route3 = new Route('/test3');
61
- const App1 = () => {
62
- return (_jsxs(RouteViewGroup, { children: [_jsx(RouteView, { route: route1, view: () => _jsx("div", { children: "route1" }) }), _jsx(RouteView, { route: route2, view: () => _jsx("div", { children: "route2" }) }), _jsx(RouteView, { route: route3, view: () => _jsx("div", { children: "route3" }) }), _jsx("div", { children: "not_found1" })] }));
63
- };
64
- await route2.open();
65
- const screen1 = await act(async () => render(_jsx(App1, {})));
66
- expect(screen1.getByText('route2')).toBeDefined();
67
- });
68
- it('Should render active element when 3-order route is opened', async () => {
69
- const history = mockHistory(createBrowserHistory());
70
- routeConfig.update({
71
- history,
72
- });
73
- const route1 = new Route('/test1');
74
- const route2 = new Route('/test2');
75
- const route3 = new Route('/test3');
76
- const App1 = () => {
77
- return (_jsxs(RouteViewGroup, { children: [_jsx(RouteView, { route: route1, view: () => _jsx("div", { children: "route1" }) }), _jsx(RouteView, { route: route2, view: () => _jsx("div", { children: "route2" }) }), _jsx(RouteView, { route: route3, view: () => _jsx("div", { children: "route3" }) }), _jsx("div", { children: "not_found1" })] }));
78
- };
79
- await route3.open();
80
- const screen1 = await act(async () => render(_jsx(App1, {})));
81
- expect(screen1.getByText('route3')).toBeDefined();
82
- });
83
- it('Should render element of LAST OPENED route', async () => {
84
- const history = mockHistory(createBrowserHistory());
85
- routeConfig.update({
86
- history,
87
- });
88
- const route1 = new Route('/test');
89
- const route2 = new Route('/test');
90
- const route3 = new Route('/test');
91
- const App1 = () => {
92
- return (_jsxs(RouteViewGroup, { children: [_jsx(RouteView, { route: route1, view: () => _jsx("div", { children: "route1" }) }), _jsx(RouteView, { route: route2, view: () => _jsx("div", { children: "route2" }) }), _jsx(RouteView, { route: route3, view: () => _jsx("div", { children: "route3" }) }), _jsx("div", { children: "not_found1" })] }));
93
- };
94
- await route3.open();
95
- const screen1 = await act(async () => render(_jsx(App1, {})));
96
- expect(screen1.getByText('route1')).toBeDefined();
97
- expect(() => screen1.getByText('route2')).toThrowError();
98
- expect(() => screen1.getByText('route3')).toThrowError();
99
- expect(() => screen1.getByText('not_found1')).toThrowError();
100
- });
101
- });