@tramvai/module-router 7.5.3 → 7.11.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.
@@ -9,5 +9,5 @@ export { RouterStore, setCurrentNavigation, setUrlOnRehydrate } from './stores/R
9
9
  export { PageErrorStore, setPageErrorEvent } from './stores/PageErrorStore.browser.js';
10
10
  export { usePageService } from './hooks/usePageService.browser.js';
11
11
  export { stopRunAtError } from './modules/utils/stopRunAtError.browser.js';
12
- export { PRERENDER_HOOKS_TOKEN, ROUTER_VIEW_TRANSITIONS_ENABLED, afterNavigateHooksToken, afterUpdateCurrentHooksToken, beforeNavigateHooksToken, beforeResolveHooksToken, beforeUpdateCurrentHooksToken, onChangeHooksToken, routeTransformToken, routerBundleInfoAdditionalToken } from './modules/tokens.browser.js';
12
+ export { ROUTER_VIEW_TRANSITIONS_ENABLED, afterNavigateHooksToken, afterUpdateCurrentHooksToken, beforeNavigateHooksToken, beforeResolveHooksToken, beforeUpdateCurrentHooksToken, onChangeHooksToken, routeTransformToken, routerBundleInfoAdditionalToken } from './modules/tokens.browser.js';
13
13
  export { deserializeError, serializeError } from '@tramvai/safe-strings';
package/lib/index.d.ts CHANGED
@@ -8,7 +8,7 @@ export * from './stores/RouterStore';
8
8
  export * from './stores/PageErrorStore';
9
9
  export * from './hooks/usePageService';
10
10
  export { stopRunAtError } from './modules/utils/stopRunAtError';
