@tramvai/module-router 2.70.0 → 2.72.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.
Files changed (91) hide show
  1. package/lib/components/link.browser.js +55 -0
  2. package/lib/components/link.es.js +49 -0
  3. package/lib/components/link.js +53 -0
  4. package/lib/hooks/usePageService.browser.js +10 -0
  5. package/lib/hooks/usePageService.es.js +10 -0
  6. package/lib/hooks/usePageService.js +14 -0
  7. package/lib/hooks/usePrefetch.browser.browser.js +42 -0
  8. package/lib/index.browser.js +7 -906
  9. package/lib/index.es.js +6 -764
  10. package/lib/index.js +34 -788
  11. package/lib/modules/child-app.browser.js +31 -0
  12. package/lib/modules/child-app.es.js +31 -0
  13. package/lib/modules/child-app.js +33 -0
  14. package/lib/modules/clientCommon.browser.js +70 -0
  15. package/lib/modules/common.browser.js +137 -0
  16. package/lib/modules/common.es.js +137 -0
  17. package/lib/modules/common.js +145 -0
  18. package/lib/modules/fileSystemPages.browser.js +27 -0
  19. package/lib/modules/fileSystemPages.es.js +27 -0
  20. package/lib/modules/fileSystemPages.js +31 -0
  21. package/lib/modules/guards/common/index.browser.js +32 -0
  22. package/lib/modules/guards/common/index.es.js +32 -0
  23. package/lib/modules/guards/common/index.js +36 -0
  24. package/lib/modules/guards/common/internalError.browser.js +14 -0
  25. package/lib/modules/guards/common/internalError.es.js +14 -0
  26. package/lib/modules/guards/common/internalError.js +18 -0
  27. package/lib/modules/guards/common/loadBundle.browser.js +67 -0
  28. package/lib/modules/guards/common/loadBundle.es.js +67 -0
  29. package/lib/modules/guards/common/loadBundle.js +75 -0
  30. package/lib/modules/guards/server/httpMethod.es.js +20 -0
  31. package/lib/modules/guards/server/httpMethod.js +24 -0
  32. package/lib/modules/guards/server/index.es.js +18 -0
  33. package/lib/modules/guards/server/index.js +22 -0
  34. package/lib/modules/hooks/common/fillRouterStore.browser.js +9 -0
  35. package/lib/modules/hooks/common/fillRouterStore.es.js +9 -0
  36. package/lib/modules/hooks/common/fillRouterStore.js +13 -0
  37. package/lib/modules/hooks/common/index.browser.js +16 -0
  38. package/lib/modules/hooks/common/index.es.js +16 -0
  39. package/lib/modules/hooks/common/index.js +20 -0
  40. package/lib/modules/hooks/runActions.browser.js +34 -0
  41. package/lib/modules/hooks/runActions.es.js +34 -0
  42. package/lib/modules/hooks/runActions.js +42 -0
  43. package/lib/modules/hooks/server/httpStatus.es.js +7 -0
  44. package/lib/modules/hooks/server/httpStatus.js +11 -0
  45. package/lib/modules/hooks/server/index.es.js +17 -0
  46. package/lib/modules/hooks/server/index.js +21 -0
  47. package/lib/modules/hooks/spa/index.browser.js +70 -0
  48. package/lib/modules/hooks/spa/runCommands.browser.js +12 -0
  49. package/lib/modules/no-spa.browser.js +21 -0
  50. package/lib/modules/server.es.js +59 -0
  51. package/lib/modules/server.js +63 -0
  52. package/lib/modules/spa.browser.js +23 -0
  53. package/lib/modules/tokens/browser/index.browser.js +5 -0
  54. package/lib/modules/tokens/browser/prefetch.browser.js +112 -0
  55. package/lib/modules/tokens/common/index.browser.js +40 -0
  56. package/lib/modules/tokens/common/index.es.js +40 -0
  57. package/lib/modules/tokens/common/index.js +44 -0
  58. package/lib/modules/tokens/common/render.browser.js +14 -0
  59. package/lib/modules/tokens/common/render.es.js +14 -0
  60. package/lib/modules/tokens/common/render.js +18 -0
  61. package/lib/modules/tokens/common/routeNormalize.browser.js +10 -0
  62. package/lib/modules/tokens/common/routeNormalize.es.js +10 -0
  63. package/lib/modules/tokens/common/routeNormalize.js +18 -0
  64. package/lib/modules/tokens/common/routeSetDefaults.browser.js +13 -0
  65. package/lib/modules/tokens/common/routeSetDefaults.es.js +13 -0
  66. package/lib/modules/tokens/common/routeSetDefaults.js +17 -0
  67. package/lib/modules/tokens/common/routeTransform.browser.js +12 -0
  68. package/lib/modules/tokens/common/routeTransform.es.js +12 -0
  69. package/lib/modules/tokens/common/routeTransform.js +22 -0
  70. package/lib/modules/tokens/server/bundleInfo.es.js +35 -0
  71. package/lib/modules/tokens/server/bundleInfo.js +44 -0
  72. package/lib/modules/tokens/server/index.es.js +25 -0
  73. package/lib/modules/tokens/server/index.js +29 -0
  74. package/lib/modules/tokens/server/prefetch.es.js +15 -0
  75. package/lib/modules/tokens/server/prefetch.js +19 -0
  76. package/lib/modules/tokens/server/routerOptions.es.js +37 -0
  77. package/lib/modules/tokens/server/routerOptions.js +41 -0
  78. package/lib/modules/tokens.browser.js +22 -0
  79. package/lib/modules/tokens.es.js +22 -0
  80. package/lib/modules/tokens.js +35 -0
  81. package/lib/modules/utils/forRoot.browser.js +22 -0
  82. package/lib/modules/utils/forRoot.es.js +22 -0
  83. package/lib/modules/utils/forRoot.js +26 -0
  84. package/lib/services/page.browser.js +63 -0
  85. package/lib/services/page.es.js +63 -0
  86. package/lib/services/page.js +67 -0
  87. package/lib/stores/RouterStore.browser.js +29 -0
  88. package/lib/stores/RouterStore.es.js +29 -0
  89. package/lib/stores/RouterStore.js +35 -0
  90. package/lib/utils/requestIdleCallback.browser.js +10 -0
  91. package/package.json +22 -23