11
- export { onChangeHooksToken, beforeNavigateHooksToken, afterNavigateHooksToken, beforeResolveHooksToken, beforeUpdateCurrentHooksToken, afterUpdateCurrentHooksToken, routerBundleInfoAdditionalToken, routeTransformToken, ROUTER_VIEW_TRANSITIONS_ENABLED, PRERENDER_HOOKS_TOKEN, } from './modules/tokens';
11
+ export { onChangeHooksToken, beforeNavigateHooksToken, afterNavigateHooksToken, beforeResolveHooksToken, beforeUpdateCurrentHooksToken, afterUpdateCurrentHooksToken, routerBundleInfoAdditionalToken, routeTransformToken, ROUTER_VIEW_TRANSITIONS_ENABLED, } from './modules/tokens';
12
12
  declare module '@tinkoff/router' {
13
13
  interface RouteConfig {
14
14
  bundle?: string;
package/lib/index.es.js CHANGED
@@ -8,5 +8,5 @@ export { RouterStore, setCurrentNavigation, setUrlOnRehydrate } from './stores/R
8
8
  export { PageErrorStore, setPageErrorEvent } from './stores/PageErrorStore.es.js';
9
9
  export { usePageService } from './hooks/usePageService.es.js';
10
10
  export { stopRunAtError } from './modules/utils/stopRunAtError.es.js';
11
- export { PRERENDER_HOOKS_TOKEN, ROUTER_VIEW_TRANSITIONS_ENABLED, afterNavigateHooksToken, afterUpdateCurrentHooksToken, beforeNavigateHooksToken, beforeResolveHooksToken, beforeUpdateCurrentHooksToken, onChangeHooksToken, routeTransformToken, routerBundleInfoAdditionalToken } from './modules/tokens.es.js';
11
+ export { ROUTER_VIEW_TRANSITIONS_ENABLED, afterNavigateHooksToken, afterUpdateCurrentHooksToken, beforeNavigateHooksToken, beforeResolveHooksToken, beforeUpdateCurrentHooksToken, onChangeHooksToken, routeTransformToken, routerBundleInfoAdditionalToken } from './modules/tokens.es.js';
12
12
  export { deserializeError, serializeError } from '@tramvai/safe-strings';
package/lib/index.js CHANGED
@@ -57,7 +57,6 @@ exports.PageErrorStore = PageErrorStore.PageErrorStore;
57
57
  exports.setPageErrorEvent = PageErrorStore.setPageErrorEvent;
58
58
  exports.usePageService = usePageService.usePageService;
59
59
  exports.stopRunAtError = stopRunAtError.stopRunAtError;
60
- exports.PRERENDER_HOOKS_TOKEN = tokens.PRERENDER_HOOKS_TOKEN;
61
60
  exports.ROUTER_VIEW_TRANSITIONS_ENABLED = tokens.ROUTER_VIEW_TRANSITIONS_ENABLED;
62
61
  exports.afterNavigateHooksToken = tokens.afterNavigateHooksToken;
63
62
  exports.afterUpdateCurrentHooksToken = tokens.afterUpdateCurrentHooksToken;
@@ -1,9 +1,9 @@
1
1
  import flatten from '@tinkoff/utils/array/flatten';
2
2
  import prop from '@tinkoff/utils/object/prop';
3
3
  import { createPapiMethod } from '@tramvai/papi';
4
- import { ROUTES_TOKEN } from '@tramvai/tokens-router';
4
+ import { ROUTES_TOKEN, PRERENDER_HOOKS_TOKEN } from '@tramvai/tokens-router';
5
5
  import { isWildcard, isHistoryFallback } from '@tinkoff/router';
6
- import { routeTransformToken, routerBundleInfoAdditionalToken, PRERENDER_HOOKS_TOKEN } from '../../tokens.es.js';
6
+ import { routeTransformToken, routerBundleInfoAdditionalToken } from '../../tokens.es.js';
7
7
 
8
8
  const deduplicateArray = (list) => {
9
9
  return Array.from(new Set(list));
@@ -63,7 +63,7 @@ const bundleInfoPapi = papi.createPapiMethod({
63
63
  },
64
64
  routeTransform: tokens.routeTransformToken,
65
65
  getAdditionalRoutes: { token: tokens.routerBundleInfoAdditionalToken, optional: true },
66
- hooks: tokens.PRERENDER_HOOKS_TOKEN,
66
+ hooks: tokensRouter.PRERENDER_HOOKS_TOKEN,
67
67
  },
68
68
  });
69
69
  const prerenderRoutesPapi = papi.createPapiMethod({
@@ -75,7 +75,7 @@ const prerenderRoutesPapi = papi.createPapiMethod({
75
75
  return routesList;
76
76
  },
77
77
  deps: {
78
- hooks: tokens.PRERENDER_HOOKS_TOKEN,
78
+ hooks: tokensRouter.PRERENDER_HOOKS_TOKEN,
79
79
  },
80
80
  });
81
81
 
@@ -2,9 +2,9 @@ import prop from '@tinkoff/utils/object/prop';
2
2
  import { Scope, provide, TAPABLE_HOOK_FACTORY_TOKEN, commandLineListTokens, optional } from '@tramvai/core';
3
3
  import { REQUEST_MANAGER_TOKEN, RESPONSE_MANAGER_TOKEN, ASYNC_LOCAL_STORAGE_TOKEN } from '@tramvai/tokens-common';
4
4
  import { SERVER_MODULE_PAPI_PUBLIC_ROUTE } from '@tramvai/tokens-server';
5
- import { ROUTES_TOKEN, ROUTER_TOKEN } from '@tramvai/tokens-router';
5
+ import { PRERENDER_HOOKS_TOKEN, ROUTES_TOKEN, ROUTER_TOKEN } from '@tramvai/tokens-router';
6
6
  import { HttpError, makeErrorSilent } from '@tinkoff/errors';
7
- import { additionalRouterParameters, PRERENDER_HOOKS_TOKEN, routerBundleInfoAdditionalToken, routeTransformToken } from '../../tokens.es.js';
7
+ import { additionalRouterParameters, routerBundleInfoAdditionalToken, routeTransformToken } from '../../tokens.es.js';
8
8
  import { routerOptions } from './routerOptions.es.js';
9
9
  import { bundleInfoPapi, bundleInfoExtendedPapi, prerenderRoutesPapi, resolveRoutes, deduplicateArray } from './bundleInfo.es.js';
10
10
  import { prefetchProviders } from './prefetch.es.js';
@@ -46,7 +46,7 @@ const serverTokens = [
46
46
  useValue: bundleInfo.prerenderRoutesPapi,
47
47
  },
48
48
  core.provide({
49
- provide: tokens.PRERENDER_HOOKS_TOKEN,
49
+ provide: tokensRouter.PRERENDER_HOOKS_TOKEN,
50
50
  scope: core.Scope.SINGLETON,
51
51
  useFactory: ({ hooksFactory }) => ({
52
52
  'prerender:routes': hooksFactory.createAsyncParallel('prerender:routes'),
@@ -76,7 +76,7 @@ const serverTokens = [
76
76
  };
77
77
  },
78
78
  deps: {
79
- hooks: tokens.PRERENDER_HOOKS_TOKEN,
79
+ hooks: tokensRouter.PRERENDER_HOOKS_TOKEN,
80
80
  storage: tokensCommon.ASYNC_LOCAL_STORAGE_TOKEN,
81
81
  },
82
82
  }),
@@ -103,7 +103,7 @@ const serverTokens = [
103
103
  router: tokensRouter.ROUTER_TOKEN,
104
104
  requestManager: tokensCommon.REQUEST_MANAGER_TOKEN,
105
105
  responseManager: tokensCommon.RESPONSE_MANAGER_TOKEN,
106
- hooks: tokens.PRERENDER_HOOKS_TOKEN,
106
+ hooks: tokensRouter.PRERENDER_HOOKS_TOKEN,
107
107
  },
108
108
  }),
109
109
  ...prefetch.prefetchProviders,
@@ -1,4 +1,33 @@
1
- export declare const prefetchProviders: import("@tramvai/core").Provider<unknown, {
1
+ import { Route } from '@tinkoff/router';
2
+ export declare const prefetchProviders: import("@tramvai/core").Provider<{
3
+ router: import("@tinkoff/router").AbstractRouter & {
4
+ __type?: "base token";
5
+ };
6
+ routeTransform: import("@tramvai/tokens-router").RouteTransform & {
7
+ __type?: "base token";
8
+ };
9
+ routeResolve: {
10
+ token: import("@tramvai/tokens-router").RouteResolve & {
11
+ __type?: "base token";
12
+ };
13
+ optional: true;
14
+ };
15
+ logger: import("@tramvai/tokens-common").Logger & ((configOrName: string | {
16
+ [key: string]: any;
17
+ name: string;
18
+ }) => import("@tramvai/tokens-common").Logger) & {
19
+ __type?: "base token";
20
+ };
21
+ pageRegistry: import("@tramvai/tokens-router").PageRegistry & {
22
+ __type?: "base token";
23
+ };
24
+ prefetchHandlers: {
25
+ token: ((route: Route) => Promise<void>) & {
26
+ __type?: "multi token";
27
+ };
28
+ optional: true;
29
+ };
30
+ }, {
2
31
  prefetch: (url: string) => Promise<void>;
3
32
  }>[];
4
33
  //# sourceMappingURL=prefetch.d.ts.map
@@ -1,14 +1,63 @@
1
- import { provide } from '@tramvai/core';
2
- import { LINK_PREFETCH_MANAGER_TOKEN } from '@tramvai/tokens-router';
1
+ import { parse } from '@tinkoff/url';
2
+ import { provide, optional } from '@tramvai/core';
3
+ import { LINK_PREFETCH_MANAGER_TOKEN, ROUTER_TOKEN, ROUTE_RESOLVE_TOKEN, PAGE_REGISTRY_TOKEN, LINK_PREFETCH_HANDLER_TOKEN } from '@tramvai/tokens-router';
4
+ import { LOGGER_TOKEN } from '@tramvai/tokens-common';
5
+ import { routeTransformToken } from '../../tokens.es.js';
3
6
 
4
- // do nothing on server side
5
- const prefetchManager = {
6
- prefetch: async (url) => { },
7
- };
8
7
  const prefetchProviders = [
9
8
  provide({
10
9
  provide: LINK_PREFETCH_MANAGER_TOKEN,
11
- useValue: prefetchManager,
10
+ useFactory: ({ router, routeTransform, routeResolve, logger, pageRegistry, prefetchHandlers, }) => {
11
+ const log = logger('link-prefetch-manager');
12
+ const prefetch = async (url) => {
13
+ log.info({ event: 'prefetch-route-init', url });
14
+ // first, try to find static or resolved dynamic route
15
+ let route = router.resolve(url);
16
+ // if route not found, try to resolve dynamic route,
17
+ // logic from `ROUTER_TOKEN` provider factory, without `router.addRoute` method call
18
+ if (!route && routeResolve) {
19
+ const parsedUrl = parse(url);
20
+ route = await routeResolve({
21
+ url: parsedUrl,
22
+ type: 'navigate',
23
+ });
24
+ if (route) {
25
+ route = routeTransform(route);
26
+ // warmup route for possible navigation
27
+ router.addRoute(route);
28
+ }
29
+ }
30
+ if (!route) {
31
+ log.info({ event: 'prefetch-route-not-found', url });
32
+ return;
33
+ }
34
+ try {
35
+ await pageRegistry.resolve(route);
36
+ await Promise.all(prefetchHandlers.map((handler) => handler(route)));
37
+ log.info({ event: 'prefetch-route-success', url });
38
+ }
39
+ catch (error) {
40
+ log.warn({
41
+ event: 'prefetch-fail',
42
+ url,
43
+ error,
44
+ });
45
+ }
46
+ };
47
+ return {
48
+ prefetch: (url) => {
49
+ return prefetch(url);
50
+ },
51
+ };
52
+ },
53
+ deps: {
54
+ router: ROUTER_TOKEN,
55
+ routeTransform: routeTransformToken,
56
+ routeResolve: optional(ROUTE_RESOLVE_TOKEN),
57
+ logger: LOGGER_TOKEN,
58
+ pageRegistry: PAGE_REGISTRY_TOKEN,
59
+ prefetchHandlers: optional(LINK_PREFETCH_HANDLER_TOKEN),
60
+ },
12
61
  }),
13
62
  ];
14
63
 
@@ -2,17 +2,66 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
+ var url = require('@tinkoff/url');
5
6
  var core = require('@tramvai/core');
6
7
  var tokensRouter = require('@tramvai/tokens-router');
8
+ var tokensCommon = require('@tramvai/tokens-common');
9
+ var tokens = require('../../tokens.js');
7
10
 
8
- // do nothing on server side
9
- const prefetchManager = {
10
- prefetch: async (url) => { },
11
- };
12
11
  const prefetchProviders = [
13
12
  core.provide({
14
13
  provide: tokensRouter.LINK_PREFETCH_MANAGER_TOKEN,
15
- useValue: prefetchManager,
14
+ useFactory: ({ router, routeTransform, routeResolve, logger, pageRegistry, prefetchHandlers, }) => {
15
+ const log = logger('link-prefetch-manager');
16
+ const prefetch = async (url$1) => {
17
+ log.info({ event: 'prefetch-route-init', url: url$1 });
18
+ // first, try to find static or resolved dynamic route
19
+ let route = router.resolve(url$1);
20
+ // if route not found, try to resolve dynamic route,
21
+ // logic from `ROUTER_TOKEN` provider factory, without `router.addRoute` method call
22
+ if (!route && routeResolve) {
23
+ const parsedUrl = url.parse(url$1);
24
+ route = await routeResolve({
25
+ url: parsedUrl,
26
+ type: 'navigate',
27
+ });
28
+ if (route) {
29
+ route = routeTransform(route);
30
+ // warmup route for possible navigation
31
+ router.addRoute(route);
32
+ }
33
+ }
34
+ if (!route) {
35
+ log.info({ event: 'prefetch-route-not-found', url: url$1 });
36
+ return;
37
+ }
38
+ try {
39
+ await pageRegistry.resolve(route);
40
+ await Promise.all(prefetchHandlers.map((handler) => handler(route)));
41
+ log.info({ event: 'prefetch-route-success', url: url$1 });
42
+ }
43
+ catch (error) {
44
+ log.warn({
45
+ event: 'prefetch-fail',
46
+ url: url$1,
47
+ error,
48
+ });
49
+ }
50
+ };
51
+ return {
52
+ prefetch: (url) => {
53
+ return prefetch(url);
54
+ },
55
+ };
56
+ },
57
+ deps: {
58
+ router: tokensRouter.ROUTER_TOKEN,
59
+ routeTransform: tokens.routeTransformToken,
60
+ routeResolve: core.optional(tokensRouter.ROUTE_RESOLVE_TOKEN),
61
+ logger: tokensCommon.LOGGER_TOKEN,
62
+ pageRegistry: tokensRouter.PAGE_REGISTRY_TOKEN,
63
+ prefetchHandlers: core.optional(tokensRouter.LINK_PREFETCH_HANDLER_TOKEN),
64
+ },
16
65
  }),
17
66
  ];
18
67
 
@@ -20,8 +20,5 @@ const routeTransformToken = createToken('router finalRouteTransform');
20
20
  const routerBundleInfoAdditionalToken = createToken('router bundleInfoAdditional', { scope: Scope.REQUEST });
21
21
  const ROUTER_VIEW_TRANSITIONS_ENABLED = createToken('router viewTransitionsEnabled');
22
22
  const BACK_NAVIGATION_WITHIN_ROUTE_TYPE = createToken('router backNavigationWithinRouteType');
23
- const PRERENDER_HOOKS_TOKEN = createToken('tramvai prerender hooks', {
24
- scope: Scope.SINGLETON,
25
- });
26
23
 
27
- export { BACK_NAVIGATION_WITHIN_ROUTE_TYPE, PRERENDER_HOOKS_TOKEN, ROUTER_VIEW_TRANSITIONS_ENABLED, additionalRouterParameters, afterNavigateHooksToken, afterUpdateCurrentHooksToken, beforeNavigateHooksToken, beforeResolveHooksToken, beforeUpdateCurrentHooksToken, onChangeHooksToken, routeTransformToken, routerBundleInfoAdditionalToken, routerClassToken };
24
+ export { BACK_NAVIGATION_WITHIN_ROUTE_TYPE, ROUTER_VIEW_TRANSITIONS_ENABLED, additionalRouterParameters, afterNavigateHooksToken, afterUpdateCurrentHooksToken, beforeNavigateHooksToken, beforeResolveHooksToken, beforeUpdateCurrentHooksToken, onChangeHooksToken, routeTransformToken, routerBundleInfoAdditionalToken, routerClassToken };
@@ -1,5 +1,4 @@
1
- import { AsyncParallelTapableHookInstance, AsyncTapableHookInstance } from '@tinkoff/hook-runner';
2
- import type { NavigationHook, AbstractRouter, NavigationSyncHook, Route, BackNavigationType, NavigationRoute } from '@tinkoff/router';
1
+ import type { NavigationHook, AbstractRouter, NavigationSyncHook, Route, BackNavigationType } from '@tinkoff/router';
3
2
  import type { RouteTransform } from '@tramvai/tokens-router';
4
3
  export declare const routerClassToken: (new (args_0: import("@tinkoff/router").Options) => AbstractRouter) & {
5
4
  __type?: "base token";
@@ -43,13 +42,4 @@ export declare const BACK_NAVIGATION_WITHIN_ROUTE_TYPE: (BackNavigationType.CURR
43
42
  }) | (BackNavigationType.PREVIOUS_TYPE & {
44
43
  __type?: "base token";
45
44
  });
46
- export type PrerenderHooksToken = {
47
- 'prerender:routes': AsyncParallelTapableHookInstance<string[]>;
48
- 'prerender:generate': AsyncTapableHookInstance<NavigationRoute & {
49
- prerenderSkip?: boolean;
50
- }>;
51
- };
52
- export declare const PRERENDER_HOOKS_TOKEN: PrerenderHooksToken & {
53
- __type?: "base token";
54
- };
55
45
  //# sourceMappingURL=tokens.d.ts.map
@@ -20,8 +20,5 @@ const routeTransformToken = createToken('router finalRouteTransform');
20
20
  const routerBundleInfoAdditionalToken = createToken('router bundleInfoAdditional', { scope: Scope.REQUEST });
21
21
  const ROUTER_VIEW_TRANSITIONS_ENABLED = createToken('router viewTransitionsEnabled');
22
22
  const BACK_NAVIGATION_WITHIN_ROUTE_TYPE = createToken('router backNavigationWithinRouteType');
23
- const PRERENDER_HOOKS_TOKEN = createToken('tramvai prerender hooks', {
24
- scope: Scope.SINGLETON,
25
- });
26
23
 
27
- export { BACK_NAVIGATION_WITHIN_ROUTE_TYPE, PRERENDER_HOOKS_TOKEN, ROUTER_VIEW_TRANSITIONS_ENABLED, additionalRouterParameters, afterNavigateHooksToken, afterUpdateCurrentHooksToken, beforeNavigateHooksToken, beforeResolveHooksToken, beforeUpdateCurrentHooksToken, onChangeHooksToken, routeTransformToken, routerBundleInfoAdditionalToken, routerClassToken };
24
+ export { BACK_NAVIGATION_WITHIN_ROUTE_TYPE, ROUTER_VIEW_TRANSITIONS_ENABLED, additionalRouterParameters, afterNavigateHooksToken, afterUpdateCurrentHooksToken, beforeNavigateHooksToken, beforeResolveHooksToken, beforeUpdateCurrentHooksToken, onChangeHooksToken, routeTransformToken, routerBundleInfoAdditionalToken, routerClassToken };
@@ -24,12 +24,8 @@ const routeTransformToken = dippy.createToken('router finalRouteTransform');
24
24
  const routerBundleInfoAdditionalToken = dippy.createToken('router bundleInfoAdditional', { scope: dippy.Scope.REQUEST });
25
25
  const ROUTER_VIEW_TRANSITIONS_ENABLED = dippy.createToken('router viewTransitionsEnabled');
26
26
  const BACK_NAVIGATION_WITHIN_ROUTE_TYPE = dippy.createToken('router backNavigationWithinRouteType');
27
- const PRERENDER_HOOKS_TOKEN = dippy.createToken('tramvai prerender hooks', {
28
- scope: dippy.Scope.SINGLETON,
29
- });
30
27
 
31
28
  exports.BACK_NAVIGATION_WITHIN_ROUTE_TYPE = BACK_NAVIGATION_WITHIN_ROUTE_TYPE;
32
- exports.PRERENDER_HOOKS_TOKEN = PRERENDER_HOOKS_TOKEN;
33
29
  exports.ROUTER_VIEW_TRANSITIONS_ENABLED = ROUTER_VIEW_TRANSITIONS_ENABLED;
34
30
  exports.additionalRouterParameters = additionalRouterParameters;
35
31
  exports.afterNavigateHooksToken = afterNavigateHooksToken;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tramvai/module-router",
3
- "version": "7.5.3",
3
+ "version": "7.11.0",
4
4
  "description": "",
5
5
  "main": "lib/index.js",
6
6
  "browser": {
@@ -26,29 +26,28 @@
26
26
  },
27
27
  "dependencies": {
28
28
  "@tinkoff/errors": "0.8.1",
29
- "@tinkoff/hook-runner": "0.9.1",
30
- "@tinkoff/router": "0.7.21",
29
+ "@tinkoff/router": "0.7.32",
31
30
  "@tinkoff/url": "0.13.1",
32
- "@tramvai/experiments": "7.5.3",
33
- "@tramvai/react": "7.5.3",
31
+ "@tramvai/experiments": "7.11.0",
32
+ "@tramvai/react": "7.11.0",
34
33
  "@tramvai/safe-strings": "0.10.1",
35
- "@tramvai/tokens-child-app": "7.5.3",
36
- "@tramvai/tokens-render": "7.5.3",
37
- "@tramvai/tokens-router": "7.5.3",
38
- "@tramvai/tokens-server": "7.5.3"
34
+ "@tramvai/tokens-child-app": "7.11.0",
35
+ "@tramvai/tokens-render": "7.11.0",
36
+ "@tramvai/tokens-router": "7.11.0",
37
+ "@tramvai/tokens-server": "7.11.0"
39
38
  },
40
39
  "peerDependencies": {
41
40
  "@tinkoff/dippy": "0.13.2",
42
41
  "@tinkoff/utils": "^2.1.2",
43
- "@tramvai/cli": "7.5.3",
44
- "@tramvai/core": "7.5.3",
45
- "@tramvai/module-log": "7.5.3",
46
- "@tramvai/module-server": "7.5.3",
47
- "@tramvai/papi": "7.5.3",
48
- "@tramvai/state": "7.5.3",
49
- "@tramvai/test-helpers": "7.5.3",
50
- "@tramvai/test-mocks": "7.5.3",
51
- "@tramvai/tokens-common": "7.5.3",
42
+ "@tramvai/cli": "7.11.0",
43
+ "@tramvai/core": "7.11.0",
44
+ "@tramvai/module-log": "7.11.0",
45
+ "@tramvai/module-server": "7.11.0",
46
+ "@tramvai/papi": "7.11.0",
47
+ "@tramvai/state": "7.11.0",
48
+ "@tramvai/test-helpers": "7.11.0",
49
+ "@tramvai/test-mocks": "7.11.0",
50
+ "@tramvai/tokens-common": "7.11.0",
52
51
  "react": "*",
53
52
  "tslib": "^2.4.0"
54
53
  },