@@ -0,0 +1,11 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ const httpStatus = ({ responseManager }) => async ({ to }) => {
6
+ if (to === null || to === void 0 ? void 0 : to.config.httpStatus) {
7
+ responseManager.setStatus(to.config.httpStatus);
8
+ }
9
+ };
10
+
11
+ exports.httpStatus = httpStatus;
@@ -0,0 +1,17 @@
1
+ import { RESPONSE_MANAGER_TOKEN } from '@tramvai/tokens-common';
2
+ import { afterNavigateHooksToken } from '../../tokens.es.js';
3
+ import { httpStatus } from './httpStatus.es.js';
4
+
5
+ const serverHooks = [
6
+ {
7
+ provide: afterNavigateHooksToken,
8
+ multi: true,
9
+ // проставляет httpStatus если задан в текущем роуте
10
+ useFactory: httpStatus,
11
+ deps: {
12
+ responseManager: RESPONSE_MANAGER_TOKEN,
13
+ },
14
+ },
15
+ ];
16
+
17
+ export { serverHooks };
@@ -0,0 +1,21 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var tokensCommon = require('@tramvai/tokens-common');
6
+ var tokens = require('../../tokens.js');
7
+ var httpStatus = require('./httpStatus.js');
8
+
9
+ const serverHooks = [
10
+ {
11
+ provide: tokens.afterNavigateHooksToken,
12
+ multi: true,
13
+ // проставляет httpStatus если задан в текущем роуте
14
+ useFactory: httpStatus.httpStatus,
15
+ deps: {
16
+ responseManager: tokensCommon.RESPONSE_MANAGER_TOKEN,
17
+ },
18
+ },
19
+ ];
20
+
21
+ exports.serverHooks = serverHooks;
@@ -0,0 +1,70 @@
1
+ import noop from '@tinkoff/utils/function/noop';
2
+ import { DI_TOKEN, COMMAND_LINE_RUNNER_TOKEN, commandLineListTokens } from '@tramvai/core';
3
+ import { ROUTER_TOKEN, ROUTER_SPA_ACTIONS_RUN_MODE_TOKEN } from '@tramvai/tokens-router';
4
+ import { STORE_TOKEN, ACTION_REGISTRY_TOKEN, ACTION_PAGE_RUNNER_TOKEN } from '@tramvai/tokens-common';
5
+ import { beforeNavigateHooksToken, afterNavigateHooksToken } from '../../tokens.browser.js';
6
+ import { runCommandsSpa, runCommandsAfterSpa } from './runCommands.browser.js';
7
+ import { runActionsFactory } from '../runActions.browser.js';
8
+
9
+ const spaHooks = [
10
+ {
11
+ provide: beforeNavigateHooksToken,
12
+ multi: true,
13
+ useFactory: runCommandsSpa,
14
+ deps: {
15
+ di: DI_TOKEN,
16
+ commandLineRunner: COMMAND_LINE_RUNNER_TOKEN,
17
+ },
18
+ },
19
+ {
20
+ provide: afterNavigateHooksToken,
21
+ multi: true,
22
+ useFactory: runCommandsAfterSpa,
23
+ deps: {
24
+ di: DI_TOKEN,
25
+ commandLineRunner: COMMAND_LINE_RUNNER_TOKEN,
26
+ },
27
+ },
28
+ {
29
+ provide: commandLineListTokens.spaTransition,
30
+ multi: true,
31
+ useFactory: ({ spaMode, ...deps }) => {
32
+ if (spaMode !== 'after') {
33
+ return runActionsFactory(deps);
34
+ }
35
+ return noop;
36
+ },
37
+ deps: {
38
+ store: STORE_TOKEN,
39
+ router: ROUTER_TOKEN,
40
+ actionRegistry: ACTION_REGISTRY_TOKEN,
41
+ actionPageRunner: ACTION_PAGE_RUNNER_TOKEN,
42
+ spaMode: {
43
+ token: ROUTER_SPA_ACTIONS_RUN_MODE_TOKEN,
44
+ optional: true,
45
+ },
46
+ },
47
+ },
48
+ {
49
+ provide: commandLineListTokens.afterSpaTransition,
50
+ multi: true,
51
+ useFactory: ({ spaMode, ...deps }) => {
52
+ if (spaMode === 'after') {
53
+ return runActionsFactory(deps);
54
+ }
55
+ return noop;
56
+ },
57
+ deps: {
58
+ store: STORE_TOKEN,
59
+ router: ROUTER_TOKEN,
60
+ actionRegistry: ACTION_REGISTRY_TOKEN,
61
+ actionPageRunner: ACTION_PAGE_RUNNER_TOKEN,
62
+ spaMode: {
63
+ token: ROUTER_SPA_ACTIONS_RUN_MODE_TOKEN,
64
+ optional: true,
65
+ },
66
+ },
67
+ },
68
+ ];
69
+
70
+ export { spaHooks };
@@ -0,0 +1,12 @@
1
+ const runCommandsSpa = ({ commandLineRunner, di, }) => {
2
+ return async () => {
3
+ await commandLineRunner.run('client', 'spa', [], di);
4
+ };
5
+ };
6
+ const runCommandsAfterSpa = ({ commandLineRunner, di, }) => {
7
+ return async () => {
8
+ await commandLineRunner.run('client', 'afterSpa', [], di);
9
+ };
10
+ };
11
+
12
+ export { runCommandsAfterSpa, runCommandsSpa };
@@ -0,0 +1,21 @@
1
+ import { Module } from '@tramvai/core';
2
+ import { NoSpaRouter } from '@tinkoff/router';
3
+ import { providers } from './clientCommon.browser.js';
4
+ import { generateForRoot } from './utils/forRoot.browser.js';
5
+ import { routerClassToken } from './tokens.browser.js';
6
+
7
+ var _a;
8
+ const NoSpaRouterModule = /* @__PURE__ */ Module({
9
+ providers: [
10
+ ...providers,
11
+ {
12
+ provide: routerClassToken,
13
+ useValue: NoSpaRouter,
14
+ },
15
+ ],
16
+ })((_a = class NoSpaRouterModule {
17
+ },
18
+ _a.forRoot = generateForRoot(_a),
19
+ _a));
20
+
21
+ export { NoSpaRouterModule };
@@ -0,0 +1,59 @@
1
+ import { __decorate } from 'tslib';
2
+ import { Module, commandLineListTokens } from '@tramvai/core';
3
+ import { Router } from '@tinkoff/router';
4
+ import { REQUEST_MANAGER_TOKEN, STORE_TOKEN, ACTION_REGISTRY_TOKEN, ACTION_PAGE_RUNNER_TOKEN } from '@tramvai/tokens-common';
5
+ import { ROUTER_TOKEN } from '@tramvai/tokens-router';
6
+ import { providers } from './common.es.js';
7
+ import { routerClassToken } from './tokens.es.js';
8
+ import { serverGuards } from './guards/server/index.es.js';
9
+ import { runActionsFactory } from './hooks/runActions.es.js';
10
+ import { serverHooks } from './hooks/server/index.es.js';
11
+ import { serverTokens } from './tokens/server/index.es.js';
12
+ import { generateForRoot } from './utils/forRoot.es.js';
13
+
14
+ var NoSpaRouterModule_1;
15
+ let NoSpaRouterModule = NoSpaRouterModule_1 = class NoSpaRouterModule {
16
+ };
17
+ NoSpaRouterModule.forRoot = generateForRoot(NoSpaRouterModule_1);
18
+ NoSpaRouterModule = NoSpaRouterModule_1 = __decorate([
19
+ Module({
20
+ providers: [
21
+ ...providers,
22
+ ...serverGuards,
23
+ ...serverHooks,
24
+ ...serverTokens,
25
+ {
26
+ provide: routerClassToken,
27
+ useValue: Router,
28
+ },
29
+ {
30
+ provide: commandLineListTokens.resolveUserDeps,
31
+ multi: true,
32
+ useFactory: ({ router, requestManager }) => {
33
+ return function routerInit() {
34
+ return router.navigate(requestManager.getUrl());
35
+ };
36
+ },
37
+ deps: {
38
+ router: ROUTER_TOKEN,
39
+ requestManager: REQUEST_MANAGER_TOKEN,
40
+ },
41
+ },
42
+ {
43
+ // запускаем экшены отдельно от самого роутинга, чтобы распараллелить задачи
44
+ provide: commandLineListTokens.resolvePageDeps,
45
+ multi: true,
46
+ useFactory: runActionsFactory,
47
+ deps: {
48
+ store: STORE_TOKEN,
49
+ router: ROUTER_TOKEN,
50
+ actionRegistry: ACTION_REGISTRY_TOKEN,
51
+ actionPageRunner: ACTION_PAGE_RUNNER_TOKEN,
52
+ },
53
+ },
54
+ ],
55
+ })
56
+ ], NoSpaRouterModule);
57
+ const SpaRouterModule = NoSpaRouterModule;
58
+
59
+ export { NoSpaRouterModule, SpaRouterModule };
@@ -0,0 +1,63 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var tslib = require('tslib');
6
+ var core = require('@tramvai/core');
7
+ var router = require('@tinkoff/router');
8
+ var tokensCommon = require('@tramvai/tokens-common');
9
+ var tokensRouter = require('@tramvai/tokens-router');
10
+ var common = require('./common.js');
11
+ var tokens = require('./tokens.js');
12
+ var index = require('./guards/server/index.js');
13
+ var runActions = require('./hooks/runActions.js');
14
+ var index$1 = require('./hooks/server/index.js');
15
+ var index$2 = require('./tokens/server/index.js');
16
+ var forRoot = require('./utils/forRoot.js');
17
+
18
+ var NoSpaRouterModule_1;
19
+ exports.NoSpaRouterModule = NoSpaRouterModule_1 = class NoSpaRouterModule {
20
+ };
21
+ exports.NoSpaRouterModule.forRoot = forRoot.generateForRoot(NoSpaRouterModule_1);
22
+ exports.NoSpaRouterModule = NoSpaRouterModule_1 = tslib.__decorate([
23
+ core.Module({
24
+ providers: [
25
+ ...common.providers,
26
+ ...index.serverGuards,
27
+ ...index$1.serverHooks,
28
+ ...index$2.serverTokens,
29
+ {
30
+ provide: tokens.routerClassToken,
31
+ useValue: router.Router,
32
+ },
33
+ {
34
+ provide: core.commandLineListTokens.resolveUserDeps,
35
+ multi: true,
36
+ useFactory: ({ router, requestManager }) => {
37
+ return function routerInit() {
38
+ return router.navigate(requestManager.getUrl());
39
+ };
40
+ },
41
+ deps: {
42
+ router: tokensRouter.ROUTER_TOKEN,
43
+ requestManager: tokensCommon.REQUEST_MANAGER_TOKEN,
44
+ },
45
+ },
46
+ {
47
+ // запускаем экшены отдельно от самого роутинга, чтобы распараллелить задачи
48
+ provide: core.commandLineListTokens.resolvePageDeps,
49
+ multi: true,
50
+ useFactory: runActions.runActionsFactory,
51
+ deps: {
52
+ store: tokensCommon.STORE_TOKEN,
53
+ router: tokensRouter.ROUTER_TOKEN,
54
+ actionRegistry: tokensCommon.ACTION_REGISTRY_TOKEN,
55
+ actionPageRunner: tokensCommon.ACTION_PAGE_RUNNER_TOKEN,
56
+ },
57
+ },
58
+ ],
59
+ })
60
+ ], exports.NoSpaRouterModule);
61
+ const SpaRouterModule = exports.NoSpaRouterModule;
62
+
63
+ exports.SpaRouterModule = SpaRouterModule;
@@ -0,0 +1,23 @@
1
+ import { Module } from '@tramvai/core';
2
+ import { Router } from '@tinkoff/router';
3
+ import { providers } from './clientCommon.browser.js';
4
+ import { routerClassToken } from './tokens.browser.js';
5
+ import { spaHooks } from './hooks/spa/index.browser.js';
6
+ import { generateForRoot } from './utils/forRoot.browser.js';
7
+
8
+ var _a;
9
+ const SpaRouterModule = /* @__PURE__ */ Module({
10
+ providers: [
11
+ ...providers,
12
+ ...spaHooks,
13
+ {
14
+ provide: routerClassToken,
15
+ useValue: Router,
16
+ },
17
+ ],
18
+ })((_a = class SpaRouterModule {
19
+ },
20
+ _a.forRoot = generateForRoot(_a),
21
+ _a));
22
+
23
+ export { SpaRouterModule };
@@ -0,0 +1,5 @@
1
+ import { prefetchProviders } from './prefetch.browser.js';
2
+
3
+ const clientTokens = [...prefetchProviders];
4
+
5
+ export { clientTokens };
@@ -0,0 +1,112 @@
1
+ import { createToken, provide } from '@tramvai/core';
2
+ import { COMPONENT_REGISTRY_TOKEN, BUNDLE_MANAGER_TOKEN, LOGGER_TOKEN } from '@tramvai/tokens-common';
3
+ import { LINK_PREFETCH_MANAGER_TOKEN, ROUTER_TOKEN, ROUTE_RESOLVE_TOKEN } from '@tramvai/tokens-router';
4
+ import { addQuery } from '@tinkoff/url';
5
+ import { resolveLazyComponent } from '@tramvai/react';
6
+ import { isFileSystemPageComponent } from '@tramvai/experiments';
7
+ import { routeTransformToken } from '../../tokens.browser.js';
8
+
9
+ const PREFETCHED_LINKS_CACHE_TOKEN = createToken();
10
+ const PREFETCHED_LINKS_QUEUE_TOKEN = createToken();
11
+ const prefetchProviders = [
12
+ provide({
13
+ provide: PREFETCHED_LINKS_CACHE_TOKEN,
14
+ useValue: new Set(),
15
+ }),
16
+ provide({
17
+ provide: PREFETCHED_LINKS_QUEUE_TOKEN,
18
+ useFactory: () => {
19
+ let queue = Promise.resolve();
20
+ return {
21
+ add(run) {
22
+ queue = queue.then(run);
23
+ return queue;
24
+ },
25
+ };
26
+ },
27
+ }),
28
+ provide({
29
+ provide: LINK_PREFETCH_MANAGER_TOKEN,
30
+ useFactory: ({ router, routeTransform, routeResolve, componentRegistry, bundleManager, logger, prefetchedLinksCache, prefetchedLinksQueue, }) => {
31
+ const log = logger('link-prefetch-manager');
32
+ const prefetch = async (url) => {
33
+ // prefetch needed for cache assets by browser, so we want to prefetch resources for any page only once.
34
+ // cache will work only for SPA-router, but anyway resources loading deduplication logic already included in @loadable
35
+ if (prefetchedLinksCache.has(url)) {
36
+ return;
37
+ }
38
+ prefetchedLinksCache.add(url);
39
+ log.info({ event: 'prefetch-route-init', url });
40
+ // first, try to find static or resolved dynamic route
41
+ let route = router.resolve(url);
42
+ // if route not found, try to resolve dynamic route,
43
+ // logic from `ROUTER_TOKEN` provider factory, without `router.addRoute` method call
44
+ if (!route && routeResolve) {
45
+ // add query `prefetchRoute` to indicate to any `routeResolve` implementation
46
+ // that this route request no need to be cached or have any personalization
47
+ const parsedUrl = addQuery(url, { prefetchRoute: 'true' });
48
+ route = await routeResolve({
49
+ url: parsedUrl,
50
+ type: 'navigate',
51
+ });
52
+ if (route) {
53
+ route = routeTransform(route);
54
+ }
55
+ }
56
+ if (!route) {
57
+ log.info({ event: 'prefetch-route-not-found', url });
58
+ return;
59
+ }
60
+ // @todo: очередь запросов!
61
+ // get name of everything what we need to prefetch,
62
+ // @loadable will load all scripts and styles for us
63
+ const { config: { pageComponent, bundle, nestedLayoutComponent }, } = route;
64
+ const promises = [];
65
+ // no need for bundle and page component actions amd reducers initialization,
66
+ // so copy only part of `modules/guards/common/loadBundle.ts` logic,
67
+ // all relative assets will be fetched
68
+ if (bundleManager.has(bundle, pageComponent)) {
69
+ promises.push(bundleManager.get(bundle, pageComponent));
70
+ }
71
+ // no need for nestedLayoutComponent actions amd reducers initialization,
72
+ // so copy only part of `modules/guards/common/loadBundle.ts` logic,
73
+ // all relative assets will be fetched
74
+ if (nestedLayoutComponent) {
75
+ promises.push(resolveLazyComponent(componentRegistry.get(nestedLayoutComponent, isFileSystemPageComponent(pageComponent) ? '__default' : bundle)));
76
+ }
77
+ await Promise.all(promises)
78
+ .then(() => {
79
+ log.info({ event: 'prefetch-route-success', url });
80
+ })
81
+ .catch((error) => {
82
+ log.warn({
83
+ event: 'prefetch-fail',
84
+ url,
85
+ error,
86
+ });
87
+ });
88
+ };
89
+ return {
90
+ prefetch: (url) => {
91
+ // fetch assets sequentially
92
+ return prefetchedLinksQueue.add(() => prefetch(url));
93
+ },
94
+ };
95
+ },
96
+ deps: {
97
+ router: ROUTER_TOKEN,
98
+ routeTransform: routeTransformToken,
99
+ routeResolve: {
100
+ token: ROUTE_RESOLVE_TOKEN,
101
+ optional: true,
102
+ },
103
+ componentRegistry: COMPONENT_REGISTRY_TOKEN,
104
+ bundleManager: BUNDLE_MANAGER_TOKEN,
105
+ logger: LOGGER_TOKEN,
106
+ prefetchedLinksCache: PREFETCHED_LINKS_CACHE_TOKEN,
107
+ prefetchedLinksQueue: PREFETCHED_LINKS_QUEUE_TOKEN,
108
+ },
109
+ }),
110
+ ];
111
+
112
+ export { prefetchProviders };
@@ -0,0 +1,40 @@
1
+ import { ROUTE_TRANSFORM_TOKEN, ROUTER_TOKEN } from '@tramvai/tokens-router';
2
+ import { EXTEND_RENDER } from '@tramvai/tokens-render';
3
+ import { routeTransformToken } from '../../tokens.browser.js';
4
+ import { routeTransform } from './routeTransform.browser.js';
5
+ import { routeSetDefaults } from './routeSetDefaults.browser.js';
6
+ import { routeNormalize } from './routeNormalize.browser.js';
7
+ import { provideRouter } from './render.browser.js';
8
+
9
+ const commonTokens = [
10
+ {
11
+ provide: routeTransformToken,
12
+ useFactory: routeTransform,
13
+ deps: {
14
+ transformers: {
15
+ token: ROUTE_TRANSFORM_TOKEN,
16
+ optional: true,
17
+ },
18
+ },
19
+ },
20
+ {
21
+ provide: ROUTE_TRANSFORM_TOKEN,
22
+ multi: true,
23
+ useValue: routeSetDefaults,
24
+ },
25
+ {
26
+ provide: ROUTE_TRANSFORM_TOKEN,
27
+ multi: true,
28
+ useValue: routeNormalize,
29
+ },
30
+ {
31
+ provide: EXTEND_RENDER,
32
+ multi: true,
33
+ useFactory: provideRouter,
34
+ deps: {
35
+ router: ROUTER_TOKEN,
36
+ },
37
+ },
38
+ ];
39
+
40
+ export { commonTokens };
@@ -0,0 +1,40 @@
1
+ import { ROUTE_TRANSFORM_TOKEN, ROUTER_TOKEN } from '@tramvai/tokens-router';
2
+ import { EXTEND_RENDER } from '@tramvai/tokens-render';
3
+ import { routeTransformToken } from '../../tokens.es.js';
4
+ import { routeTransform } from './routeTransform.es.js';
5
+ import { routeSetDefaults } from './routeSetDefaults.es.js';
6
+ import { routeNormalize } from './routeNormalize.es.js';
7
+ import { provideRouter } from './render.es.js';
8
+
9
+ const commonTokens = [
10
+ {
11
+ provide: routeTransformToken,
12
+ useFactory: routeTransform,
13
+ deps: {
14
+ transformers: {
15
+ token: ROUTE_TRANSFORM_TOKEN,
16
+ optional: true,
17
+ },
18
+ },
19
+ },
20
+ {
21
+ provide: ROUTE_TRANSFORM_TOKEN,
22
+ multi: true,
23
+ useValue: routeSetDefaults,
24
+ },
25
+ {
26
+ provide: ROUTE_TRANSFORM_TOKEN,
27
+ multi: true,
28
+ useValue: routeNormalize,
29
+ },
30
+ {
31
+ provide: EXTEND_RENDER,
32
+ multi: true,
33
+ useFactory: provideRouter,
34
+ deps: {
35
+ router: ROUTER_TOKEN,
36
+ },
37
+ },
38
+ ];
39
+
40
+ export { commonTokens };
@@ -0,0 +1,44 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var tokensRouter = require('@tramvai/tokens-router');
6
+ var tokensRender = require('@tramvai/tokens-render');
7
+ var tokens = require('../../tokens.js');
8
+ var routeTransform = require('./routeTransform.js');
9
+ var routeSetDefaults = require('./routeSetDefaults.js');
10
+ var routeNormalize = require('./routeNormalize.js');
11
+ var render = require('./render.js');
12
+
13
+ const commonTokens = [
14
+ {
15
+ provide: tokens.routeTransformToken,
16
+ useFactory: routeTransform.routeTransform,
17
+ deps: {
18
+ transformers: {
19
+ token: tokensRouter.ROUTE_TRANSFORM_TOKEN,
20
+ optional: true,
21
+ },
22
+ },
23
+ },
24
+ {
25
+ provide: tokensRouter.ROUTE_TRANSFORM_TOKEN,
26
+ multi: true,
27
+ useValue: routeSetDefaults.routeSetDefaults,
28
+ },
29
+ {
30
+ provide: tokensRouter.ROUTE_TRANSFORM_TOKEN,
31
+ multi: true,
32
+ useValue: routeNormalize.routeNormalize,
33
+ },
34
+ {
35
+ provide: tokensRender.EXTEND_RENDER,
36
+ multi: true,
37
+ useFactory: render.provideRouter,
38
+ deps: {
39
+ router: tokensRouter.ROUTER_TOKEN,
40
+ },
41
+ },
42
+ ];
43
+
44
+ exports.commonTokens = commonTokens;
@@ -0,0 +1,14 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { Provider } from '@tinkoff/router';
3
+
4
+ const provideRouter = ({ router }) => {
5
+ const serverState = {
6
+ currentRoute: router.getCurrentRoute(),
7
+ currentUrl: router.getCurrentUrl(),
8
+ };
9
+ return (render) => {
10
+ return (jsx(Provider, { router: router, serverState: serverState, children: render }));
11
+ };
12
+ };
13
+
14
+ export { provideRouter };
@@ -0,0 +1,14 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { Provider } from '@tinkoff/router';
3
+
4
+ const provideRouter = ({ router }) => {
5
+ const serverState = {
6
+ currentRoute: router.getCurrentRoute(),
7
+ currentUrl: router.getCurrentUrl(),
8
+ };
9
+ return (render) => {
10
+ return (jsx(Provider, { router: router, serverState: serverState, children: render }));
11
+ };
12
+ };
13
+
14
+ export { provideRouter };
@@ -0,0 +1,18 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var jsxRuntime = require('react/jsx-runtime');
6
+ var router = require('@tinkoff/router');
7
+
8
+ const provideRouter = ({ router: router$1 }) => {
9
+ const serverState = {
10
+ currentRoute: router$1.getCurrentRoute(),
11
+ currentUrl: router$1.getCurrentUrl(),
12
+ };
13
+ return (render) => {
14
+ return (jsxRuntime.jsx(router.Provider, { router: router$1, serverState: serverState, children: render }));
15
+ };
16
+ };
17
+
18
+ exports.provideRouter = provideRouter;
@@ -0,0 +1,10 @@
1
+ import replace from '@tinkoff/utils/string/replace';
2
+
3
+ const routeNormalize = (route) => {
4
+ return {
5
+ ...route,
6
+ path: replace(/\/?$/, '/', route.path),
7
+ };
8
+ };
9
+
10
+ export { routeNormalize };
@@ -0,0 +1,10 @@
1
+ import replace from '@tinkoff/utils/string/replace';
2
+
3
+ const routeNormalize = (route) => {
4
+ return {
5
+ ...route,
6
+ path: replace(/\/?$/, '/', route.path),
7
+ };
8
+ };
9
+
10
+ export { routeNormalize };
@@ -0,0 +1,18 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var replace = require('@tinkoff/utils/string/replace');
6
+
7
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
8
+
9
+ var replace__default = /*#__PURE__*/_interopDefaultLegacy(replace);
10
+
11
+ const routeNormalize = (route) => {
12
+ return {
13
+ ...route,
14
+ path: replace__default["default"](/\/?$/, '/', route.path),
15
+ };
16
+ };
17
+
18
+ exports.routeNormalize = routeNormalize;
@@ -0,0 +1,13 @@
1
+ const routeSetDefaults = (route) => {
2
+ const config = {
3
+ bundle: 'mainDefault',
4
+ pageComponent: 'pageDefault',
5
+ ...route.config,
6
+ };
7
+ return {
8
+ ...route,
9
+ config,
10
+ };
11
+ };
12
+
13
+ export { routeSetDefaults };
@@ -0,0 +1,13 @@
1
+ const routeSetDefaults = (route) => {
2
+ const config = {
3
+ bundle: 'mainDefault',
4
+ pageComponent: 'pageDefault',
5
+ ...route.config,
6
+ };
7
+ return {
8
+ ...route,
9
+ config,
10
+ };
11
+ };
12
+
13
+ export { routeSetDefaults };